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

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>

文件输出

将日志以文件的方式输出到指定目录。

  1. 使用RollingFileAppender创建appender。
  2. 设置appender,输出内容格式,过滤器等。
  3. 在root中引用该appender
  4. 下例是输出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>

自定义日志

  1. 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>  
  1. 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>
  1. 创建一个自定义名称的日志对象。
    注意:getLogger(“”)中参数与logger的name一致。
private final static Logger mylogger = LoggerFactory.getLogger("myLog");
  1. 使用该对象输出日志。
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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-贫寒豌豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值