logback日志的配置与使用
背景
日志级别有(从高到低):
FATAL
(致命),
ERROR
(错误),
WARN
(警告),
INFO
(信息),
DEBUG
(调试),
TRACE
(跟踪)或者
OFF
(关闭),默认的日志配置在消息写入时将消息回显到控制台。默认情况下,将记录错误级别、警告级别和信息级别的消息
官网
最终效果图
- %d 时间
- %le 隔离级别
- %t 当前线程名
- %lo 类名
- %m 日志信息
最终配置
application.properties
logging.config=classpath:logback-spring.xml
logging.level.root=info
logging.level.web=info
logging.level.sql=debug
logging.level.xxx=debug
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
logback日志配置
-->
<configuration debug="false">
<!--获取spring上下文配置-->
<springProperty scope="context" name="SERVER_NAME" source="server.servlet.application-display-name"/>
<springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root"/>
<!--定义日志文件的存储地址及日志级别 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${sys:catalina.base:-.}/output/logs"/>
<!-- pattern -->
<property name="CONSOLE_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5le) [%11(%.11t)] %cyan(%-50(%lo{50})) - %m%n"/>
<property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5le [%15(%.15t)] %-60(%lo{60}) - %m%n"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${CONSOLE_PATTERN}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 INFO-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<!--给定日志文件大小,超过指定的大小就新建一个日志文件-->
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${FILE_PATTERN}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 ERROR -->
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch> <!-- 如果没有命中就使用这条规则 -->
<onMismatch>DENY</onMismatch> <!-- 如果命中就禁止这条日志 -->
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/dev/${SERVER_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<!--给定日志文件大小,超过指定的大小就新建一个日志文件-->
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${FILE_PATTERN}</pattern>
</encoder>
</appender>
<!-- 多环境配置 按照active profile选择分支 -->
<springProfile name="dev">
<!--root节点 全局日志级别,用来指定最基础的日志输出级别-->
<root level="${LOG_ROOT_LEVEL}">
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
<springProfile name="test|prod">
<!--root节点 全局日志级别,用来指定最基础的日志输出级别-->
<root level="${LOG_ROOT_LEVEL}">
<appender-ref ref="FILE"/>
<appender-ref ref="FILE_ERROR"/>
</root>
</springProfile>
</configuration>
注意:SpringBoot推荐我们使用带-spring后缀的 logback-spring.xml 扩展配置,因为默认的的logback.xml标准配置,Spring无法完全控制日志初始化。(spring扩展对springProfile节点的支持)
配置console输出日志
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- pattern -->
<property name="CONSOLE_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5le) [%11(%.11t)] %cyan(%-50(%lo{50})) - %m%n"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${CONSOLE_PATTERN}</pattern>
</encoder>
</appender>
</configuration>
配置file输出日志
<?xml version="1.0" encoding="UTF-8"?>
<!--
logback日志配置
-->
<configuration debug="false">
<!--定义日志文件的存储地址及日志级别 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${sys:catalina.base:-.}/output/logs"/>
<!-- pattern -->
<property name="CONSOLE_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5le) [%11(%.11t)] %cyan(%-50(%lo{50})) - %m%n"/>
<!-- 按照每天生成日志文件 INFO-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<!--给定日志文件大小,超过指定的大小就新建一个日志文件-->
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${FILE_PATTERN}</pattern>
</encoder>
</appender>
<!--root节点 全局日志级别,用来指定最基础的日志输出级别-->
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
根节点 <configuration>
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<!--其他配置省略...-->
</configuration/>
-
san
: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true! -
scanPeriod
: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟! -
debug
: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false!
节点<appender>
<property name="LOG_HOME" value="${sys:catalina.base:-.}/output/logs"/>
- spring中配置property使用一致
节点<springProperty>
<springProperty scope="context" name="SERVER_NAME" source="server.servlet.application-display-name"/>
- 获取spring上线文中的配置,注意:xml的名称必须-spring结尾 例如:logback-spring.xml
节点<appender>
- 负责写日志的组件,它有两个必要属性name和class。
- name指定appender名称
-
class指定appender的全限定名
- ConsoleAppender(输出到控制台)
- RollingFileAppender(输出到文件)
- SMTPAppender(输出到邮件)
- DBAppender(输出到数据库)
- AsyncAppender(异步输出)
- XxxAppender (不单独使用)
ConsoleAppender
<property name="CONSOLE_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5le) [%11(%.11t)] %cyan(%-50(%lo{50})) - %m%n"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${CONSOLE_PATTERN}</pattern>
</encoder>
</appender>
- <encoder>: 对日志进行格式化
RollingFileAppender
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<!--给定日志文件大小,超过指定的大小就新建一个日志文件-->
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${FILE_PATTERN}</pattern>
</encoder>
</appender>
- <FileNamePattern>:日志文件输出的文件名
- <MaxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>是6,则只保存最近6天的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。
- <maxFileSize>:这是活动文件的大小,默认值是10MB。
pattern日志格式
定义每行日志记录的格式,官网地址:https://logback.qos.ch/manual/layouts.html ,
常用变量别名(包括全称和简称)有:
变量名
%logger(简写:%c或%lo): 当前日志名称,如: Slf4jAndLogbackMain
%class(简写:%C): 日志调用所在类,如: com.dragon.study.log.Slf4jAndLogbackMain
%method(简写:%M): 日志所在方法,如: main
%caller: 日志调用位置,如:at com.dragon.study.log.Slf4jAndLogbackMain.main(Slf4jAndLogbackMain.java:15)
%thread(简写:%t): 日志调用所有线程序,如:main
%level(简写:%p或%le): 日志级别,如:INFO
%date(简写:%d): 日期,如: 2018-12-15 21:40:12,890
%msg(简写:%m): 日志记录内容
%exception(简写:%ex): 异常记录
宽度设置
%20logger:当字符数少于20个字符时,则左侧留空白;
%-20logger:当字符数少于20个字符时,则右侧留空白;
%.30logger:当字符数据大于30个时,则截断;
显示设置
%highligth:突出显示
%green(%red、%blue、%white):字体显示为指定颜色
{length}可指定长度,如%logger{36}
网络访问设置(依赖logger-access包)
%remoteIP(简写:%a):远程ip;
%localIP(简写:%A):本地ip;
%clientHost(简写:%h):远程主机名;
%localPort:本地端口;
%requestMethod(简写:%m):http请求方法;
%protocol(简写:%H):http请求协议;
%statusCode(简写:%s):http请求status code;
%requestURL(简写:%r):http请求地址;
%requestURI(简写:%U):http请求资源地址;
%queryString(简写:%q):http请求参数;
%server(简写:%v):服务器地址;
%elapsedTime(简写:%D):http请求处理的时间,单位是毫秒;
%elapsedSeconds(简写:%T):http请求处理的时间,单位是秒;
%date(简写:%t):日志记录时间;
%threadName(简写:%I):处理请求的线程名;
%reqAttribute{attributeName}:http请求attribute值;
%reqCookie{cookie}:http请求cookie值;
%reqContent:http请求体内容;
%fullRequest:http完整请求;
%responseContent:http响应;
%fullResponse:http完整响应;
版权声明:本文为hjj19930729原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。