Spring Boot 初级入门教程(七) —— 日志分类备份
2018年07月25日 16:00:39 SpringBoot ⁄ 共 8225字 暂无评论 ⁄ 被围观 1,921次

在上一篇《Spring Boot 初级入门教程(二) —— 日志备份》中,只是简单说明了下日志的备份方法,并没有做更多的配置说明,这篇主要说一下如何分类备份不同的日志。

一、修改日志配置文件的文件名。

上篇中,创建的日志文件名为 logback.xml,开始配置前,想把文件名修改一下,修成成 logback-spring.xml,效果和原来一样,并不影响日志的保存。

那为什么要修改文件名了?官网上有这么一段说明:

When possible, we recommend that you use the -spring variants for your logging configuration (for example, logback-spring.xml rather than logback.xml). If you use standard configuration locations, Spring cannot completely control log initialization.

大概意思是:如果可能,我们建议您使用 -spring 变体进行日志记录配置(例如,logback-spring.xml 而不是 logback.xml)。 如果使用标准配置位置,Spring无法完全控制日志初始化。

Because the standard logback.xml configuration file is loaded too early, you cannot use extensions in it. You need to either use logback-spring.xml or define a logging.config property.

大概意思是:由于标准 logback.xml 配置文件加载过早,因此无法在其中使用扩展。您需要使用 logback-spring.xml 或定义 logging.config 属性。

综上,既然官网建议用带 -spring 扩展的文件名,那就直接改了再说。运行项目,测试一下,日志还是可以保存,并不影响。

二、一次修改配置文件

首先查看控制台输出和配置文件输出,发现配置文件保存的内容,并没有控制台输出多,那么首先让控制台的输出和日志保存一致。

修改后的配置文件部分为:

	<root level="info">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="baselog" />
	</root>
	<!-- <logger name="com.menglanglang.test.springboot" level="DEBUG">
		<appender-ref ref="baselog" />
	</logger> -->

再次运行,查看 base.log 内容,可以发现日志内容和控制台输出几乎一致了。当然,banner 信息和 banner 之前的信息,以及system.out 输出的内容,是不会进入日志的。

三、二次修改配置文件

目前日志输出是一份,可以发现里面有有 INFO、DEBUG、ERROR 等全部信息,新的需求是,想把日志拆分,如所有 ERROR 信息放到一个新文件,而没有其它 DEBUG 或者 INFO 信息,该如何配置。

