对log4j的介绍

目录

Log4j    Java日志工具

日志用途分类:

Log4j对比System.out.println优势:

Log4j 核心

Logger配置

Appender配置

Layout配置

    常用Layout

    PatternLayout参数ConversionPattern

Log4j读取配置文件

扫描二维码关注公众号,回复: 3356760 查看本文章

日志的级别:

       为什么需要对日志进行分级?


Log4j    Java日志工具

日志用途分类:

    开发调试日志
    系统运行日志

Log4j对比System.out.println优势:

    (1)可分级别控制日志输出与开关
    (2)可按不同的类和包进行输出控制
    (3)可控制日志不同的输出位置

Log4j 核心

    (1)Logger    控制日志级别,
        完成日志信息具体输出操作
    (2)Appender    控制日志输出位置
    (3)Layout    配置日志输出格式

    常用log4j.properties进行配置

Logger配置

    (1)Logger名称(或类名)
    (2)日志级别(常用日志级别: debug info warn error)
    (3)Logger对应的Appender
        
        log4j.logger.XXX=[ level ] , appenderName, appenderName, …
        log4j.rootLogger=debug,appender1

Appender配置

    (1)Appender具体实现类
    (2)实现类相关参数 
    (3)Appender对应的Layout
    (4)Appender名称

    log4j.appender.appenderName = fully.qualified.name.of.appender.class
  log4j.appender.appenderName.option1 = value1

其中,Log4j提供的appender有以下几种:
  org.apache.log4j.ConsoleAppender(控制台),
  org.apache.log4j.FileAppender(文件),
  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
    org.apache.log4j.JdbcAppender(数据库)

Layout配置

    (1)Layout具体实现类
    (2)实现类相关参数 

    log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
  log4j.appender.appenderName.layout.option1 = value1

    常用Layout

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

    PatternLayout参数ConversionPattern

       %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)

Log4j读取配置文件

(1)默认在classpath下查找log4j.properties
    Logger.getRootLogger();
(2)PropertyConfigurator.configure
    PropertyConfigurator.configure(filePath);
    Logger.getRootLogger();


---------------------------------------------

建一个log4j.properties的配置文件,放到有main的入口类的相同路径下。

log4j.rootLogger=debug, stdout, R

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

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=YesFTP.log

log4j.appender.R.MaxFileSize=1000KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

在类中的构造函数中或者其他方法中或类的静态区初始化log4j
  PropertyConfigurator.configure(filePath);

日志的级别:

日志级别一共有五种,级别由高到低依次是:fatal、error、warn、info、debug。获得Logger实例后,我们可
 调用以下方法之一输出日志信息:
       public void debug(Object message);          //输出debug级别的日志信息;
       public void info(Object message);           //输出info级别的日志信息;
       public void warn(Object message);           //输出warn级别的日志信息;
       public void error(Object message);          //输出error级别的日志信息;
       public void fatal(Object message);          //输出fatal级别的日志信息;
       public void log(Priority p, Object message);//输出参数Priority指定级别的日志信息;

       以上方法只有当它的级别大于或等于Logger组件配置的日志级别时才调用。以前面我们配置的myLogger
       为例,它的日志级别为WARN, 那么在程序中,它的warn()、error()、fatal()方法会被执行。对于log()
       方法,只有当它的参数Priority指定的日志级别大于或等于WARN时,它才会被执行。

       为什么需要对日志进行分级?

       在写程序的时候,为了调试程序,我们会在很多出错的地方输出大量的日志信息。当程序调试完,不需要
       这些信息时,将程序中这些输出日志信息代码删除吗?这样费时费力,对于大型程序几乎不可行。通过对
       日志分级,假如不想输出WARN级别的日志信息,则Logger组件的级别调高即可,省时省心。

1)%r输出程序开始执行之后的微秒数
2)%t输出当前线程的名称
3)%-5p输出消息的层次。
4)%c 输出category的名称
5)-%m及s是日志消息本身,%n是换行符。
  当前在模式字符串中你可以嵌入任何想要输出的字符。
  模式字符串中的模式如下:
%m:消息本身
%p:消息的层次
%r:从程序开始执行到当前日志产生时的时间间隔(微秒)
%c:输出当前日志动作所在的category名称。例如:如果category名称是"a.b.c","%c{2}"将会输出"b.c". {2}意谓着输出“以点分隔开的category名称的后两个组件”,如果 {n}没有,将会输出整个category名称.
%t:输出当前线程的名称
%x:输出和当前线程相关联的NDC(具体解释见下文),尤其用到像java servlets这样的多客户多线程的应用中。
%n:输出平台相关的换行符。
%%:输出一个"%"字符
%d:输出日志产生时候的日期,当然可以对日期的格式进行定制。例如:%d{HH:mm:ss,SSSS}或者是%d{dd MMM yyyy HH:mm:ss,SSSS},如果没有指定后面的格式,将会输出ISO8601的格式。
%l:输出位置信息,相当于%C.%M(%F:%L)的组合。
%C:输出日志消息产生时所在的类名,如果类名是“test.page.Class1”%C{1}表示输出类名"Class1",%C{2}输出"page.Class1",而%C则输出"test.page.Class1"。
%M:输出日志消息产生时的方法名称
%F:输出日志消息产生时所在的文件名称
%L:输出代码中的行号

猜你喜欢

转载自blog.csdn.net/elice_/article/details/82843405