首页  

java日志打印建议     所属分类 java 浏览量 1247
使用 slf4j (Simple Logging Facade for Java ) 接口, 不要依赖具体日志实现 , log4j  logback jul 等

推荐slf4j + logback 组合

使用正确的日志级别 ,生产环境建议使用info级别 ,预估日志量 ,打印太多的日志,影响性能 且淹没关键日志


打印之前先判断日志级别 
if(logger.isDebugEnabled()){
    logger.debug("java logging level is DEBUG Enabled")
}

正确配置日志格式  关键信息 和 性能  , 某些选项很耗性能
 logback pattern 配置 

日志分类 

日志上下文信息,方便排查问题

一般情况应该保留堆栈

使用参数化 ,避免字符串拼接

logger.debug("my name is " + name); 
logger.debug("my name is {}", name);
logger.debug("my name is [{}]", name);

不要记录敏感信息, 密码,身份证号,信用卡号或账号等脱敏处理

访问量大的场景(譬如tps 成千上万的接口 )精简日志,避免影响性能 , 后台管理系统,可以多打一些日志,方便排查问题

日志框架不需要太强调性能, 打印大量的日志,本身就是一个错误

避免使用 System.out.println

避免使用 e.printStackTrace()

只打有用的信息 ,对排查定位问题没有帮助的日志不要打


推荐方式

Logger log = LoggerFactory.getLogger(Slf4jDemo.class);
		try{		
			biz code here ...
		}catch(XXXException e){
			log.error("xxxBizError,contextInfo=[{}]","contextInfo...",e);
		}	
		
日志分类
参数化 中括号只是为了区分参数和其他日志内容
上下文信息
异常堆栈信息 
注意 Logger  LoggerFactory 包名    org.slf4j.Logger   org.slf4j.LoggerFactory


避免重复打印日志 , log4j.xml 中设置 additivity=false

<logger name="com.dyyx.xxx" additivity="false">



日志打印禁止用JSON工具将对象转换成String,推荐实现 toString() 方法

建议使用简短的英文描述作为前缀,方便分类统计,问题排查,日志采集分析



 java异常处理12条建议 



日志打印实例 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Slf4jDemo { private static final Logger log = LoggerFactory.getLogger(Slf4jDemo.class); public static void main(String[] args) throws Exception { try{ String str = "a"; Integer.parseInt(str); }catch(NumberFormatException e){ log.error(e.getMessage(),e); } try{ String str = "a"; Integer.parseInt(str); }catch(Throwable e){ log.error(e.getMessage(),e); } try{ String str = "a"; Integer.parseInt(str); }catch(Throwable e){ log.error("parseInt error",e); } try{ String str = "a"; Integer.parseInt(str); }catch(Throwable e){ log.error("parseInt error"); } String str = "a"; try{ Integer.parseInt(str); }catch(Throwable e){ log.error("parseInt error,str="+str); } str = "a"; try{ Integer.parseInt(str); }catch(Throwable e){ log.error("parseInt error,str=[{}]",str); } str = "a"; try{ Integer.parseInt(str); }catch(Throwable e){ log.error("parseInt error,str=[{}]",str,e); } str = "a"; try{ Integer.parseInt(str); }catch(Throwable e){ log.error("parseInt error,str=[{}]",str,"xxx",e); } } }

上一篇     下一篇
三体精句摘录

硬盘读写特性

linux configure --prefix 参数的作用

groovy与java的一些区别

groovy简介

groovy与mvel比较