美文网首页
spring boot 配置logback日志

spring boot 配置logback日志

作者: 东本三月 | 来源:发表于2019-03-30 18:21 被阅读0次

    1.需求/目的

    • 日志的标准化输出
    • 日志文件的自动创建与拆分

    2.使用环境

    • spring boot 2.0.3
    • logback 1.2.3(默认)

    3.maven 引入logback

    • 引用spring-boot-starter即可使用logback
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter</artifactId>
               <version>${org.springframework.boot.version}</version>
           </dependency>
    

    spring-boot-starter包含了spring-boot-starter-logging的引用


    spring-boot-starter-logging

    spring-boot-starter-logging包含了logback的引用


    ch.qos.logback

    4.在配置文件进行设置

    #设置日志使用的配置文件
    logging.config=classpath:logback-spring.xml
    
    #日志的输出文件夹,该值在logback-spring.xml文件中进行使用
    logback.logdir=G:\\pringboot_log
    
    #设置日志输出的文件,可以是相当路径或绝对路径,相对路径则在在项目的当前路径下生成一个xxx.log文件
    #logging.file=debug.log
    
    #设置日志输出的目录,如果logging.file和logging.path同时使用,以logging.file为准
    #logging.path=G:\\springboot_log
    
    ##对日志的内容进行格式化
    #logging.pattern.console="%d - %msg%n"
    
    #设置日志输出的级别,logging.level.包名或类名=级别;  TRACE < DEBUG < INFO < WARN < ERROR < FATAL
    #logging.level.com.authstr=INFO
    

    通过配置文件的设置,无法满足使用需求.
    需要通过logback-spring.xml文件进行设置,文件放到resources目录下
    "logback-spring"是spring boot 默认会读取的日志配置文件名称之一,不定义logging.config也可以正常使用

    5.通过xml文件配置日志

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- scan:配置文件改变时,是否重新加载,默认true; scanPeriod:检测配置文件改变的间隔; debug:是否打印出logback内部日志信息,默认false  -->
    <Configuration scan="true" scanPeriod="60 seconds" debug="false" >
    
        <!-- 设置上下文名称,默认名称"default" , 一般用于区分不同应用程序的日志,该设置不可动态修改,可以通过%contextName打印-->
        <!--<contextName>default</contextName>-->
    
        <!-- 设置变量,通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量-->
        <!--<property name="logback.logdir" value="G:\springboot_log"/>
        <property name="logback.appname" value="sd-basic"/>-->
    
        <!-- 从配置文件中获取并重新定义变量,name:新的变量名; source:变量值的来源 -->
        <springProperty scope="context" name="logback.appname" source="server.servlet.context-path"/>
        <springProperty scope="context" name="logback.logdir" source="logback.logdir"/>
    
        <!-- 用来格式化日志输出节点,class用来指定哪种输出策略-->
        <!--输出到控制台 ConsoleAppender-->
        <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
            <!--layout为控制层输出,文件输出用encoder-->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>
                    <!-- 定义输出格式 -->
                    <!--%d{HH: mm:ss.SSS}——日志输出时间
                    %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
                    %-5level——日志级别,并且使用5个字符靠左对齐
                    %logger{36}——日志输出者的名字
                    %msg——日志消息
                    %n——平台的换行符-->
                    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${logback.appname} [%thread] [%-5level] [%logger{36}] > > >  %msg %n</pattern>
                </pattern>
            </layout>
    
            <!-- 拦截器,ERROR以下的日志不输出 -->
            <!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                 <level>ERROR</level>
            </filter>-->
        </appender>
    
    
        <!-- 输出info日志文件 -->
        <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,
            所以我们使用下面的策略,可以避免输出 Error 的日志-->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!--过滤 Error-->
                <level>ERROR</level>
                <!--匹配到就禁止-->
                <onMatch>DENY</onMatch>
                <!--没有匹配到就允许-->
                <onMismatch>ACCEPT</onMismatch>
            </filter>
            <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
                如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
                的日志改名为今天的日期。即,<File> 的日志都是当天的。
            -->
            <File>${logback.logdir}/${logback.appname}-info.log</File>
            <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
                <FileNamePattern>${logback.logdir}/${logback.appname}-info-%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--只保留最近90天的日志-->
                <maxHistory>90</maxHistory>
                <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
                <!--<totalSizeCap>1GB</totalSizeCap>-->
            </rollingPolicy>
            <!--日志输出编码格式化-->
            <encoder>
                <charset>UTF-8</charset>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${logback.appname} [%thread] [%-5level] [%logger{36}] > > > %msg %n</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>30MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <!-- 输出error日志文件 -->
        <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>Error</level>
            </filter>
            <File>${logback.logdir}/${logback.appname}-error.log</File>
            <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
                <FileNamePattern>${logback.logdir}/${logback.appname}-error-%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--只保留最近90天的日志-->
                <maxHistory>90</maxHistory>
                <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
                <!--<totalSizeCap>1GB</totalSizeCap>-->
            </rollingPolicy>
            <!--日志输出编码格式化-->
            <encoder>
                <charset>UTF-8</charset>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${logback.appname} [%thread] [%-5level] [%logger{36}] > > > %msg %n</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>30MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <!-- 指定一个包或类使用的打印级别与配置-->
        <!-- name:指定包或类;level:打印级别,默认继承上级配置的级别; addtivity:是否向上级loger传递打印信息。默认是true。-->
        <!--<logger name="com.example.demo.controller" level="ERROR" additivity="false">
            <appender-ref ref="consoleLog"/>
        </logger>-->
    
        <!-- 修改hibernate的日志打印 -->
        <!-- 打印sql语句 -->
        <logger name="org.hibernate.SQL" level="DEBUG"/>
        <!-- 打印sql语句绑定的参数 -->
        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
        <!-- 打印sql语句的返回值 -->
        <!--<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="TRACE"/>-->
        <!-- 打印Hql语句 -->
        <!--<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/>-->
    
        <!-- 必选子节点,可以包含零个或多个元素 -->
        <!-- 用来指定最基础的日志输出级别,级别可选TRACE, DEBUG, INFO, WARN, ERROR, ALL , OFF,默认DEBUG, TRACE < DEBUG < INFO < WARN < ERROR < FATAL-->
        <root level="INFO">
            <!-- 将指定的appender添加到logging -->
            <appender-ref ref="consoleLog" />
            <appender-ref ref="fileInfoLog" />
            <appender-ref ref="fileErrorLog" />
        </root>
    
    
        <!-- 根据spring.profiles.active的值执行相对应的设置,用于进行多环境的日志配置 -->
        <!--<springProfile name="test,dev">-->
            <!--<logger name="com.example.demo.controller" level="DEBUG" additivity="false">-->
                <!--<appender-ref ref="consoleLog"/>-->
            <!--</logger>-->
        <!--</springProfile>-->
    
    </Configuration>
    

    6.打印日志

    声明日志对象

    protected Logger log = LoggerFactory.getLogger(this.getClass());
    

    根据需要进行打印

    //          TRACE < DEBUG < INFO < WARN < ERROR < FATAL
                this.log.info("info");
                this.log.warn("warn");
                this.log.error("error");
                this.log.debug("debug");
                this.log.trace("trace");
    

    效果


    日志打印

    相关文章

      网友评论

          本文标题:spring boot 配置logback日志

          本文链接:https://www.haomeiwen.com/subject/tojsbqtx.html