log4j的使用 与 父接口 slf4j 门面模式(外观模式)

log4j的使用

添加日志记录的目的在于:
【1】监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作
【2】跟踪代码运行时轨迹,作为日后审计的依据
【3】担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息


Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j ,我们可以控制日志信息输送的目的地是控制台、文件、 GUI 组件、甚至是套接口服务器、 NT 的事件记录器、 UNIX Syslog 守护进程等
另外还有一个log4j2的日志框架
log4j一般都是采用log4j.properties来配置的(键值对),也可以用xml配置

log4j是apache实现的一个开源日志组件。(Wrapped implementations)
logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架。是slf4j的原生实现。(Native implementations)

1、slf4j提供各种抽象接口,日志应该基于slf4j的API进行日志打印,这样无论迁移到那个项目,只需要配一个实现类log4j or logback,都能正常打印日志
2、slf4j的实现类不能有多个,不然冲突
3、如果项目中有直接引用log4j的,可以加入log4j-over-slf4j,把旧的日志log4j适配到slf4j,这时候,再使用logback就可以了。


不可直接使用日志系统(log4j,logback)中的api,而应依赖使用日志框架slf4j中的api,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。


Logger 变量为啥使用 static 和 final 修饰
最重要的就是性能好。这就是static和final的好处咯。

private Logger log = LoggerFactory.getLogger(this.getClass());

--
private static final Logger log = LoggerFactory.getLogger(this.getClass());
log.error("识别结果为空 ");

----
aop日志中也是采用这个
private Logger logger = LoggerFactory.getLogger(ArchivesLogAspect.class);

就像前面介绍的几种日志框架一样,每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性。

为了解决这个问题,就是在日志框架和应用程序之间架设一个沟通的桥梁,对于应用程序来说,无论底层的日志框架如何变,都不需要有任何感知。只要门面服务做的足够好,随意换另外一个日志框架,应用程序不需要修改任意一行代码,就可以直接上线。


错误的
private final Logger logger = Logger.getLogger(getClass());
public Logger log=Logger.getLogger(SaveCrmsInfo.class);
private final Logger logger = Logger.getLogger(getClass());

原文地址:https://www.cnblogs.com/smallwangmusk/p/11333700.html