Java开发中常见日志管理的两种搭配是common-logging+log4j或log4j+slf4j,其中common-logging和slf4j 都属于日志接口,log4j是具体的实现类。
1、单独使用common-logging
可以在项目中单独使用common-logging,就apache的common-logging的这一个jar包也可以实现日志功能。而且一般common-logging如果没有找到自己对应的配置文件的话,就会一层层往下找,其中有一层是查到log4j,如果找到log4j就使用log4j的配置,如果没有log4j的话,则最后会System.err输出日志内容。结合具体的代码图片来说明可能会更清晰,如下图(只引进了一个common-logging的jar包,即使有一个配置文件log4j.properties,但是因为没有引进log4j的jar包,这样common-logging动态查找log4j配置文件的时候,就找不到,最后只能System.err输出)
2、使用common-logging+log4j
采用两者结合有两种实现方式,分别是Logger.getLogger()和LogFactory.getLog()
1.LogFactory.getLog()则来自apache的common-logging包(如下图,因为引进了log4j,所以ccommon-logging的动态查找会找到文件配置,会按这个配置输入日志内容到指定的文件位置)
2.Logger.getLogger()是使用log4j的方式记录日志(如下图)
这里需要注意一个问题,就是log4j的默认配置文件名是log4j.properties,如果把配置文件名改回的话,除非在使用的时候引入文件配置,不然是无法使用的,会System.err输出Please initialize the log4j system properly,比如我将log4j.properties改为log4j2.properties后再跑一次(如下图),
如果想引入指定的配置文件,可以直接在使用log4j自带的 PropertyConfigurator.configure("配置文件路径")如下图引入加载了log4j2.properties,则一样按照该文件内的配置输出了日志内容到指定文件。
3、log4j+slf4j组合
这两者的组合是需要三个jar包的,分别是slf4j-api和slf4j-log4j、log4j。
实现方式也有两种的,LoggerFactory.getLogger()和Logger.getLogger(),推荐使用方式LoggerFactory.getLogger()前者。
LoggerFactory.getLogger()是slf4j的,他相对于log4j的Logger.getLogger(),优势在于有占位符{}替换,避免字符拼接消耗性能。