java日志打印建议
所属分类 java
浏览量 1412
使用 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
日志打印禁止用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比较