java中常用的日志系统有:jcl(JakartaCommonsLogging)jul(java.util.logging)log4j1.xlog4j2.xlogback和slf4j是一个统一的日志接口,可以使用通过不同的jar包可以在不改动代码的情况下实现不同的日志系统。具体demo见java-log-demos1。直接使用日志系统1.1JCL/Jakartacommons-loggingcommons-logging日志系统。这其实是一个日志接口,底层使用log4j或者JDKLogging实现。如果你只依赖commons-logging.jar,你会使用JUL(java.util.logging)作为实现,效果是日志中有很多中文。如果添加了log4j1.x相关依赖log4j:log4j:1.2.17,日志实现将使用log4j1.x。1.2JUL/java.util.logging这是JDK自带的日志系统,其特点是输出信息是中文的。应用程序直接使用JDK自带的日志系统来写日志。1.3log4j1.x应用程序直接使用log4j.jar写日志。只需添加log4j:log4j:1.2.17依赖项。配置文件是log4j.properties。具体见log4j.properties配置详解1.4log4j2.x应用直接使用log4j2.x对应的jar包写入日志。只需添加org.apache.logging.log4j:log4j-core:2.12.1依赖项。1.5logbacklogback肯定会依赖slf4j的接口,所以在使用logback的时候,必须使用slf4j-api.jar的接口。只需添加ch.qos.logback:logback-classic:1.2.3即可导入所有依赖的jar包。2、使用slf4j(slf4j-api.jar)适配日志系统2.1只使用slf4j-api,此时没有日志系统的具体实现,所以会报错2.2使用slf4j-nop作为实现slf4j-api的slf4j-nop不会输出任何日志只是为了让slf4j-api.jar不再报错。2.3使用slf4j-simple作为slf4j-api的实现使用slf4j-simple作为日志的实现类。只需添加org.slf4j:slf4j-simple:1.7.30即可导入所有依赖的jar包2.4使用jcl(commons-logging)及其实现作为slf4j-api的实现commons-logging也是一个接口API,所以也需要具体的日志系统实现2.5使用JDK自带的日志系统(JUL)作为slf4j-api的实现这里的适配层是slf4j-jdk14.jar,使用java.util.logging作为日志系统的实现只需要依赖org.slf4j:slf4j-log4j12:1.7.30,引入所有依赖即可。2.6使用log4j1.x作为slf4j-api的实现注意这里有一个适配层(adapterlayer),它的jar围绕着红色部分slf4j-log4j12.jar。适配层将slf4j-api接口的操作转换为log4j1.x的日志操作。只需要依赖org.slf4j:slf4j-log4j12:1.7.30,导入所有依赖即可2.7使用log4j2.x作为slf4j-api的实现这里的适配层是log4j-slf4j-impl.jar。只依赖org.apache.logging.log4j:log4j-slf4j-impl:2.12.1即可引入所有依赖。2.8使用logback作为slf4j-api的实现,和1.3的logback完全一样。默认情况下,logback使用slf4j-api作为它的接口。应用系统在使用logback时,会直接通过slf4j-api接口进行操作。3、将已有的日志系统通过slf4j-bridge转换为其他日志系统。在使用原来的日志系统时,如果想在不修改代码的情况下换成另一个日志系统,就需要使用bridge。图中橙色的是桥梁。原理是通过桥将一个日志系统转换为slf4j,再转换为其他日志系统。使用bridge时,一般需要删除原来的日志系统jar包,bridge会和原来的jar包有相同的接口,所以应用代码不需要修改。使用网桥时注意红色虚线连接的网桥对应的jar包和适配层对应的jar包不能同时存在,否则会出现栈溢出错误。Influxjcl-over-slf4j.jar不能与slf4j-jcl.jar共存。对于每个类别下的依赖,灰色字体部分不需要显示和导入,只需要导入黑色字体依赖即可导入所有jar包。注意logback必须使用slf4j-api实现,所以没必要通过bridge替换成其他日志系统,只需要删除logback-classic.jar和logback-core.jar,再引入其他实现即可。这与本节内容无关,不再赘述。3.1将jcl日志系统替换为其他日志系统。应用直接使用jcl日志系统的接口。如果想换成其他日志系统,使用jcl-over-slf4j.jar将jcl转slf4j。注意图中jcltobridge是虚线,表示不需要删除jcl相关的jar包。根据你要转换成的日志系统,使用不同的适配层来实现。例如,如果要转换为log4j2.x,则需要使用log4j-slf4j-impl.jar将slf4j连接到log4j2.x。然后添加log4j2.x实现类log4j-api.jar和log4j-core.jar,在不修改应用代码的情况下完成日志系统的替换。注意红色虚线,jcl-over-slf4j.jar和slf4j-jcl.jar不能同时存在,否则会报错。3.2其他日志系统的替换原理与jcl类似,这里不再赘述。
