一、简介
日志框架用来记录程序的运行信息,对于成熟的Java应用,日志是必不可少的。在开发和调试阶段,日志可以更快的定位问题;而在应用的运维过程中,日志系统可以记录大部分的异常信息,通常企业可以通过日志信息对系统运行状态进行实时监控预警。
SLF4J(The Simple Logging Facade for Java)和logback是Gülcü创立的开源日志项目,其创立主要是为了提供更高性能的实现,并支持异步logger,Filter等实用特性。
SLF4j提供简单统一的日志记录接口,使用logback实现可以无缝部署应用(与log4j区别)。
A、依赖
1.7.12
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
jcl-over-slf4j
${slf4j.version}
org.slf4j
log4j-over-slf4j
${slf4j.version}
ch.qos.logback
logback-core
1.1.2
ch.qos.logback
logback-classic
1.1.2
B、配置文件加载顺序logback.groovy
logback-test.xml
logback.xml
使用logback.configurationFile环境变量指定配置文件url
使用默认BasicConfigurator
C、appendersConsoleAppender - class="ch.qos.logback.core.ConsoleAppender"
FileAppender - class="ch.qos.logback.core.FileAppender"
RollingFileAppender - class="ch.qos.logback.core.rolling.RollingFileAppender"
D、最基本配置
[%d{HH:mm:ss.SSS}] [%logger{36} > %thread:%line] [%-5level] - %msg%n
E、基本使用
private final static Logger logger = LoggerFactory.getLogger(logbackTest.class);
logger.trace("Hello World trace");
logger.debug("Hello World debug");
logger.info - 最佳的logger 来源和相关信息。("Hello World info");
logger.warn("Hello World warn");
logger.error("Hello World error");
二、配置实例
logs/error.logs
logs/error.logs.%d{yyyy-MM-dd}.gz
true
100
[%d{HH:mm:ss.SSS}] [%logger{36} > %thread] [%-5level] - %msg%n
ERROR
UTF-8
[%d{HH:mm:ss.SSS}] [%logger{36} > %thread] [%-5level] - %msg%n
DEBUG
logs/YYMall.logs
logs/YYMall.logs.%d{yyyy-MM-dd}.gz
true
100
[%d{HH:mm:ss.SSS}] [%logger{36} > %thread] [%-5level] - %msg%n
三、关于日志
A、优秀的日志可以帮助开发、运维、测试人员解决很多问题了解线上系统的运行状态
快速准确定位线上问题
发现系统瓶颈
预警系统潜在风险
挖掘产品最大价值
B、日志记录内容请求入口和出口
外部服务调用和返回
资源消耗操作(读写文件等)
程序异常(数据库无法连接)
后台操作(定期执行删除的线程)
启动、关闭、配置加载
C、测试日志
通过日志,可以快速得知测试是否成功。测试执行的环境
测试执行前的初始状态
测试的详细步骤
测试和系统的交互信息
测试期望的返回结果
测试实际的返回结果
D、补充调用第三方服务,需记录入参和返回值记录调用时长
记录成功、失败次数
ERROR级别发生了严重的错误,必须马上处理。这种级别的错误是任何系统都无法容忍的。比如:空指针异常,数据库不可用,关键路径的用例无法继续执行
WARN还会继续执行后面的流程,但应该引起重视
INFO记录一些对于线上出问题后有帮助的信息,比如调用第三方接口的时候的传入参数和对方的返回
四、总结
A、开发阶段函数标志信息
所有的参数
关键分支选择
所有的返回值
try...catch中的异常信息以及参数信息(ERROR级别)
B、生产阶段关闭DEBUG、TRACE日志
info酌情保留,WARN和ERROR保留
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
DEBUG
class="ch.qos.logback.core.rolling.RollingFileAppender">
log/info.%d{yyyy-MM-dd}.log
${maxHistoryDay}
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
ACCEPT
DENY
INFO
class="ch.qos.logback.core.rolling.RollingFileAppender">
log/error.%d{yyyy-MM-dd}.log
${maxHistoryDay}
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
WARN
class="ch.qos.logback.core.rolling.RollingFileAppender">
log/dubbo.info.%d{yyyy-MM-dd}.log
${maxHistoryDay}
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
ACCEPT
DENY
INFO
参考: