log4j的简单使用

在开发任何的程序或者做自动化,日志都是不可缺少的部分。最近看了下Apache的开源项目log4j。觉得它已经能够完全满足日常工作的需要了。

实例

  1. 这里采用的maven的方式,所以首先在pom.xml中配置好log的jar包

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
  2. 在src下创建log4j.properties(我们采用读取properties的方式)

    log4j.rootLogger = INFO,dev,stdout
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Threshold=INFO
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c : %m%n
    
    
    
    ### INFO 级别以上的日志到./logs/run.log
    
    log4j.appender.dev=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.dev.Append=true
    log4j.appender.dev.DatePattern='.'yyyy-MM-dd
    log4j.appender.dev.File=logs/run.log
    log4j.appender.dev.Threshold=INFO
    log4j.appender.dev.layout=org.apache.log4j.PatternLayout
    log4j.appender.dev.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c : %m%n
    log4j.additivity.dev=false
    
    
    
    ### INFO 级别以上的日志到./logs/appium.log
    
    log4j.logger.appium = INFO,appium
    log4j.appender.appium=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.appium.Append=true
    log4j.appender.appium.DatePattern='.'yyyy-MM-dd
    log4j.appender.appium.File=logs/appium.log
    log4j.appender.appium.Threshold=INFO
    log4j.appender.appium.layout=org.apache.log4j.PatternLayout
    log4j.appender.appium.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c : %m%n
    log4j.additivity.appium=false
  3. 编写代码

    private static Logger logger = Logger.getLogger("dev");
    
    public static void main(String[] args)  {
        PropertyConfigurator.configure(new File("./src/log4j.properties").getAbsolutePath());
        logger.info("this is a info ");
        logger.debug("this is a debug ");
        logger.warn("this is a warn");
        logger.error("this is a error");
    }
  4. 运行结果:
    在控制台以及log目录下的run.log中都显示如下信息

    这里写图片描述

log4j简单使用

讲log4j首先我们得看的懂log4j.properties配置文件
上边的配置文件实际上并不难 我们来简单分析下吧。

log4j.rootLogger = INFO,dev,stdout

这里我们配置了根root 有两个输出目的地 一个是dev,一个stdout。并且Level等级是INFO.即level在INFO的信息才会显示在log中,这也就是为什么我们看到的log里面实际上是没有debug的log信息的。这里首先要说下log4j中Level分别有:

  • off 最高等级,用于关闭所有日志记录。
  • fatal 指出每个严重的错误事件将会导致应用程序的退出。
  • error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
  • warn 表明会出现潜在的错误情形。
  • info 一般和在粗粒度级别上,强调应用程序的运行全程。
  • debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
  • all 最低等级,用于打开所有日志记录。

配置好了输出目的地,我们当然要对各个输出目的地进行配置了

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

首先是配置stdou的输出方式:

Log4j提供的appender有以下几种:

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

常用的还是每天产生日志文件的方式

log4j.appender.stdout.Threshold=INFO

过滤器 只有大于INFO的才会输出 这个常常会配置着rootLogger一起使用

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

Log4j提供的输出方式由如下几种:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

目前常用的还是PatternLayout的方式

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c : %m%n

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日 22:10:28,921
  • %l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

讲完这些其实还是有疑问,就是下面的appium的log作用在哪,实际并没有看到它的任何输出呢。这里就要结合代码来讲多个logger的问题了。

代码实现log4j

  1. 获取到log记录器

    //获取日志记录器,这个记录器将负责控制日志信息
    private static Logger logger = Logger.getLogger("dev");
  2. 读取配置文件

    //读取log4j.properties的配置信息
    PropertyConfigurator.configure(new File("./src/log4j.properties").getAbsolutePath());
  3. 输出log信息

    logger.info("this is a info ");
    logger.debug("this is a debug ");
    logger.warn("this is a warn");
    logger.error("this is a error");

其实讲完上面的代码实际上就应该明白。如何将上面的getLogger的参数改成appium后,log就会输出到appium.log文件下,并且也不会有控制台的内容输出了。

参考文档

最详细的Log4j使用教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值