SpringBoot学习——使用logback配置日志

    xiaoxiao2021-03-25  134

    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相关标签说明参阅: http://www.cnblogs.com/lixuwu/p/5804793.html http://blog.csdn.net/haidage/article/details/6794509/

    控制台打印

    将日志信息输出在控制台,可以对信息格式,过滤器等进行设置。 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>

    参考

    http://blog.csdn.net/haidage/article/details/6794509/ http://blog.csdn.net/haidage/article/details/6794540 http://412887952-qq-com.iteye.com/blog/2307244 http://blog.csdn.net/xiaoyu411502/article/details/48295973

    转载请注明原文地址: https://ju.6miu.com/read-2659.html

    最新回复(0)