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 一樣。