log4j 和 logback 日誌配置

Log4j 日誌配置

導 jar 包

引入相關的 log4j 的 jar 包,建議直接用 maven 導入。

在這裏插入圖片描述

加入日誌文件

eclipse 項目的話,在 Source Folder 下面新建一個文件名 log4j.properties 的文件,記住,文件名不能修改,然後就可以在裏面寫配置的。

如果是 SpringBoot 項目的話,官方推薦在 src/main/resources 目錄下加入 log4j-spring.properties 配置文件。

配置日誌文件

輸出到控制檯

#在開發環境下日誌級別設置成DEBUG,生產環境設置成info或5error
log4j.rootLogger=INFO,stdout,file,jdbc

#輸出到控制檯
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=info
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n

輸出到本地文件

在前面的基礎上加入下面的代碼:

#輸出到本地文件
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=D:/log/log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=info
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n

輸出到數據庫

在前面的基礎上加入下面的代碼:

#輸出到數據庫
log4j.appender.jdbc=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.jdbc.driver=com.mysql.jdbc.Driver
log4j.appender.jdbc.URL=jdbc:mysql://localhost:3306/recruit?characterEncoding=utf8&userSSL=true
log4j.appender.jdbc.user=root
log4j.appender.jdbc.password=root
log4j.appender.jdbc.sql=insert into log_icecoldmonitor(level,category,thread,time,location,note) values('%p','%c','%t','%d{yyyy-MM-dd HH:mm:ss:SSS}','%l','%m')

創建數據庫表存放:

CREATE TABLE `log_icecoldmonitor`(
	`id` int(11) not null auto_increment,
	`level` varchar(255) not null default '' comment '優先級',
	`category` varchar(255) not null default '' comment '類目',
	`thread` varchar(255) not null default '' comment '進程',
	`time` varchar(30) not null default '' comment '時間',
	`location` varchar(255) not null default '' comment '位置',
	`note` text comment '日誌信息',
	PRIMARY KEY(`id`)
);

關閉框架日誌輸出

在前面的基礎上加入下面的代碼:

#關閉對應框架的日誌輸出到文件
log4j.logger.org.springframework=OFF
log4j.logger.com.ibatis=OFF
log4j.logger.org.mybatis.spring.mapper=OFF

使用方法

public class AdminController {	
	public static final Logger log = LoggerFactory.getLogger(AdminController.class);
	
	@RequestMapping("/index/log")
	@ResponseBody
	public String test() {
		log.info("測試寫入日誌到數據庫");
		log.error("我是錯誤信息");
		return "test";
	}
}

控制檯上的輸出效果:

在這裏插入圖片描述

數據庫的存儲:

在這裏插入圖片描述

Logback 日誌配置

導 jar 包

<!-- logback 日誌的配置 -->
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

加入日誌文件

src/main/resources 目錄下新建一個 logback.xml文件即可。

配置日誌文件

<?xml version="1.0" encoding="UTF-8"?>

<!-- scan 爲 true 時 -->
<!-- scanPeriod 表示每 60 秒鐘掃描一次配置,檢測是否有變化,有變化就重新加載 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

	<!-- 定義參數常量(全局變量) -->
	<!-- logback 日誌級別:TRACE<DEBUG<INFO<WARN<ERROR -->
	<porperty name="log.level" value="debug" />  <!-- 日誌級別 -->
	<porperty name="log.maxHistory" value="30" /> <!-- 文件保留多長的時間(保存30天) -->
	<!-- ${catalina.base}: tomcat 實例的根目錄,可以自己修改爲其他路徑 -->
	<porperty name="log.filePath" value="${catalina.base}/logs/webapps" /> <!-- 日誌存儲的根路徑 -->
	<property name="log.pattern"
		value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n" /> <!-- 日誌展現的格式 -->

	<!-- CONSOLE 輸出日誌到控制檯 -->
	<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<!-- ${log.pattern}:表示調用上面 name 爲 log.pattern 的 porperty -->
			<!-- 也就是引入上面 porperty 定義好的日誌輸出格式 -->
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>
	
	<!-- DEBUG 輸出 debug 信息到指定文件 -->
	<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.filePath}/debug.log</file> <!-- 文件路徑 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 基於時間滾動,設置爲按天滾動(意味着日誌文件是按天區分的) -->
			<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern> 
			<maxHistory>${log.maxHistory}</maxHistory> <!-- 文件最大保存歷史數量 -->
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!-- fiter 過濾器 -->
		<!-- 過濾掉不是 DEBUG 的記錄,只記錄 DEBUG 的記錄 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMath>ACCEPT</onMath>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	<!-- INFO 輸出 info 信息到指定文件 -->
	<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.filePath}/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMath>ACCEPT</onMath>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	<!-- ERROR 輸出 error 信息到指定文件 -->
	<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.filePath}/error.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMath>ACCEPT</onMath>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	<!-- logger.name: 用來指明記錄哪個包下面的日誌 -->
	<!-- logger.level: 用來表示僅記錄哪個 level 級別以上的日誌 -->
	<logger name="com.zwd.o2o" level="${log.level}" additivity="true">
         <!-- 綁定前面跟文件相關的 appender -->
		<appender-ref ref="debugAppender" /> 
		<appender-ref ref="infoAppender" />
		<appender-ref ref="errorAppender" />
	</logger>
	
	<!-- 表示 info 級別以上的日誌信息輸出到控制檯 -->
	<root level="info">
		<appender-ref ref="consoleAppender" />
	</root>
	
</configuration>

appender標籤:用來表示輸出的介質,也就是把日誌信息輸出到哪裏

RollingFileAppender:rolling 滾動的意思,表示日誌信息更新時,會一直在指定的 log 文件滾動添加,或者是按天來劃分日誌文件。

使用方法跟上面 的 log4j 一樣。

發佈了85 篇原創文章 · 獲贊 218 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章