修改后的配置文件为:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <configuration>  
  3.     <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名 -->  
  4.     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
  5.         <encoder>  
  6.             <pattern>%d %p (%file:%line\)- %m%n</pattern>  
  7.             <charset>UTF-8</charset>  
  8.         </encoder>  
  9.     </appender>  
  10.   
  11.     <!-- 日志文件输出设置 -->  
  12.     <appender name="baselog" class="ch.qos.logback.core.rolling.RollingFileAppender">  
  13.         <File>log/base.log</File>  
  14.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
  15.             <fileNamePattern>log/base.log.%d.%i</fileNamePattern>  
  16.             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
  17.                 <maxFileSize>10 MB</maxFileSize>  
  18.             </timeBasedFileNamingAndTriggeringPolicy>  
  19.         </rollingPolicy>  
  20.         <encoder>  
  21.             <pattern>%d %p (%file:%line\)- %m%n</pattern>  
  22.             <charset>UTF-8</charset>  
  23.         </encoder>  
  24.     </appender>  
  25.   
  26.     <!-- TRACE 级别日志文件输出设置 -->  
  27.     <appender name="fileTraceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">  
  28.         <File>log/trace.log</File>  
  29.         <encoder>  
  30.             <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>  
  31.             <charset>UTF-8</charset>  
  32.         </encoder>  
  33.         <!--滚动策略 -->  
  34.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
  35.             <!--路径 -->  
  36.             <fileNamePattern>log/trace.log.%d.%i</fileNamePattern>  
  37.             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
  38.                 <maxFileSize>1 MB</maxFileSize>  
  39.             </timeBasedFileNamingAndTriggeringPolicy>  
  40.             <maxHistory>3</maxHistory>  
  41.         </rollingPolicy>  
  42.     </appender>  
  43.     <!-- DEBUG 级别日志文件输出设置 -->  
  44.     <appender name="fileDebugLog" class="ch.qos.logback.core.rolling.RollingFileAppender">  
  45.         <File>log/debug.log</File>  
  46.         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
  47.             <level>DEBUG</level>  
  48.             <onMatch>ACCEPT</onMatch>  
  49.             <onMismatch>DENY</onMismatch>  
  50.         </filter>  
  51.         <encoder>  
  52.             <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>  
  53.             <charset>UTF-8</charset>  
  54.         </encoder>  
  55.         <!--滚动策略 -->  
  56.         <rollingPolicy  
  57.             class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
  58.             <!--路径 -->  
  59.             <fileNamePattern>log/debug.log.%d.%i</fileNamePattern>  
  60.             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
  61.                 <maxFileSize>1 MB</maxFileSize>  
  62.             </timeBasedFileNamingAndTriggeringPolicy>  
  63.             <maxHistory>3</maxHistory>  
  64.         </rollingPolicy>  
  65.     </appender>  
  66.     <!-- INFO 级别日志文件输出设置 -->  
  67.     <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">  
  68.         <File>log/info.log</File>  
  69.         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
  70.             <level>INFO</level>  
  71.             <onMatch>ACCEPT</onMatch>  
  72.             <onMismatch>DENY</onMismatch>  
  73.         </filter>  
  74.         <encoder>  
  75.             <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>  
  76.             <charset>UTF-8</charset>  
  77.         </encoder>  
  78.         <!--滚动策略 -->  
  79.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
  80.             <!--路径 -->  
  81.             <fileNamePattern>log/info.log.%d.%i</fileNamePattern>  
  82.             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
  83.                 <maxFileSize>1 MB</maxFileSize>  
  84.             </timeBasedFileNamingAndTriggeringPolicy>  
  85.             <maxHistory>3</maxHistory>  
  86.         </rollingPolicy>  
  87.     </appender>  
  88.     <!-- WARN 级别日志文件输出设置 -->  
  89.     <appender name="fileWarnLog" class="ch.qos.logback.core.rolling.RollingFileAppender">  
  90.         <File>log/warn.log</File>  
  91.         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
  92.             <level>WARN</level>  
  93.             <onMatch>ACCEPT</onMatch>  
  94.             <onMismatch>DENY</onMismatch>  
  95.         </filter>  
  96.         <encoder>  
  97.             <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>  
  98.             <charset>UTF-8</charset>  
  99.         </encoder>  
  100.         <!--滚动策略 -->  
  101.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
  102.             <!--路径 -->  
  103.             <fileNamePattern>log/warn.log.%d.%i</fileNamePattern>  
  104.             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
  105.                 <maxFileSize>1 MB</maxFileSize>  
  106.             </timeBasedFileNamingAndTriggeringPolicy>  
  107.             <maxHistory>3</maxHistory>  
  108.         </rollingPolicy>  
  109.     </appender>  
  110.     <!-- ERROR 级别日志文件输出设置 -->  
  111.     <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">  
  112.         <File>log/error.log</File>  
  113.         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
  114.             <level>ERROR</level>  
  115.             <onMatch>ACCEPT</onMatch>  
  116.             <onMismatch>DENY</onMismatch>  
  117.         </filter>  
  118.         <encoder>  
  119.             <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>  
  120.             <charset>UTF-8</charset>  
  121.         </encoder>  
  122.         <!--滚动策略 -->  
  123.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
  124.             <!--路径 -->  
  125.             <fileNamePattern>log/error.log.%d.%i</fileNamePattern>  
  126.             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
  127.                 <maxFileSize>1 MB</maxFileSize>  
  128.             </timeBasedFileNamingAndTriggeringPolicy>  
  129.             <maxHistory>3</maxHistory>  
  130.         </rollingPolicy>  
  131.     </appender>  
  132.   
  133.     <root level="TRACE">  
  134.         <appender-ref ref="fileTraceLog" />  
  135.         <appender-ref ref="fileDebugLog" />  
  136.         <appender-ref ref="fileInfoLog" />  
  137.         <appender-ref ref="fileWarnLog" />  
  138.         <appender-ref ref="fileErrorLog" />  
  139.         <appender-ref ref="baselog" />  
  140.         <appender-ref ref="STDOUT" />  
  141.     </root>  
  142.     <!-- 自定义指定类的日志输出 -->  
  143.     <!-- <logger name="com.menglanglang.test.springboot" level="DEBUG"> <appender-ref   
  144.         ref="baselog" /> </logger> -->  
  145. </configuration>  

运行程序后,可以看到 log 目录下已经按照不同的级别输出日志了。

除了在 root 标签上设置 level 级别外,还可以在项目配置文件 application.properties 中,设置下面两个配置的任何一个,都可以设置日志级别。

# 日志显示级别
trace=true

# 设置日志级别
logging.level.root=TRACE

建议,在开发过程中,日志一般设置成 INFO 级别就足够了,如果设置成 TRACE 或者 DEBUG,日志文件将非常庞大,控制台输出太多 log 还将导致 IDE 卡死。

原文链接:https://blog.csdn.net/tzhuwb/article/details/81201243

给我留言

留言无头像?