一、概述
1、采用dev(开发环境)、test(测试环境)、pre release(预发布、准生产环境)、production(生产环境)等不同的日志配置,根据系统变量、环境变量等自动识别。
2、特殊的记录,需要大批量写入日志文件,应该采用异步线程写文件。
二、日志输出(Appender)分类
分为5个基础类:
FILE_EXCEPTION (异常日志,包括ERROR和WARN)
FILE_APP (应用日志,包括当前应用package下面的日志和DEBUG级别以上的其他日志)
FILE_INFO (普通信息日志)
FILE_DEBUG (调试日志)
FILE_TRACE(追踪日志)
SYSOUT(控制台输出,可以包括以上所有日志)
扩展类: 包括异步输出的日志,或者特殊业务日志。
举例说明 (FILE_EXCEPTION、FILE_APP、FILE_INFO 等的区别):
假如 当前应用的 Main Package 为 cn.zollty.demo
ROOT_LEVEL为 trace,应用日志 LEVEL 为 debug
有以下日志打印:
|
那么,异常日志(FILE_EXCEPTION)输出的为:
loggerA.warn("--------");
loggerA.error("--------");
loggerB.warn("--------");
loggerB.error("--------");
控制台(SYSOUT)输出的为;
loggerA.debug("--------");
loggerA.info("--------");
loggerA.warn("--------");
loggerA.error("--------");
loggerB.trace("--------");
loggerB.debug("--------");
loggerB.info("--------");
loggerB.warn("--------");
loggerB.error("--------");
应用日志(FILE_APP)输出的为:
loggerA.debug("--------");
loggerA.info("--------");
loggerA.warn("--------");
loggerA.error("--------");
loggerB.info("--------");
loggerB.warn("--------");
loggerB.error("--------");
三、日志归档和保存期限
1、定期对日志文件进行归档、压缩 。
2、保存期限越久越好,但是本机保存的日志最大总容量(当前日志文件+归档压缩后的日志文件 size总和)规定如下:
-
异常日志(error和warn)最多保存 10G(生产、准生产环境至少要保存30天)
-
app日志最多保存 10G(生产、准生产环境至少要保存7天)
-
trace日志最多保存 1G(仅供开发、测试用,生产环境一般不用)
-
debug、info日志最多保存 5G(一般不用,用app日志就够了)
-
其他独立的输出日志视具体需求而定,但原则上最多保存 10G
对于超过本地保存容量的日志,根据业务需求决定是否删除或者迁移到其他地方保存。
四、各环境默认日志定义
开发环境
1)默认日志级别定义为:
app包为TRACE级别。日志的ROOT Level为DEBUG级别。
2)启用 System.out 控制台输出日志;
3)启用error.log为错误和警告日志、app.log为应用日志(包括app包下的日志和其他INFO级别以上的日志)。
测试环境
1)默认日志级别定义为:
app包为DEBUG级别。日志的ROOT Level为DEBUG级别。
2)禁用 System.out 控制台输出日志;
3)启用error.log为错误和警告日志、app.log为应用日志(包括app包下的日志和其他INFO级别以上的日志)。
生产环境
1)默认日志级别定义为:
app包为DEBUG级别。日志的ROOT Level为INFO级别。
2)禁用 System.out 控制台输出日志;
3)启用error.log为错误和警告日志、app.log为应用日志(包括app包下的日志和其他INFO级别以上的日志)。
四、根据环境自动选择日志配置
关键点1:使用logback的环境变量定义和读取功能
例如下面的各种环境变量定义:
|
其中 ${deploy.env:-dev} 代表的意思是,如果环境变量中没有 deploy.env,则使用默认值dev。
一个小技巧:可以自定义类似下面这个类,在logback初始化之前,先设置变量的值:
|
这个类继承自ch.qos.logback.core.status.OnConsoleStatusListener。
关键点2:使用logback的 if-then 条件语法
|
参考配置:
logback.xml:
|
includedConfig.xml
|
special_log_level.xml
|
也可以把变量定义到properties文件中,本地就放在
src/resources/conf/logback_val.properties
服务器上放在
${catalina.base}/conf/logback_val.properties
配置如下:
|
logback_val.properties:
|
同理,可以根据 dev开发环境、test测试环境、prod生产环境来读取不同的配置。
|
参考资料: