在Springboot 项目中经常会用到打印日志,日志除了在控制台输出,更多的是要文件的格式,存放的服务器上面。而且还要都日志文件进行区分,比如,普通日志、错误日志、按照日期存储日志,配置单个日志文件最大容量,删除多少天之前的文件等等!
下面和大家分享一下日志文件的配置,
springboot日志管理支持Logback、Log4j2和Log4j;下面我们使用Logback来实现日志的配置。
logback.xml文件需要放在springboot程序的自动加载的路径:
logback.xml:
<configuration debug="true" scanPeriod="10 seconds">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="./logs"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_HOME}/logs.log</file>
<append>true</append>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} Line:%-3L - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 用户访问记录 -->
<appender name="accessLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/service.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/service.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss}%msg%n</pattern>
</encoder>
</appender>
<appender name="errorAppender" class="ch.qos.logback.core.FileAppender">
<file>${LOG_HOME}/error.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<append>true</append>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} Line:%-3L - %msg%n</pattern>
</encoder>
</appender>
<appender name="warnAppender" class="ch.qos.logback.core.FileAppender">
<file>${LOG_HOME}/warn.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<append>true</append>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} Line:%-3L - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
<appender-ref ref="errorAppender"/>
<appender-ref ref="warnAppender"/>
</root>
<logger name="accessLog" level="INFO" additivity="true">
<appender-ref ref="accessLogAppender"/>
</logger>
</configuration>
测试:
运行下面程序:
@SpringBootApplication
public class DemoApplication {
private final static Logger LOGGER = LoggerFactory.getLogger(DemoApplication.class);
private static Logger accessLog = LoggerFactory.getLogger("accessLog");
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
while (true) {
LOGGER.info("普通日志");
LOGGER.error("错误日志");
LOGGER.warn("告警日志");
accessLog.info("请求日志");
}
}
}
执行一段时间,如果在项目路径下生成以下日志文件说明配置成功。