zoukankan      html  css  js  c++  java
  • SpringBoot中配置Logback日志输出

      因为在SpringBoot中默认使用的Logback日志系统,所以SpringBoot已经集成了相关依赖,无需多余的依赖,只需在src/main/resources文件夹下,增加logback-spring.xml这个配置文件,并根据自己需要进行配置即可。

    一、logback-spring.xml配置,如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!-- debug:为true时,将打印logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
     3 <!-- scan:为true时,配置文件如果发生改变,将会被重新加载。默认值为true。 -->
     4 <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。如:"60 seconds" -->
     5 <configuration debug="false">
     6     <!-- 定义变量,name是变量的名称,value是变量的值。定义的变量会被插入到logger上下文中。定义后,可以用“${name}”来使用变量。 -->
     7     <property name="LOG_HOME" value="log/my-task"/>
     8     <property name="FILENAME_PREFIX" value="%d{yyyyMMdd}/%d{yyyyMMdd}-task"/>
     9     <property name="NORMAL_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}: %msg%n" />
    10 
    11     <!-- 1.输出到控制台 -->
    12     <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    13         <!-- 日志文档输出格式 -->
    14         <encoder>
    15             <pattern>${NORMAL_PATTERN}</pattern>
    16         </encoder>
    17     </appender>
    18 
    19     <!-- 2.输出到文档 -->
    20     <!--
    21     <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    22         <file>${LOG_HOME}/task.log</file>
    23         <encoder>
    24             <pattern>${NORMAL_PATTERN}</pattern>
    25         </encoder>
    26     </appender>
    27     -->
    28 
    29     <!-- 3.滚动输出到文档 -->
    30     <!-- 按时间滚动输出,既负责滚动也负责触发滚动  -->
    31     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    32         <!-- 设置时会先输出到指定文件,发生滚动时才进行归档,不设置时直接保存至归档位置 -->
    33         <!--<file>${LOG_HOME}/task.log</file>-->
    34         <!-- 日志文档输出格式 -->
    35         <encoder>
    36             <pattern>${NORMAL_PATTERN}</pattern>
    37         </encoder>
    38         <!-- 日志文档的滚动策略,按日期记录 -->
    39         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    40             <fileNamePattern>${LOG_HOME}/${FILENAME_PREFIX}.log</fileNamePattern>
    41             <!-- 可选节点,控制保留的日志文档的最大数量,超出数量就删除旧文件。-->
    42             <!-- 单位根据滚动策略确定,如上为按天滚动,则这里是保留365天。注意,删除旧文件时,那些为了归档而创建的目录也会被删除。 -->
    43             <maxHistory>365</maxHistory>
    44         </rollingPolicy>
    45     </appender>
    46 
    47     <!-- 设置某一个包或者具体的某一个类的日志打印级别 -->
    48     <logger name="org.springframework" level="info"/>
    49     <logger name="com.alibaba" level="debug">
    50         <appender-ref ref="CONSOLE"/>
    51     </logger>
    52 
    53     <!-- 日志级别从高到低分为FATAL > ERROR > WARN > INFO > DEBUG > TRACE,如果设置为WARN,则低于WARN的信息都不会输出 -->
    54     <!-- 设置日志级别,如果没有设置具体的logger,均会根据root的定义 -->
    55     <root level="info">
    56         <appender-ref ref="CONSOLE"/>
    57         <appender-ref ref="FILE"/>
    58     </root>
    59 </configuration>

    上面各节点的注释已经比较详细了,再来说下几个重要的节点:

    1、appender 节点,用来指定负责写日志的组件,其class有多种可选择,但比较常用的就是下面的三种,上面均给出了使用的例子:

    (1)ch.qos.logback.core.ConsoleAppender 是将日志输出到控制台。

    (2)ch.qos.logback.core.FileAppender 是将日志记录到指定文件。

    (3)ch.qos.logback.core.RollingFileAppender 是滚动记录日志,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。

    2、选择 RollingFileAppender 滚动记录日志时,需选择滚动策略和触发策略的条件,滚动策略有2种:

    (1)TimeBasedRollingPolicy 根据时间滚动,自带了触发策略的条件是按时间。

    (2)FixedWindowRollingPolicy 根据窗口大小滚动(即按设置的编号范围归档日志),配合触发策略的条件,按文件大小。例子如下:

     1    <!-- 在指定编号范围内,按日志文件大小滚动输出 -->
     2     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
     3         <!-- 设置时会先输出到指定文件,发生滚动时才进行归档,不设置时直接保存至归档位置 -->
     4         <file>${LOG_HOME}/task.log</file>
     5         <!-- 日志文档输出格式 -->
     6         <encoder>
     7             <pattern>${NORMAL_PATTERN}</pattern>
     8         </encoder>
     9         <!-- 日志文档的滚动策略,按编号范围 -->
    10         <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
    11             <fileNamePattern>${LOG_HOME}/task-%i.log</fileNamePattern>
    12             <minIndex>1</minIndex>
    13             <maxIndex>5</maxIndex>
    14         </rollingPolicy>
    15         <!-- 滚动策略的触发条件 -->
    16         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    17             <maxFileSize>100MB</maxFileSize>
    18         </triggeringPolicy>
    19     </appender>

    3、pattern 节点,是对输出日志进行格式化,常用格式化参数,如下:

    转换符

    作用

    %c{length}

    %lo{length}

    %logger{length}

    输出日志的logger名。最右边的logger名称始终显示,即使长度超过了设置值。

    长度为0只显示最右边的logger名称,长度不够时,每段最少显示1个字符,不会被省略。

    如logger名称为com.my.task.blog.TestTask,对应参数效果如下:

    转换符

    结果
    %logger com.my.task.blog.TestTask
    %logger{0} TestTask
    %logger{5} c.m.t.b.TestTask
    %logger{18} c.m.t.b.TestTask
    %logger{19} c.m.t.blog.TestTask

    %d{pattern}

    %date{pattern}

    输出日志的打印时间,格式化语法与java.text.SimpleDateFormat兼容。

    转换符

    结果
    %d 2021-01-12 18:26:00,004
    %date 2021-01-12 18:26:00,004
    %date{HH:mm:ss.SSS} 18:26:00.004
    %date{yyyy-MM-dd HH:mm:ss.SSS} 2021-01-12 18:26:00.004

    %m

    %msg

    %message

    输出应用程序提供的具体信息。

    %n

    输出换行符。

    %p

    %le

    %level

    输出日志级别。如:ERROR、WARN、INFO、DEBUG等等。

    %t

    %thread

    输出产生日志的线程名。
    修饰符

    作用

    -

    减号,可选参数,位于“%”和转换符之间,表示左对齐。

    可在减号后加数字,代表最小宽度,小于宽度右侧补空格,大于宽度不截断。

    如:%-5level,表示输出日志等级,且左对齐,不足5位,右侧补空格。

    .

    点号,可选参数,位于“%”和转换符之间,后面加数字,表示最大宽度。

    大于最大宽度,则从左侧截断。点符号“.”后面加减号“-”再加数字,表示从右侧截断。

     

    二、使用方法

    1、只需在类中引入logger对象。

    1     private static final Logger LOGGER = LoggerFactory.getLogger(TestLog.class);

    2、然后就可以直接调用了。

    1     public static void main(String[] args) {
    2         LOGGER.error("ERROR");
    3         LOGGER.warn("WARN");
    4         LOGGER.info("INFO");
    5         LOGGER.debug("DEBUG");
    6         LOGGER.trace("TRACE");
    7     }

    PS:使用error输出日志的时候,如果希望打印堆栈信息,要使用如下方式,带上exception参数,不然只会输出定义的错误原因。

    1     LOGGER.error("ERROR", e);
  • 相关阅读:
    Mifare系列3-卡的能源和数据传递(转)
    Mifare系列2-非接触卡标准(转)
    Mifare系列1-简介(转)
    oot 空间不足解决方法
    C语言位操作(转)
    C语言面试题(三)
    C语言运算符和优先级
    C语言面试题(二)
    C语言面试题(一)
    Ubuntu+Win7双系统grub的修复问题
  • 原文地址:https://www.cnblogs.com/pcheng/p/14340167.html
Copyright © 2011-2022 走看看