• SLF4J日志门面


    SLF4J官网:http://www.slf4j.org/

    SLF4J的作用通俗点讲,就是可以让我们的项目以最小的代价更换不同的日志系统。无需修改代码,只需要添加、删除相应的jar包和配置文件。

    1.添加”slf4j-api-xxx.jar”到项目中。(xxx代表版本号,本文用的是1.7.7版本)

    2.建个项目,编写几句简单的日志记录的代码。

    //import org.apache.log4j.PropertyConfigurator;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class test_slf4j {
    
    	public static void main(String[] args) {
    		// PropertyConfigurator.configure("log4j.properties");
    		Logger logger = LoggerFactory.getLogger(test_slf4j.class);
    		logger.trace("I'm trace log.");
    		logger.debug("I'm debug log.");
    		logger.info("I'm info log.");
    		logger.warn("I'm warn log.");
    		logger.error("I'm error log.");
    	}
    }

    3.下载的SLF4J压缩包里自带了很多的日志系统,体验一下几个常用的。

    【Simple】

    先来用一下简单日志,添加”slf4j-simple-xxx.jar”到项目中。

    image

    然后直接运行上面的代码,控制台输出结果:

    [main] INFO test_slf4j - I'm info log.
    [main] WARN test_slf4j - I'm warn log.
    [main] ERROR test_slf4j - I'm error log.

    貌似因为没有自定义配置文件,默认配置把trace和debug级别的日志给过滤了。

    【JDK】

    再来试试jdk自带的日志系统,删除”slf4j-simple-xxx.jar”,添加”slf4j-jdk14-xxx.jar”到项目中。
    注意:项目中不能有多个日志系统,否则SLF4J因为不知道用哪个会报错。

    image

    然后直接运行上面的代码,控制台输出结果:

    八月 30, 2014 12:44:12 下午 test_slf4j main
    信息: I'm info log.
    八月 30, 2014 12:44:13 下午 test_slf4j main
    警告: I'm warn log.
    八月 30, 2014 12:44:13 下午 test_slf4j main
    严重: I'm error log.

    结果和简单日志差不多,除了日志格式不同,多了日志记录时间,也是被过滤了trace和debug级别的日志。

    【Log4j】

    上面的日志内容实在是过于简单,对我们实际开发可以说是作用甚微。日志文件当然是越详细越好,尤其是在修复BUG时,能够准确的定位到哪一行代码是极好的。
    来试一下大家常用的Log4j,删除其他日志系统的jar包,添加”slf4j-log4j12-xxx.jar”,还需添加一个Log4j1.2版本的jar包,去Log4j的官网上下载一个。现在Log4j1已经停止更新,Log4j2说是比1提升非常多。我一开始用SLF4J + Log4j2,但是一直不成功。网上的资料也不多,等回头有时间研究一下再写一篇SLF4J + Log4j2的文章,这里我用的是SLF4J-1.7.7 + Log4j-1.2.17。

    添加了需要的jar包,还需添加Log4j的配置文件”log4j.properties”。

    image

    我配置的log4j.properties具有三种Logger。
    Console:控制台输出DEBUG级别以上的日志。
    LogFile:文本记录INFO级别以上的日志,文件最大不超过2MB。
    ErrorFile:文件记录ERROR级别以上的日志,以日期格式命名文件,如“error.log.2014-08-01”、“error.log.2014-08-02”。

    # Set log levels #
    log4j.rootLogger = DEBUG, Console, LogFile, ErrorFile
    
    # Output the log info to the Java Console #
    log4j.appender.Console = org.apache.log4j.ConsoleAppender
    log4j.appender.Console.Target = System.out
    log4j.appender.Console.Threshold = DEBUG
    log4j.appender.Console.layout = org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern = <%-d{yyyy-MM-dd HH:mm:ss}> <%t> %l %n<%p> %m%n%n
    
    # Save the log info to the log file #
    log4j.appender.LogFile = org.apache.log4j.RollingFileAppender
    log4j.appender.LogFile.File = logs/log.log
    log4j.appender.LogFile.Append = true
    log4j.appender.LogFile.MaxFileSize = 2MB
    log4j.appender.LogFile.MaxBackupIndex = 100
    log4j.appender.LogFile.Threshold = INFO
    log4j.appender.LogFile.layout = org.apache.log4j.PatternLayout
    log4j.appender.LogFile.layout.ConversionPattern = <%-d{yyyy-MM-dd HH:mm:ss}> <%t> %l %n<%p> %m%n%n
    
    # Save the error info to the error file. A file one day. #
    log4j.appender.ErrorFile = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.ErrorFile.File = logs/error.log
    log4j.appender.ErrorFile.Append = true
    log4j.appender.ErrorFile.Threshold = ERROR
    log4j.appender.ErrorFile.layout = org.apache.log4j.PatternLayout
    log4j.appender.ErrorFile.layout.ConversionPattern = <%-d{yyyy-MM-dd HH:mm:ss}> <%t> %l %n<%p> %m%n%n

    在src根目录下创建“log4j.properties”,Log4j在启动时会默认寻找这个配置文件。如果你将配置文件放在其他地方,可以用上面注释掉的代码先加载指定的配置文件,支持绝对路径和相对路径。
    还是直接运行上面的代码,控制台输出结果:

    <2014-08-30 13:17:03> <main> test_slf4j.main(test_slf4j.java:17) 
    <DEBUG> I'm debug log.
    
    <2014-08-30 13:17:03> <main> test_slf4j.main(test_slf4j.java:18) 
    <INFO> I'm info log.
    
    <2014-08-30 13:17:03> <main> test_slf4j.main(test_slf4j.java:19) 
    <WARN> I'm warn log.
    
    <2014-08-30 13:17:03> <main> test_slf4j.main(test_slf4j.java:20) 
    <ERROR> I'm error log.

    我配置的log4j.rootLogger = DEBUG,所以trace没有被输出。去查看两个日志文件,也成功记录了相应的日志。

    image

  • 相关阅读:
    request的getServletPath(),getContextPath(),getRequestURI(),getRealPath("/")区别
    Google Guava
    Mybatis分页插件-PageHelper
    Mybatis通用Mapper
    IntelliJ Idea 常用快捷键
    @JProfiler
    sparkStreaming消费kafka-0.8方式:direct方式(存储offset到zookeeper)
    kafka其中一台节点坏掉的迁移或者数据迁移
    sparkStreaming序列化问题
    【CSS】最全的CSS浏览器兼容问题
  • 原文地址:https://www.cnblogs.com/zhujiawei7/p/3946381.html
Copyright © 2020-2023  润新知