目前常用日志框架:log4j、JUI、log4j2、logback,slf4j。
JUi:Java提供的原生日志框架,不常用,一般现在都不使用。
log4J:通过配置文件可以定义日志级别,日志输出位置,为每行日志定义输出,可以是文件,接口等。
log4j2:log4j的升级版本,但是由于完全进行了改变,所以和log4j区分开来了。
logback:常用的日志框架,提供良好的日志输出格式。支持异步日志输出。
slf4j:这个其实是一个日志门面框架,具体日志输出是依赖上述4中日志。
阿里开发规范有一条:禁止使用logAPI进行日志输出,推荐使用slf4jAPI.
- 这里日志的输出就是一种门面模式,也叫外观模式。顾名思义,通过门面模式来屏蔽具体的实现,交互时不用管具体的实现,实现了解耦。
- 这也是门面模式的优势。就像去饭店吃饭,只和服务员打交道,不用管饭菜如何做出来的。
- 所以这里禁止使用日志API,使用slf4j这样就算换日志框架,也只需要修改一些配置文件即可,不用改代码就可以进行部署。
- 对比下log4j 和slf4j:
- slf4j 提供字符串替换功能,输出效率提高。log4j是一种字符串相加的操作,损失性能。
- slf4j 会自动判断debugger输出,没有开启debugger则不输出。不需要判断,log4j则需要判断,不然没有开启debugger日志输出,会产生不必要信息。
- slf4j 支持多种日志实现,可以轻松更换底层日志的输出。
-
故日志框架的搭配应该是slf4j+其他日志框架实现,开发不必关心底层日志的实现,只关注需要打印的日志。