SpringBoot学习——使用logback配置日志
java中创建日志对象
在springboot的启动类中输出各个级别的日志信息。
MainStart.java
package com.gyqc.ms;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class MainStart extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer {
//
private final static Logger logger = LoggerFactory.getLogger(MainStart.class);
//自定义日志
private final static Logger mylogger = LoggerFactory.getLogger("myLog");
public static void main(String[] args) throws Exception {
SpringApplication.run(MainStart.class, args);
logger.trace("这是一个pzr-pay信息");
logger.trace("这是一个TRACE信息");
logger.debug("这是一个DEBUG信息");
logger.info("这是一个INFO信息");
logger.warn("这是一个WARN信息");
logger.error("这是一个ERROR信息");
mylogger.info("这是我自定义的logger-myLog");
}
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
// container.setPort(80); //修改端口号
}
}
application.properties配置
在src/main/resources下建立application.properties文件。
写入配置文件引用代码
logging.config=classpath:logback.xml
logback.xml配置
logback相关标签说明参阅:
控制台打印
将日志信息输出在控制台,可以对信息格式,过滤器等进行设置。
1. 使用ConsoleAppender创建一个appender。
2. 设置appender,输出内容格式,过滤器等
3. 在root中引用该appender。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextName>SpringBootDemo</contextName>
<!-- 控制台 appender -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
<!-- 此日志文件只记录info级别的 ThresholdFilter是临界值过滤器 过滤掉低于指定临界值的日志。 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 设置过滤级别 -->
<level>info</level>
</filter>
</appender>
<!--控制台打印资源加载信息 等级从trace开始 TRACE < DEBUG < INFO < WARN < ERROR-->
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
文件输出
将日志以文件的方式输出到指定目录。
- 使用RollingFileAppender创建appender。
- 设置appender,输出内容格式,过滤器等。
- 在root中引用该appender
- 下例是输出error的文件到指定目录的指定文件中,每天自动滚动该文件,昨天的文件会被带上日期重命名。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextName>SpringBootDemo</contextName>
<!-- 日志路径 -->
<property name="LOG_PATH" value=" D:/log" />
<!-- 项目路径 -->
<property name="APPDIR" value="SpringBootDemo" />
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/${APPDIR}/log-error.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 日志最大的历史 60天 会自动删除之前的文件 -->
<maxHistory>60</maxHistory>
<!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
命名日志文件,例如log-error-2013-12-21.0.log 如果要使用maxFileSize必须要文件名设置时必须要指定索引.%i -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>2MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--控制台打印资源加载信息 等级从trace开始 TRACE < DEBUG < INFO < WARN < ERROR-->
<root level="info">
<appender-ref ref="ERROR"/>
</root>
</configuration>
自定义日志
- logback.xml中设置日志对象的logger。
<!-- 用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender> -->
<!-- <name> 用来设置某一个包或者具体的某一个类的日志打印级别 -->
<!-- <level> 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。-->
<!-- 如果未设置此属性,那么当前loger将会继承上级的级别。 -->
<!-- <addtivity> -->
<!-- 是否向上级loger传递打印信息。默认是true。 -->
<!-- <loger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。 -->
<logger name="myLog" additivity="false">
<appender-ref ref="MYLOG"/>
</logger>
- logback.xml中设置logger的appender。
<!-- INFO日志 使用级别过滤器,值记录INFO的日志 -->
<appender name="MYLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/${APPDIR}/log-mylog.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-mylog-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 日志最大的历史 60天 会自动删除之前的文件 -->
<maxHistory>60</maxHistory>
<!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
命名日志文件,例如log-error-2013-12-21.0.log 如果要使用maxFileSize必须要文件名设置时必须要指定索引.%i -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>2MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录info级别的 LevelFilter是级别过滤器-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 设置过滤级别 -->
<level>info</level>
<onMatch>ACCEPT</onMatch>
<!-- 用于配置不符合过滤条件的操作 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
- 创建一个自定义名称的日志对象。
注意:getLogger(“”)中参数与logger的name一致。
private final static Logger mylogger = LoggerFactory.getLogger("myLog");
- 使用该对象输出日志。
mylogger.info("这是我自定义的logger-myLog");
filter说明
日志等级:从trace开始 TRACE < DEBUG < INFO < WARN < ERROR
filter是appender的过滤器,包括:
1. LevelFilter:级别过滤器,只输出指定级别日志信息。
2. ThresholdFilter:临界值过滤器,会输出指定级别及以上的日志信息。
3. EvaluatorFilter:条件过滤器,只输出符合鉴别器规定的日志信息。
LevelFilter级别过滤器
引用“ch.qos.logback.classic.filter.LevelFilter”
<!-- 此日志文件只记录info级别的 LevelFilter是级别过滤器-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 设置过滤级别 -->
<level>info</level>
<!-- DENY,日志将立即被抛弃不再经过其他过滤器 -->
<!-- NEUTRAL,有序列表里的下个过滤器过接着处理日志 -->
<!-- ACCEPT,日志会被立即处理,不再经过剩余过滤器 -->
<!-- 用于配置符合过滤条件的操作 -->
<onMatch>ACCEPT</onMatch>
<!-- 用于配置不符合过滤条件的操作 -->
<onMismatch>DENY</onMismatch>
</filter>
ThresholdFilter临界值过滤器
引用“ch.qos.logback.classic.filter.ThresholdFilter”
<!-- 此日志文件只记录info级别的 ThresholdFilter是临界值过滤器 过滤掉低于指定临界值的日志。 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 设置过滤级别 -->
<level>info</level>
</filter>
EvaluatorFilter条件过滤器
引用“ch.qos.logback.core.filter.EvaluatorFilter”
需要注意的是,该过滤器依赖org.apache.servicemix.bundles.janino
所以在pom.xml的dependencies中引入
<!-- logback使用条件过滤器时需要的包 -->
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.janino</artifactId>
<version>2.6.1_1</version>
</dependency>
过滤器写法
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<!-- 鉴别器 -->
<evaluator>
<expression>return message.contains("pzr-pay");</expression>
</evaluator>
<!-- 用于配置符合过滤条件的操作 -->
<onMatch>ACCEPT</onMatch>
<!-- 用于配置不符合过滤条件的操作 -->
<onMismatch>DENY</onMismatch>
</filter>