内容概要
旨在用于spring boot生态圈,可直接使用的 日志记录配置。
环境jar包
jdk: jdk1.8.0_121(32位)
pom:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
下方集合包内 包含以上两个包。不用重复导入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
配置方法
系统启动时会按如下顺序加载配置,且加载到配置后不再向下执行。
1、java -Dlogback.configurationFile=/log/conf/logback.xml RunApplication ,执行RunApplication 类的时候就会加载/log/conf/logback.xml
2、在application.properties 配置日志 logging.config =classpath: logback.xml
3、在classpath下加载logback.groovy文件
4、在classpath下加载 logback-RunApplication.xml 文件
5、在classpath下加载 logback.xml 文件
6、jdk1.8 会直接调用ServiceLoader,使用com.qos.logback.classic.spi.Configurator接口的第一个实现类,使用ch.qos.logback.classic.BasicConfigurator,在控制台下输出日志。
logback的xml配置格式
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志地址-->
<property name="log_home" value="logs" />
<!-- 控制台输出 -->
<appender name="sys_stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 系统info日志输出 -->
<appender name="sys_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_home}/info.log</file>
<filter class="系统.filter.NormalLoggerFilter"></filter>
<!--滚动机制 日志保存-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天生成一份日志 -->
<fileNamePattern>${log_home}/info/info-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 最多保留45天 -->
<maxHistory>45</maxHistory>
</rollingPolicy>
<encoder> <!--日志输出格式-->
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 系统error日志输出 -->
<appender name="sys_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_home}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天生成一份日志 -->
<fileNamePattern>${log_home}/error/error-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 最多保留45天 -->
<maxHistory>45</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统task计划日志输出 -->
<appender name="sys-task" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_home}/task.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天生成一份日志 -->
<fileNamePattern>${log_home}/task/task-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 最多保留2天 -->
<maxHistory>2</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 报文数据日志输出 -->
<appender name="data" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_home}/dataLog/data.log</file>
<filter class="系统.filter.XMLDataFilter"></filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天单独生成一份日志 -->
<fileNamePattern>${log_home}/dataLog/data-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 最多保存 45天 -->
<maxHistory>45</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 系统接口日志保存 -->
<appender name="interface" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_home}/interfaceLog/interface.log</file>
<filter class="系统.filter.InterfaceLoggerFilter"></filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天备份一份日志 -->
<fileNamePattern>${log_home}/interfaceLog/interface-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 只保存45天 -->
<maxHistory>45</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="info"> <!--info级 将附加器添加 输出格式按各自自定义输出 -->
<appender-ref ref="sys_stdout" />
<appender-ref ref="sys_info" />
<appender-ref ref="sys_error" />
<appender-ref ref="interface" />
<appender-ref ref="data" />
</root>
<!-- 计划任务日志 单独设置DEBUG 输出格式 自定义优先-->
<logger name="系统.components.schedule.job" level="DEBUG">
<appender-ref ref="sys-task" />
</logger>
</configuration>
调用方法
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//logback 内部实现了slf4j 可直接调用。
public class Test{
private static Logger log = LoggerFactory.getLogger(Test.class);
public void A(){
log.debug("======debug");
log.info("======info");
log.warn("======warn");
log.error("======error");
}
}
日志生成格式
文件夹 /log下
文件夹 logs/error下