<?xml version="1.0" encoding="UTF-8"?>
<!-- 说明: 1、日志级别及文件 日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中 例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而log_error_xxx.log为归档日志,
日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、1、2...顺序分别命名 例如log-level-2013-12-21.0.log
其它级别的日志也是如此。 2、文件路径 若开发、测试用,在Eclipse中运行项目,则到Eclipse的安装路径查找logs文件夹,以相对路径../logs。
若部署到Tomcat下,则在Tomcat下的logs文件中 3、Appender FILEERROR对应error级别,文件名以log-error-xxx.log形式命名
FILEWARN对应warn级别,文件名以log-warn-xxx.log形式命名 FILEINFO对应info级别,文件名以log-info-xxx.log形式命名
FILEDEBUG对应debug级别,文件名以log-debug-xxx.log形式命名 stdout将日志信息输出到控制上,为方便开发测试使用 -->
<configuration>
<!--ip解析-->
<conversionRule conversionWord="ip" converterClass="cn.zx.webapp.configuration.IpConvert"/>
<!-- magenta:洋红 -->
<!-- boldMagenta:粗红-->
<!-- cyan:青色 -->
<!--︻$════>-->
<!--︻⊱═════>-->
<property name="CONSOLE_LOG_PATTERN"
value="%boldMagenta([%d{yyyy-MM-dd HH:mm:ss.SSS}]) %green([%ip]) %cyan([%X{requestId}]) %boldMagenta(%-5level) %blue(%logger{15}) %red([%thread]) %magenta(︻⊱═════>) %cyan(%msg%n)"/>
<!--引入默认的一些设置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--写入日志到控制台的appender,以java -jar xx.jar 启动会乱码 需要去掉 charset-->
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!--<charset>UTF-8</charset><!– 此处设置字符集 –>-->
</encoder>
</appender>
<!-- 日志文件的存储地址 -->
<property name="LOG_HOME"
value="${LOG_PATH:-.}" />
<!--写入INFO日志到文件的appender -->
<appender name="INFO_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高, 所以我们使用下面的策略,可以避免输出
Error 的日志 -->
<!-- 此日志文档只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level> <!--设置拦截的对象为INFO级别日志 -->
<onMatch>ACCEPT</onMatch> <!-- 当遇到了info级别时,启用改段配置. -->
<onMismatch>DENY</onMismatch> <!-- 没有遇到info级别日志时,屏蔽改段配置 -->
</filter>
<File>${LOG_HOME}/zx-info.log</File>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_HOME}/zx-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志文档保留天数 -->
<maxHistory>10</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 注意 logback 的括号需要转义 -->
<encoder charset="UTF-8"
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
%logger{10} %method\(\) - %m%n
</pattern>
<charset>UTF-8</charset><!-- 此处设置字符集 -->
</encoder>
</appender>
<!--写入DEBUG日志到文件的appender -->
<appender name="DEBUG_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 此日志文档只记录DEBUG级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<File>${LOG_HOME}/zx-debug.log</File>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_HOME}/zx-debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志文档保留天数 -->
<maxHistory>10</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 注意 logback 的括号需要转义 -->
<encoder charset="UTF-8"
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
%logger{10} %method\(\) - %m%n
</pattern>
<charset>UTF-8</charset><!-- 此处设置字符集 -->
</encoder>
</appender>
<!--写入ERROR日志到文件的appender -->
<appender name="ERROR_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 此日志文档只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<File>${LOG_HOME}/zx-error.log</File>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_HOME}/zx-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志文档保留天数 -->
<maxHistory>10</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 注意 logback 的括号需要转义 -->
<encoder charset="UTF-8"
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
%logger{10} %method\(\) - %m%n
</pattern>
<charset>UTF-8</charset><!-- 此处设置字符集 -->
</encoder>
</appender>
<!--写入WARN日志到文件的appender -->
<appender name="WARN_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 此日志文档只记录WARN级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<File>${LOG_HOME}/zx-warn.log</File>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_HOME}/zx-warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志文档保留天数 -->
<maxHistory>10</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 注意 logback 的括号需要转义 -->
<encoder charset="UTF-8"
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
%logger{10} %method\(\) - %m%n
</pattern>
<charset>UTF-8</charset><!-- 此处设置字符集 -->
</encoder>
</appender>
<!--生产环境:打印控制台和输出到文件 -->
<springProfile name="pro">
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
<!--开发环境:打印控制台 -->
<springProfile name="dev">
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="ERROR_FILE"/>
<appender-ref ref="WARN_FILE"/>
</root>
</springProfile>
<!--测试环境:打印控制台 -->
<springProfile name="test">
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
<appender-ref ref="WARN_FILE"/>
</root>
</springProfile>
</configuration>
logback-spring.xml文件;
<!-- 日志文件的存储地址 -->
<property name="LOG_HOME" value="${LOG_PATH:-.}" /> 获取在yml中配置的路径;例如:
logging:
path: /home/logs/xxx/log/ 不写磁盘默认在本项目下.
RollingFileAppender: file(String) 指定日志文件的位置滚动策略
RollingPolicy:
TimeBasedRollingPolicy 是目前最受欢迎的一种滚动方式,可以设置按天、按月的滚动。它同时实现了 RollingPolicy 和TriggeringPolicy 接口。它可以配置这些属性:
-
fileNamePattern (String) 比如:/var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log ,这里最重要的是 %d{},用它来格式化一个时间日期,作为一个文件名。
-
maxHistory (int) 最多保存的日志数量
%i
标记,它的使用场景是这样的,如果log文件的大小达到了maxFileSize,但是时间还没有达到滚动点,那么会创建新的log文件,并用一个递增的 %i
索引。
在RollingFileAppender还是需要设置file属性来表示当前的写入日志的文件,但是当滚动时间到了,会按照fileNamePattern定义的规则来 归档当前的日志写入文件。logback会从
fileNamePattern 中推导出滚动的间隔,上面的例子会按月创建日志目录、日志文件会在每天0点归档。