• slf4j 与log4j 日志管理


    log4j简易入门

    复制代码
    package test.log4j;

    import org.apache.log4j.Logger;

    publicclass HelloLog4j {
    privatestaticfinal Logger logger = Logger.getLogger(HelloLog4j.class);
    publicstaticvoid main(String[] args) {
    logger.debug(
    "This is debug message");
    logger.info(
    "This is info message");
    logger.warn(
    "This is warn message");
    logger.error(
    "This is error message");
    }
    }
    复制代码

    log4j简单配置log4j.properties

    复制代码
    #可以设置级别:debug < info < warn < error
    #debug: 显示debug, info, warn, error
    #info: 显示info, warn, error
    #warn: 显示warn, error
    #error: 只显示error
    #日志的输出级别由rootLogger和普通Logger设置的最高级别决定。

    #log4j.rootLogger
    =debug,appender1
    #log4j.rootLogger
    =info,appender1
    log4j.rootLogger
    =warn,appender1
    #log4j.rootLogger
    =error,appender1

    #输出到控制台
    log4j.appender.appender1
    =org.apache.log4j.ConsoleAppender
    #样式为TTCCLayout
    log4j.appender.appender1.layout
    =org.apache.log4j.TTCCLayout

    #这里配置的是类所在的包test.log4j, 逗号之前未配置日志输出级别,默认为根logger的级别
    log4j.logger.test.log4j
    =, TEST
    log4j.appender.TEST
    =org.apache.log4j.ConsoleAppender
    log4j.appender.TEST.layout
    =org.apache.log4j.TTCCLayout
    复制代码

    log4j提供的Appender

    org.apache.log4j.ConsoleAppender(控制台),
    org.apache.log4j.FileAppender(文件),
    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
    org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

    log4j提供的Layout

    org.apache.log4j.HTMLLayout(以HTML表格形式布局),
    org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
    org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
    org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
    复制代码
    Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: 
      %m 输出代码中指定的消息
      
    %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
      
    %r 输出自应用启动到输出该log信息耗费的毫秒数
      
    %c 输出所属的类目,通常就是所在类的全名
      
    %t 输出产生该日志事件的线程名
      
    %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
      
    %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 221028921
      
    %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
    复制代码

    以上资料参考:http://www.iteye.com/topic/378077

    slf4j简介

    SLF4J不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。

    实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统

    slf4j简单示例

    复制代码
    package test.slf4j;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    publicclass HelloSlf4j {
    privatestaticfinal Logger logger = LoggerFactory.getLogger(HelloSlf4j.class);
    publicstaticvoid main(String[] args) {
    logger.debug(
    "This is debug message");
    logger.info(
    "This is info message");
    logger.warn(
    "This is warn message");
    logger.error(
    "This is error message");
    }
    }
    复制代码

    假设使用log4j做为底层日志工具,运行以上程序需要三个包:log4j-1.2.xx.jar、slf4j-api-x.x.x.jar、以及slf4j-log4j12-x.x.x.jar,后两个包由slf4j提供,包名中的x表示版本号。

    获得logger对象:


    java代码:
    1. private static final Logger logger = LoggerFactory.getLogger(Test.class);  
    2. 输出日志信息:  
    3. logger.debug(“debug”);  

    slf4j中的占位符—不再需要冗长的级别判断

    大家应该还记得,在log4j中,为了提高运行效率,往往在输出信息之前,还要进行级别判断,以避免无效的字符串连接操作。如下:
    if (logger.isDebugEnabled()){
    logger.debug(“debug:“+name);
    }
    slf4j巧妙的解决了这个问题:先传入带有占位符的字符串,同时把其他参数传入,在slf4j的内容部实现中,如果级别合适再去用传入的参数去替换字符串中的占位符,否则不用执行。
    logger.info("{} is {}", new String[]{“x",“y"});
  • 相关阅读:
    「CF722E Research Rover」
    「Luogu P4062 [Code+#1]Yazid 的新生舞会」
    【cf比赛记录】Codeforces Round #613 (Div. 2)
    【cf比赛记录】Educational Codeforces Round 78 (Rated for Div. 2)
    【cf补题记录】Codeforces Round #608 (Div. 2)
    【cf补题记录】Codeforces Round #607 (Div. 2)
    【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
    【cf比赛记录】Codeforces Round #605 (Div. 3)
    【Codeforces】B. Div Times Mod
    【牛客练习赛53】A-超越学姐爱字符串
  • 原文地址:https://www.cnblogs.com/tankaixiong/p/2997589.html
Copyright © 2020-2023  润新知