日志文件,是只配一次的,一般不是新项目 都不会去做这个配置。但是,需要配置的时候,没经验的,可能到处百度了。
这里简单记录 日志文件配置的 基本配置
现在 spring-boot 比较流行,就以 spring-boot 的 logback-spring.xml 为例:
文件名:
日志配置的 文件名 对于日志来说,是首先要考虑的,基于通用性,一般日志配置的文件名都是固定的,像 spring-boot 就直接用 logback-spring.xml,放在 resources文件夹下,不用再做其他的指定。
xml:
xml文件 用下面的 标签包住
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
</configuration>
有时,需要 取属性配置文件中的 属性 来做 动态的 变量设置,可以用下面这个标签:
<!-- theName: 在 日志配置文件中 引用的名字,使用时: ${theName} -->
<!-- propertyname: 在 属性配置文件中 配置的属性名字-->
<springProperty scope="context" name="theName" source="propertyname" ></springProperty>
appender
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${FILE_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<-- 输出到日志文件 -->
<!-- logName 是名字 -->
<!-- class 是具体的Appender-->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 当前 appender 记录的日志级别过滤器-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 日志级别,只能写 一种 -->
<level>ERROR</level>
<!-- onMatch 和 onMismatch 表示 要输出的日志级别 匹配指定日志级别时 的行为-->
<!-- ACCEPT ,输出; DENY 不输出-->
<!-- 匹配则输出:<onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch>-->
<!-- 不匹配则输出:<onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch>-->
<!-- 匹配则输出的,只输出一种级别;不匹配则输出的,可以输出多种级别-->
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 日志文件名 -->
<file>${log.path}/error.log</file>
<!-- 日志输出的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_PATTERN}</pattern>
<ImmediateFlush>false</ImmediateFlush>
<charset>UTF-8</charset>
</encoder>
<!-- 滚动式生成日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- 日志保留的最大天数,这个需要根据实际来设置,
可能日志输出的多,日志会很占磁盘 -->
<MaxHistory>2</MaxHistory>
</rollingPolicy>
</appender>
<!-- 生成日志文件, 匹配所有的日志级别 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/logback.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_PATTERN}</pattern>
<ImmediateFlush>false</ImmediateFlush>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${log.path}/logback-%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>2</MaxHistory>
</rollingPolicy>
</appender>
<!--
上面的三种类别,一般可以满足需求,只需要指定 几个变量:
log.path : 日志路径
FILE_PATTERN: 日志输出格式
-->
<!-- log.path : 日志路径
1. 可以 直接写死
2. 可以动态获取:
比如,可以实现一个 接口: ch.qos.logback.core.spi.PropertyDefiner
-->
<!-- LogPathProperty 实现了 PropertyDefiner 接口 -->
<define name="log.path" class="xxx.LogPathProperty"/>
<!-- FILE_PATTERN: 日志输出格式 -->
<property name="FILE_PATTERN"
value="[%date{yyyy-MM-dd HH:mm:ss.SSS}] ${LOG_LEVEL_PATTERN:-%p} ${PID:- } [%traceId] [%t] [%logger{10}] : %m%n"/>
<!-- 打印 INFO 及以上的 级别 -->
<root level="INFO" >
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
<appender-ref ref="console"/>
</root>
通过以上几个点的配置,一个日志文件配置就OK了,当然需要引入必要的日志jar
日志文件配置 还有其他的 配置项,需要的话 再自己研究吧。