slf4j、log4j 的使用

àì夳堔傛蜴生んèń 2022-08-21 05:46 300阅读 0赞

驱动和桥接

log4j是一个日志系统。
slf4j是一个日志系统的封装,对外提供统一的API
使用slf4j需要下载
slf4j-api-x.x.x.jar 它提供对外一致的API接口,其本身不提供日志实现。
假设我们选择log4j作为我们的日志实现,需要下载
log4j-x.x.x.jar
如果想把slf4j绑定log4j,则需要下载slf4j对log4j的相应”驱动”。
slf4j-log4j12-x.x.x.jar
这样就可以使用slf4j提供的API,用log4j实现打日志了。
所谓驱动,就是实现了slf4j的一些接口,用你喜欢的日志系统打日志。
slf4j还支持好多日志系统,并提供了相应的“驱动”包

例如:
slf4j-jdk14-x.x.x.jar是为java.util.logging提供的驱动
slf4j-simple-x.x.x.jar直接绑定System.err
lf4j-jcl-x.x.x.jar是为commons-logging提供的驱动
logback-classic-x.x.x.jar是为logback提供的驱动

如果你引入了一个第三方jar包或者你之前的工程使用了commons-logging打日志。你想换成slf4j,你不需要更改代码,你需要使用桥接,你可以引入jcl-over-slf4j.jar,同时去掉commons-logging.jar包,这样之前打的日志会自动切换到你的slf4j中来了。同样还有log4j-over-slf4j.jar and jul-to-slf4j.jar等用于使用其它日志系统的应用自动切换到slf4j统一打日志。

logger,Appender

Logger:日志对象,用来写日志的对象,每个Logger都会有一个名字,除了root Logger。root Logger是log4j始终存在的一个Logger.
root Logger只能用Logger.getRootLogger()来获取,其它Logger可以用名字来得到Logger.getLogger(name);
每个Logger都可以设置它的输出日志的最低LEVEL和Appender。
LEVEL有 TRACE,DEBUG,INFO,WARN,ERROR FATAL几种。
Appender可以理解为日志的一个输出方式。每个Logger可以有多个Appender。
Logger之间根据名字,对输出日志的最低LEVEL和Appender有继承关系。

rootLogger<<Logger(“DEBUG”)
rootLogger<<Logger(“INTERFACE”)
rootLogger<<Logger(“com.zhaoyanblog”)<<Logger(“com.zhaoyanblog.xml”)

对于LEVEL的继承: 如果一个Logger没有设置最低LEVEL,它会继承它的直接父Logger的最低LEVEL。
对于Appender的继承:一个Logger除了配置给它的Appender之外,它会继承它所有父Logger的Appender,除非它的Additivity属性设为false。

log4j的配置方式。

log4j的配置方式有两种:

第一种:properties键值对的 方式
log4j默认配置文件为classpath下的log4j.properties








  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
  1. #设置等级和Appender。
    log4j.rootLogger=debug,appender1,apppender2
    log4j.logger.com.huawei=error,apppender2
     
    #定义appender和它的属性
     
    #控制台输出的appender
    log4j.appender. appender1= org.apache.log4j.ConsoleAppender
    log4j.appender. appender1.layout=org.apache.log4j.PatternLayout
    log4j.appender. appender1.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
     
    #文件输出的appender
    log4j.appender. appender2=org.apache.log4j.RollingFileAppender
    log4j.appender.apppender2.File=example.log
    log4j.appender.appender2.MaxFileSize=100KB
    log4j.appenderappender2.MaxBackupIndex=1
    log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
    log4j.appender.appender2.layout.ConversionPattern=%p %t %c - %m%n
    #输出日志的格式和信息都是可配可选的。
     
    #设置Logger是否继承父logger的appender
    log4j. Additivity.com.zhaoyan=false

第二种:XML方式








  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
  1. <root>
     
    <priority value =“debug”/>
    <appender-ref ref= appender1/>
    <appender-ref ref= appender2/>
     
    </root>
    <logger name=“com.runway.bssp.activeXdemo”  additivity=“false”>
    <priority value =“info”/>
    <appender-ref ref= appender3 />
    </logger>
     
    <appender name= appender2>
    <param name=“File” value= example.log />
    <param name=“MaxBackupIndex” value=“1” />
    <layout>
    <param name=“ConversionPattern” value=“%p (%c:%L)- %m%n />
    </layout>
    </appender>

注:
log4j一些默认的appender

org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)

代码中打印日志








  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  1. import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
     
    public class TestLog
    {
    static Logger logger = LoggerFactory.getLogger(TestLog.class.getName());
    public static void main(String[] args)
    {
    logger.error(“日志内容”); //还有好多API
    }
    }

发表评论

表情:
评论列表 (有 0 条评论,300人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SLF4J使用

    SLF4J Simple Logging Facade for Java 日志门面,日志系统的Facade 开发的时候 日志记录方法的调用 不应该,来直接调

    相关 SLF4j使用

    如何在系统中使用SLF4j 以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;给系统里面导入slf4j的jar和logbac