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);

 

posted @ 2021-01-28 19:41  PC君  阅读(3184)  评论(0编辑  收藏  举报