該項目已同步到github中,地址:https://github.com/jiangcaijun/spring-boot-all/tree/master/spring-boot-log-log4j2html
logj2
實現日誌的打印與歸類<dependency> <!-- exclude掉spring-boot的默認log配置 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <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>
logging: config: classpath: log4j2-spring.xml
log4j2.xml
中,關於日誌輸出格式格式的定義以下:<!-- 項目統一日誌輸出格式-控制檯 --> <property name="lOBACK_CONSOLE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %highlight{%p} %style{%logger}{Normal,cyan} :%L %style{->}{yellow} %msg%n" />
該配置能夠按日誌級別打印出不一樣顏色的日誌,最終效果可參見底部圖片git
junit
單元測試@RunWith(SpringRunner.class) @SpringBootTest public class SpringBootLogApplicationTests { private static Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class); @Test public void contextLoads() { logger.info("info級別的日誌"); logger.warn("warn級別的日誌"); logger.error("error級別的日誌"); } }
junit
方法運行,效果以下: github
log4j2
的日誌輸出格式,可參考官方連接:http://logging.apache.org/log4j/2.x/manual/layouts.htmllog4j2-spring.xml
配置以下:<?xml version="1.0" encoding="UTF-8"?> <!--設置log4j2的自身log級別爲warn --> <configuration status="warn"> <properties> <Property name="app_name">spring-boot-log-log4j2</Property> <Property name="log_path">logs/${app_name}</Property> <!-- 項目統一日誌輸出格式-控制檯 --> <property name="lOBACK_CONSOLE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %highlight{%p} %style{%logger}{Normal,cyan} :%L %style{->}{yellow} %msg%n" /> <!-- 項目統一日誌輸出格式-文本 --> <property name="lOBACK_FILE_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss}] [%thread] {%p} %logger{50} :%L -> %msg%n" /> </properties> <appenders> <console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="${lOBACK_CONSOLE_PATTERN}" /> </console> <RollingFile name="RollingFileInfo" fileName="${log_path}/info.log" filePattern="${log_path}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz"> <Filters> <ThresholdFilter level="INFO" /> <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" /> </Filters> <PatternLayout pattern="${lOBACK_FILE_PATTERN}" /> <Policies> <!-- 歸檔天天的文件 --> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> <!-- 限制單個文件大小 --> <SizeBasedTriggeringPolicy size="20 MB" /> </Policies> <!-- 限制天天文件個數 --> <DefaultRolloverStrategy compressionLevel="0" max="10"/> </RollingFile> <RollingFile name="RollingFileWarn" fileName="${log_path}/warn.log" filePattern="${log_path}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz"> <Filters> <ThresholdFilter level="WARN" /> <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL" /> </Filters> <PatternLayout pattern="${lOBACK_FILE_PATTERN}" /> <Policies> <!-- 歸檔天天的文件 --> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> <!-- 限制單個文件大小 --> <SizeBasedTriggeringPolicy size="20 MB" /> </Policies> <!-- 限制天天文件個數 --> <DefaultRolloverStrategy compressionLevel="0" max="10"/> </RollingFile> <RollingFile name="RollingFileError" fileName="${log_path}/error.log" filePattern="${log_path}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz"> <ThresholdFilter level="ERROR" /> <PatternLayout pattern="${lOBACK_FILE_PATTERN}" /> <Policies> <!-- 歸檔天天的文件 --> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> <!-- 限制單個文件大小 --> <SizeBasedTriggeringPolicy size="20 MB" /> </Policies> <!-- 限制天天文件個數 --> <DefaultRolloverStrategy compressionLevel="0" max="10"/> </RollingFile> <!-- 配置mongdb appender --> </appenders> <loggers> <!--過濾掉spring和hibernate的一些無用的debug信息 --> <root level="info"> <appender-ref ref="Console" /> <appender-ref ref="RollingFileInfo" /> <appender-ref ref="RollingFileWarn" /> <appender-ref ref="RollingFileError" /> <!-- 輸出日誌到mongodb --> </root> </loggers> </configuration>