1.創建springboot項目(這里不講解)
2.pom.xml中引入jar包相關依賴
注:springboot默認是用logback的日志框架的,所以需要排除logback,不然會出現jar依賴沖突的報錯
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions><!-- 去掉springboot默認配置 --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <!-- 引入log4j2依賴 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
2.寫配置文件
(1)如果自定義了文件名,需要在application.yml中配置。
logging:
config: xxxx.xml
level:
cn.jay.repository: trace
(2)默認情況下,系統會在classpath下查找配置文件:(按照以下順序)
1.classpath下名為 log4j-test.json 或者log4j-test.jsn文件 2.classpath下名為 log4j2-test.xml 3.classpath下名為 log4j.json 或者log4j.jsn文件 4.classpath下名為 log4j2.xml
注:此處我們常用的是log4j2.xml,詳解如下
<!--日志級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!-- 自定義命名格式: %d:發生時間,%d{yyyy-MM-dd HH:mm:ss,SSS},輸出類似:2020-02-20 22:10:28,921 %F:輸出所在的類文件名 %t:線程名稱 %p:日志級別 %c:日志消息所在類名 %m:消息內容 %M:輸出所在函數名 %x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。 %l:執行的函數名(類名稱:行號)com.core.LogHelper.aroundService(LogHelper.java:32) %n:換行 %i:從1開始自增數字 %-5level:輸出日志級別,-5表示左對齊並且固定輸出5個字符,如果不足在右邊補0 “${sys:user.home}”是HOME目錄 如:C:\Users\heave, 此處指定任意目錄如:D:\logs --> <!--設置log4j2自身log級別為warn,每間隔30秒數自動檢測配置是否發生修改,並重新配置--> <configuration status="warn" monitorInterval="30"> <Properties> <!-- 日志顯示模板,顯示內容的格式如下 --> <!-- [21:55:33:047] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Initializing Spring embedded WebApplicationContext --> <Property name="log_pattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <!-- 保存日志文件目錄 --> <!--<Property name="file_path" value="${sys:user.home}/logs"/>--> <Property name="file_path" value="D:/logs"/> <!-- 日志文件的最大容量,超過該值就進行備份 --> <Property name="file_max_size" value="30MB"/> <!-- 備份的文件夾名稱 如下為:2020-02 --> <Property name="backup_folder" value="$${date:yyyy-MM}"/> <!-- 備份文件的后綴,日志文件超過file_max_size會備份到filePattern指定的目錄下 --> <Property name="backup_file_suffix" value="-%d{yyyy-MM-dd}-%i.log"/> </Properties> <!--定義appender--> <appenders> <!--控制台的輸出配置--> <console name="Console" target="SYSTEM_OUT"> <!-- 設置控制台只輸出info及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) --> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <!--輸出日志的格式--> <PatternLayout pattern="${log_pattern}"/> </console> <!-- 所有的日志信息會打印到此文件中,append=false每次啟動程序會自動清空 --> <!-- <File name="all" fileName="${file_path}/all.log" append="true"> <PatternLayout pattern="${log_pattern}"/> </File>--> <!-- 該RollingFile存儲INFO級別的日志, 默認存儲到 fileName 文件中 超過SizeBasedTriggeringPolicy的設定值,則存儲到 filePattern 文件中 --> <RollingFile name="RollingFileInfo" fileName="${file_path}/info.log" filePattern="${file_path}/${backup_folder}/info${backup_file_suffix}"> <!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/> <!-- 寫入日志文件的模板 --> <PatternLayout pattern="${log_pattern}"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="${file_max_size}"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件,超過該數量,會滾動刪除前面的記錄 --> <DefaultRolloverStrategy max="20"/> </RollingFile> <RollingFile name="RollingFileWarn" fileName="${file_path}/warn.log" filePattern="${file_path}/${backup_folder}/warn${backup_file_suffix}"> <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${log_pattern}"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="${file_max_size}"/> </Policies> </RollingFile> <RollingFile name="RollingFileError" fileName="${file_path}/error.log" filePattern="${file_path}/${backup_folder}/error${backup_file_suffix}"> <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${log_pattern}"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="${file_max_size}"/> </Policies> </RollingFile> </appenders> <!-- 只有定義了logger並使用appender-ref,appender才會生效 --> <loggers> <!--過濾掉spring和hibernate的一些無用的debug信息--> <logger name="org.springframework" level="ERROR"/> <logger name="org.mybatis" level="ERROR"> <!-- 添加如下設置,控制台會再打印一次 --> <AppenderRef ref="Console"/> </logger> <root level="INFO"> <appender-ref ref="Console"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileWarn"/> <appender-ref ref="RollingFileError"/> </root> </loggers> </configuration>
目錄結構如下:
3.springboot啟動類 LogApplication.java
@SpringBootApplication public class LogApplication { private static Logger logger = LoggerFactory.getLogger(LogApplication.class); public static void main(String[] args) { logger.debug("log4j2 ——————————debug!————————————"); logger.info("log4j2 ——————————info!————————————-"); logger.error("log4j2 ——————————error!————————————"); logger.warn("log4j2 ——————————warn!————————————-"); SpringApplication.run(LogApplication.class, args); logger.info("springboot啟動成功。。。。。。。。。。。。。。"); } }
4.controller測試類:
@RestController public class DemoController { private static final Logger log = LoggerFactory.getLogger(DemoController.class); @RequestMapping("/test") public String demo() { log.info("log4j2-------/test接口調用成功-----------"); return "log4j2"; } }
5.啟動springboot,結果如下:
瀏覽器輸入:http://localhost:8001/test,如下
————————————————————————
使用完畢
<Property name="file_path" value="D:/logs"/>