java.util.logging
java自带的日志实现类
log4j
比java.util.logging功能更加丰富的日志实现类
具体差别请看Log4j 对比 java.util.logging
而Log4j 2是Log4j的升级版本,Log4j 2相对于Log4j 1.x 有了很多显著的改善。
slf4j
日志的整体抽象层,可以任意切换使用多个日志相关jar包
Spring Boot 采用了 slf4j+logback 的组合形式,Spring Boot也提供对JUL、log4j2、Logback提供了默认配置
引入log4j2日志
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!-- 排除springboot默认的logback日志框架 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入日志依赖 自带slf4j-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
日志配置文件
使用方法
Logger log = LoggerFactory.getLogger(TestController.class);
log.info("get available prefix index file {}", codePrefixIndex);
############################################################
#
# 日志 配置
#
############################################################
# 配置日志的生成目录,只设置这个的话,系统默认生成的日志文件名为spring.log
#logging.path = mylog/
# 配置日志文件名和路径,系统推荐(如果logging.path和logging.file同时存在,只有logging.file有效)
#logging.file= mylog/myspring.log
根据日期分类
<configuration status="WARN" monitorInterval="1800">
<Properties>
<property name="basePath">log4j2Logsproperty>
<property name="console_log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level %l} -
%m%n
property>
<property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M -
%m%n
property>
<property name="every_file_size">20MBproperty>
<property name="output_log_level">DEBUGproperty>
<property name="rolling_fileName">${basePath}/all.logproperty>
<property name="rolling_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-all.log.zip
property>
<property name="rolling_max">50property>
<property name="info_fileName">${basePath}/info.logproperty>
<property name="info_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-info.log.zip
property>
<property name="info_max">10property>
<property name="warn_fileName">${basePath}/warn.logproperty>
<property name="warn_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-warn.log.zip
property>
<property name="warn_max">10property>
<property name="error_fileName">${basePath}/error.logproperty>
<property name="error_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-error.log.zip
property>
<property name="error_max">10property>
<property name="console_print_level">DEBUGproperty>
<property name="druid_fileName">${basePath}/druid.logproperty>
<property name="druid_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-druid.log.zip
property>
<property name="druid_max">10property>
Properties>
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<ThresholdFilter level="${console_print_level}" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${console_log_pattern}"/>
Console>
<RollingFile name="RollingFile" fileName="${rolling_fileName}"
filePattern="${rolling_filePattern}">
<PatternLayout pattern="${log_pattern}"/>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="20 MB" />
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<DefaultRolloverStrategy max="${info_max}">
<Delete basePath="${basePath}/time-based-logs/" maxDepth="2">
<IfFileName glob="*.log.zip" />
<IfLastModified age="720H" />
Delete>
DefaultRolloverStrategy>
Policies>
RollingFile>
<RollingFile name="InfoFile" fileName="${info_fileName}"
filePattern="${info_filePattern}">
<PatternLayout pattern="${log_pattern}"/>
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="${every_file_size}" />
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<DefaultRolloverStrategy max="${info_max}"/>
Policies>
RollingFile>
<RollingFile name="WarnFile" fileName="${warn_fileName}"
filePattern="${warn_filePattern}">
<PatternLayout pattern="${log_pattern}"/>
<Filters>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="${every_file_size}" />
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<DefaultRolloverStrategy max="${info_max}"/>
Policies>
RollingFile>
<RollingFile name="ErrorFile" fileName="${error_fileName}"
filePattern="${error_filePattern}">
<PatternLayout pattern="${log_pattern}"/>
<Filters>
<ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="${every_file_size}" />
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<DefaultRolloverStrategy max="${info_max}"/>
Policies>
RollingFile>
<RollingFile name="druidSqlRollingFile" fileName="${druid_fileName}"
filePattern="${druid_filePattern}">
<PatternLayout pattern="${druid_pattern}"/>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="${every_file_size}" />
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<DefaultRolloverStrategy max="${info_max}"/>
Policies>
RollingFile>
appenders>
<loggers>
<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
<Logger name="org.crsh.plugin" level="warn" />
<logger name="org.crsh.ssh" level="warn"/>
<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
<logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
<logger name="org.thymeleaf" level="warn"/>
<logger name="java.sql" level="debug" additivity="false">
<appender-ref ref="Console"/>
logger>
<logger name="druid.sql.Statement" level="debug" additivity="false">
<appender-ref ref="druidSqlRollingFile"/>
logger>
<root level="${output_log_level}">
<appender-ref ref="RollingFile"/>
<appender-ref ref="Console"/>
<appender-ref ref="InfoFile"/>
<appender-ref ref="WarnFile"/>
<appender-ref ref="ErrorFile"/>
root>
loggers>
configuration>
Run —> Edit Configurations —>Environment,在VM options中添加
-Dlog4j.skipJansi=false
上述的console_log_pattern中,添加%highlight {} 被括起来的都会有颜色
<property name="console_log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level %l} -
%m%n
</property>
<DefaultRolloverStrategy>
<Delete basePath="${basePath}/time-based-logs/" maxDepth="2">
<IfFileName glob="*.log.zip" />
<!--!Note: 这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用
另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->
<!--只保留7天内日志压缩包-->
<!--<IfLastModified age="168H" />-->
<!--只保留一个月内日志压缩包-->
<IfLastModified age="720H" />
</Delete>
</DefaultRolloverStrategy>