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);
本文来自博客园,作者:PC君,转载请注明原文链接:https://www.cnblogs.com/pcheng/p/14340167.html