• Java中几种日志方案


    。本文记录Java中几种常用的日志解决方案

    0x01 Log4j


    。这应该是一个比较老牌的日志方案了,配置也比较简单,步骤如下
    1)添加对应依赖,比如 Gradle 中

    dependencies {
        compile('log4j:log4j:1.2.17')
        testCompile group: 'junit', name: 'junit', version: '4.11'
    }

    2)配置一个 log4j.properties,用来指定一些信息,比如配置输出路径、格式(appender相关)等

     ### 设置###
    log4j.rootLogger = debug,stdout,D,E
    
    ### 输出信息到控制抬 ###
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
    ### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.D.File = E://logs/log.log
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = DEBUG
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
    ### 输出ERROR 级别以上的日志到=E://logs/error.log ###
    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File =E://logs/error.log
    log4j.appender.E.Append = true
    log4j.appender.E.Threshold = ERROR
    log4j.appender.E.layout = org.apache.log4j.PatternLayout
    log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

    。具体其他的配置,可以百度找找。。
    3)在需要使用的地方调用,主要是通过对应的级别,比如 info、debug、error 来输出不同的级别

    public static Logger logger = Logger.getLogger(Main.class);
    
    public static void main(String[] args) {
        logger.debug("debug msg");
        logger.info("info msg");
        logger.error("err msg");
    }

    0x02 slf4j


    。简单日志门面,slf4j 是一款通用的多日志整合方案,说白了就是提供了一套统一的接口,来统一解决不同日志系统的使用
    。因为这只是一个通用的接口,所以并不涉及具体的日志方案,所以在使用时我们需要配合一门具体的日志系统来使用
    。比如我们来进行和 log4j 的整合,我们除了需要配置好 slf4j 的依赖之外,还得配置其对于 log4j 的“驱动”
    。比如我们在 build.gradle 中进行如下配置

    compile('org.slf4j:slf4j-log4j12:1.7.13')
    compile('log4j:log4j:1.2.17')

    。这里我们只配了 slf4j 对应的 log4j 驱动,因为 Gradle 会自动解决依赖么~~
    。因为整合 log4j,配置文件同上,使用时类似,代码如下

    public static Logger logger = LoggerFactory.getLogger(Main.class);
    
    public static void main(String[] args) {
        logger.info("info msg");
        logger.debug("debug msg");
        logger.error("error msg");
    }

    。注意这里的 Logger 和 LoggerFactory 都是org.slf4j包下的,不要导错了

    0x03 logBack


    。上面介绍了比较老牌的 log4j,logBack 和 log4j 类似,是一个日志的解决方案,而且出自同一个作者
    。但是不同的是,它相对 log4j 进行了很多的改进,重写了内部实现,在某些特定的场合下速度会比 log4j 快上10倍,而且使用的内存更少
    。其他和 log4j 的比较,可以参考下面 Reference 的 [从Log4j迁移到LogBack的理由]
    。使用类似,首先,引入依赖

    compile('ch.qos.logback:logback-classic:1.1.3')

    。logBack 目前分为3个模块,logback-core,logback-classic,logback-access
    。logback-core 是其他两个模块的基础模块,logback-classic 是 log4j 的一个改良版本,而且完整实现了 slf4j api,所以可以很方便的切换成其他日志系统(如log4j)
    。logback-access 访问模块与 Servlet 容器集成提供了通过 HTTP 来访问日志的功能
    。然后是添加配置文件(logBack会默认查找配置文件 logback.xml 或者 logback-test.xml,如果没有找到,会将日志打印到终端中),这里和 log4j 有一点不同的是,logBack 使用 XML 或者 Groovy 来进行配置,可见这几年 Groovy 在 DSL 方面的发展
    。实际是调用 slf4j 的通用接口来产生 Logger 对象
    。这里需要提的一点是,LogBack 可以和 Tomcat 或者 Jetty 进行配合使用,使两个容器可以进行更好的日志输出

    public static Logger logger = LoggerFactory.getLogger(Main.class);
    
    public static void main(String[] args) {
        logger.info("info msg");
        logger.debug("debug msg");
        logger.error("error msg");
    }
  • 相关阅读:
    手把手搭建一个k8s集群(附搭建脚本)
    SAP 创建package ERROR TO128
    (转载)Tips on using log4net RollingFileAppender by Rohit Gupta
    (Asp.Net)转载用Powershell 建立IIS web site
    代码随想录:哈希表
    代码随想录:二叉树的属性
    知易行难
    代码随想录:二叉树知识清单
    openssl + windows + vs2019 源码编译
    代码随想录:栈与队列
  • 原文地址:https://www.cnblogs.com/SummerinShire/p/5441548.html
Copyright © 2020-2023  润新知