1.不要用System.out.println()
打的日志只会显示在控制台,不会进入日志文件,而且这个方法内部是用了synchronized的,是同步的
2.不要使用 e.printStackTrace()
其源码:
public void printStackTrace() {
printStackTrace(System.err);
}
也是打在控制台的
3.输出异常信息,不要用以下几种方式 ,它们都不会打印堆栈异常信息:
log.error(“错误信息:”, e.getMessage());
log.error(“错误信息:” + e);
log.error(e.getMessage());
log.error(e.getStackTrace().toString());
只有使用log.error("错误信息:", e.getMessage());
即使用方法public void error(String msg, Throwable t);
才能打印详细的堆栈异常信息
4.禁止在线上环境开启debug,很多框架中有大量debug代码,记录这些没太大意义
5.日志规范,多用占位符,不要用+来拼字符串
@Test
public void print() {
log.info(“包裹号:{}开始收货”,“O2338484”);
log.info(String.format(“包裹号:%s开始收货”,“O2338484”));
log.info(String.format(“一共有包裹号%d个包裹”,5));
}
打印结果:
包裹号:O2338484开始收货
包裹号:O2338484开始收货
一共有包裹号5个包裹
现在系统常用日志框架的是:Slf4J +log4j2(两者关联需要使用log4j-slf4j-impl桥接包)
log4j
是一个用Java编写的可靠,快速和灵活的日志框架(API),是一个日志解决文案
Log4j中有三个主要组成部分:
loggers
: 负责捕获记录信息。
appenders
: 负责发布日志信息,以不同的首选目的地。
layouts
: 负责格式化不同风格的日志信息。
SLF4J 全称 Simple Logging Facade for Java
(简单日志门面
),本身不提供日志具体实现,只对外提供接口或门面。
因此它不是具体的日志解决方案,而是通过Facade Pattern门面模式
对外提供一些Java Logging API。
这些对外提供的核心API其实就是一些接口
以及一个LoggerFactory的工厂类
JAVA日志体系:
日志的进化:https://www.jianshu.com/p/39ced06944a2
log4j2配置文件log4j2.xml详解(转载):
https://www.cnblogs.com/new-life/p/9246143.html
想要更新详细的配置文件:http://www.mamicode.com/info-detail-2109359.html