log4j2是對log4j的一種顛覆式變化,添加多線程下的無鎖寫入,比logback速度還快。廢棄了以前的properties方式,用xml或json來代替。html
springboot集成須要先移除默認的logback依賴。spring
在spring-boot-start和spring-boot-start-test中添加如下內容,移除logbackapache
<exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions>
再添加:json
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>2.1.1.RELEASE</version> </dependency>
因log4j2和logback如今統一使用SLF4j做爲統一API所以若是lombok的話,則不用作任何修改。springboot
springboot默認支持log4j的名字是 log4j2-spring.xml多線程
spring的application.properties中添加如下內容。app
logging.config=classpath:log4j2-spring.xml
spring.output.ansi.enabled=ALWAYS
同時建立log4j2-spring.xml文件,便可輸出log4j內容。spring-boot
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF" packages="cn.com.testproject"> <appenders> <Console name="console"> <PatternLayout pattern="%highlight{[%p] %-d{yyyy-MM-dd HH:mm:ss,SSS} >>> %l%n[massage] %m%n}{FATAL=red, ERROR=red, WARN=yellow, INFO=cyan, DEBUG=cyan,TRACE=blue}"/> </Console> <RollingFile type="RollingFile" name="file" fileName="${LOG_HOME}/app.log" filePattern="${LOG_HOME}/%d{yyyy}-app-%i.zip" append="false">
<PatternLayout pattern="[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %l >>> %m%n" />
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<SizeBasedTriggeringPolicy size="1024 MB"/> <!-- <SizeBasedTriggeringPolicy size="1k"/> --> </Policies> <DefaultRolloverStrategy max="3"> <!-- <Delete basePath="exp/" maxDepth="1"> --> <!-- <IfFileName glob="*.zip" /> --> <!-- <IfLastModified age="7d" /> --> <!-- </Delete> --> </DefaultRolloverStrategy> </RollingFile> <!--(error單獨輸出)--> <RollingFile name="error-file" fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/%d{yyyy}-error-%i.zip" append="false"> <PatternLayout pattern="[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %l >>> %m%n" /> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><!--(只接收error單獨輸出)--> <Policies> <TimeBasedTriggeringPolicy modulate="true" interval="1"/> <SizeBasedTriggeringPolicy size="1024 MB"/> </Policies> <DefaultRolloverStrategy max="1"> </DefaultRolloverStrategy> </RollingFile> <RollingFile name="appinfo-file" fileName="${LOG_HOME}/appinfo/appinfo.log" filePattern="${LOG_HOME}/appinfo/$${date:yyyy-MM-dd}/appinfo-%d-%i.zip" append="false"> <PatternLayout pattern="%d [%t] %-5p > %m %n" /> <Policies> <!-- 天天換文件到日期目錄 --> <TimeBasedTriggeringPolicy modulate="true" interval="1"/> <!-- 到文件大小後 移動到 filePattern指定目錄 --> <SizeBasedTriggeringPolicy size="1024 MB"/> </Policies> <DefaultRolloverStrategy max="1"> <!-- <Delete basePath="exp/appinfo/" maxDepth="1"> --> <!-- <IfFileName glob="*.zip" /> --> <!-- <IfLastModified age="7d" /> --> <!-- </Delete> --> </DefaultRolloverStrategy> </RollingFile> </appenders> <loggers> <!--additivity="true" 如果additivity設爲true,則子Logger不止會在本身的appender裏輸出,還會在root的logger的appender裏輸出 --> <logger name="error" level="info" additivity="true"> <appender-ref ref="console" /> <appender-ref ref="error-file" /> </logger> <logger name="appinfo" level="info" additivity="true"> <appender-ref ref="console" /> <appender-ref ref="appinfo-file" /> </logger> <logger name="org.springframework" level="info" additivity="false"> <appender-ref ref="console" /> <appender-ref ref="file" /> </logger> <logger name="org.springframework.jdbc.core" level="info" additivity="false"> <appender-ref ref="console" /> <appender-ref ref="file" /> </logger> <logger name="cn.com.testproject.core" level="debug" additivity="false"> <appender-ref ref="console" /> <appender-ref ref="file" /> </logger> <root level="debug"> <appender-ref ref="console" /> <appender-ref ref="file" /> <appender-ref ref="error-file" /><!--(只接收error單獨輸出)--> </root> </loggers> </configuration>
同時注意log_home的傳入,從外界不能直接使用${log_home},而是將外界的值,傳遞給property。spa
<properties>
<property name="LOG_HOME">${sys:LOG_HOME}</property>
</properties>
在使用的地方使用便可。${LOG_HOME}.net
log4j2下彩色設置:
<Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%highlight{[%p] %-d{yyyy-MM-dd HH:mm:ss,SSS} >>> %l%n[massage] %m%n}{FATAL=red, ERROR=red, WARN=yellow, INFO=cyan, DEBUG=cyan,TRACE=blue}"/> </Console>
<PatternLayout pattern="%highlight{[ %p ] [%-d{yyyy-MM-dd HH:mm:ss}] [ LOGID:%X{logid} ] [%l] %m%n}"/>
以上的形式%highlight{****}便可。
可是在log4j2.10後,在2.10版本之後,Log4j2默認關閉了Jansi(一個支持輸出ANSI顏色的類庫)。
IDEA: Run -》 Edit Configurations -》Environment,在VM options中添加 -Dlog4j.skipJansi=false
Eclipse :Run Configurations->Arguments-> VM arguments
-Dlog4j.skipJansi=false
參見:https://blog.csdn.net/zzc199055/article/details/86706695
注意:
RollingFile 必定要加 type=「RollingFile」,由於name咱們可能會隨意起,而不是使用RollingFile,所以用type來聲明。
若是發現某些配置不起做用,可將configuration變爲 trace來獲取具體信息,平時設置爲 status="OFF"
<configuration status="trace"
刪除無用文件可參考如下寫法:
<DefaultRolloverStrategy max="5"> <Delete basePath="${LOG_HOME}" maxDepth="1"> <IfFileName glob="appManager-*.log.zip"> <IfAny> <IfAccumulatedFileCount exceeds="1"/> </IfAny> </IfFileName> <!-- <IfLastModified age="5d" />--> </Delete>
此處有篇文章講的很是詳細關於log4j2中的參數使用
log4j2的官方文檔: http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender