log使用说明
1 Log级别定义
log4j是apache基金会的一个项目,日志记录器(Logger)是日志处理的核心组件,log4j具有7种级别(Level).
log4j2不打印日志DEBUG Level: 指出细粒度信息事件对调试应用程序是非常有帮助的,就是输出debug的信息.
INFO level: 表明消息在粗粒度级别上突出强调应用程序的运行过程,就是输出提示信息.
WARN level: 表明会出现潜在错误的情形,就是显示警告信息.
ERROR level: 指出虽然发生错误事件,但仍然不影响系统的继续运行.就是显示错误信息.
FATAL level: 指出每个严重的错误事件将会导致应用程序的退出.
ALL level: 是最低等级的,用于打开所有日志记录.
OFF level: 是最高等级的,用于关闭所有日志记录.
INFO level: 表明消息在粗粒度级别上突出强调应用程序的运行过程,就是输出提示信息.
WARN level: 表明会出现潜在错误的情形,就是显示警告信息.
ERROR level: 指出虽然发生错误事件,但仍然不影响系统的继续运行.就是显示错误信息.
FATAL level: 指出每个严重的错误事件将会导致应用程序的退出.
ALL level: 是最低等级的,用于打开所有日志记录.
OFF level: 是最高等级的,用于关闭所有日志记录.
log4j建议只使用五个级别,级别顺序(由低到高):
DEBUG < INFO < WARN < ERROR < FATAL
windows下控制台效率比较差,输出的多了,非常影响服务器性能.
调试程序用debug或更低的优先级,这样开发的时候可以尽量输出,方便调试.
正式部署之后,可以提高日志的级别,只输出关键信息.
调试程序用debug或更低的优先级,这样开发的时候可以尽量输出,方便调试.
正式部署之后,可以提高日志的级别,只输出关键信息.
2 log编码要求
1. 方法编码的开始,要打印输入参数的log,如下面的示例:
private static List<String> getKeysBetween(LocalDate beginDate,LocalDate endDate)
{
LOGGER.debug("in getKeysBetween,begin date: {}",StrUtil.date2SimpleStr(beginDate));
LOGGER.debug("in getKeysBetween,end date: {}",StrUtil.date2SimpleStr(endDate));
2. 方法返回之前,要打印返回结果的log,如下面的示例:
……
LOGGER.debug("in calcute,dbKeys: {},tbKeys: {}",dbKeys,getKeysBetween(begin,end));
return new PartitionKeys(dbKeys,getKeysBetween(begin,end));
……
3. 捕捉的exception,一律以下面的示例形式打印出来:
try {
list = f.get();
} catch (Exception e) { LOGGER.error(e.getMessage(),e);
}
4. info级别的log通常用来打印某些服务的起停状态等,如下所示:
public void onApplicationEvent(ApplicationEvent evt) {
if(evt instanceof ContextRefreshedEvent)
{
LOGGER.info("Spring容器正在启动中,开始配置启动参数...");
//初始化配置
getPartitionProps(((ContextRefreshedEvent) evt).getApplicationContext());
//初始化cache
TbSearchResultCountCache.getTbResultCountMap("test");
LOGGER.info("启动参数配置完成...");
}
5. 中间结果日志,在任何开发觉得需要打印日志的地方打印,如下所示:
Map<String,Long> eachTbResultCounts = getFromEachTbResultCounts(cacheKey);
String key = ""+dbKeys.get(j)+tbKeys.get(i);
LOGGER.debug("in search action,key:{},EACH_TB_RESULT_COUNT has the key: {}",key,eachTbResultCounts.containsKey(key));
int prevTotalRowNum = totalRowNum;
if(eachTbResultCounts.containsKey(key) && resultPort != null)
{
long currResultCount = eachTbResultCounts.get(key);
LOGGER.debug("in search action,in EACH_TB_RESULT_COUNT,the current result count: {}",currResultCount);
totalRowNum = totalRowNum+(int)currResultCount;
LOGGER.debug("in search action,the total row num: {}",totalRowNum);
LOGGER.debug("in search action,not need to search this table: {}",totalRowNum < resultPort.getFirstRowPort());
if(totalRowNum < resultPort.getFirstRowPort()) continue;
}
6. 禁止使用System.out.println作为日志输出。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论