欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

log4j学习

程序员文章站 2022-05-23 20:32:13
...

log4j学习

目录:

1、log4j核心组件:

2、log4j.properties文件:

3、conversionPattern中模式转换字符及含义:

4、格式修饰符及含义:

5、FileAppender的配置:

6、日志记录到多个文件:

7、配置文件示例:

8、JAVA代码示例:


1、log4j核心组件:

 log4j学习

图1.1 log4j核心组件

(1)Support Objects:支持对象

框架和支持体系的核心对象,其中可选的对象执行不同的重要任务。

A)Level Object:级别对象。

定义记录信息的粒度和优先级。包括八个级别:

l TRACE:指定细粒度比DEBUG更低的信息记录;

l DEBUG:指定细粒度信息事件是应用程序调试信息记录记录;

l INFO:指定能够突出在粗粒度级别的应用程序运行情况信息记录;

l ERROR:错误事件可能仍然允许应用程序继续运行;

l WARN:指定具有潜在危害的情况;

l FATAL:指定非常严重的错误事件,这可能导致应用程序中止;

l ALL:各级包括自定义级别;

l OFF:关闭日志记录。

规则:级别p使用级别q,在记录日志的请求时,如果p >= q 启用。

对于标准级别的关系:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

例如存在如下语句:

①logger.debug("This is the debug message");

②logger.info ("This is the info message");

③logger.trace("This is the trace message");

④logger.error("This is the error message");

⑤logger.fatal("This is the fatal message");

⑥logger.warn("This is the warn message");

若设置了logger.setLevel(Level.DEBUG),则This is the trace message则不输出;

若设置了logger.setLevel(Level.ERROR),则This is the debug message、This is the info message、This is the trace message、This is the warn message都不输出;

若在程序代码中设置了logger.setLevel(Level.INFO),而在log4j.properties配置文件中设置了log4j.rootLogger=ERROR, file,则以程序代码中设置的INFO级别为基准。

B)LogManager:日志管理器。

负责从一个系统级的配置文件或配置类读取初始配置参数。

C)Filter Object:过滤对象

分析日志信息及是否应该记录信息做出进一步决定。一个Appender Object可以有好几个与之关联的Filter Object。如果日志记录信息传递到特定Appender Object,都和特定的Appender相关的Filter Object批准的日志信息,然后才能发布到所连接的目的地。

D)Object Renderer:对象渲染器

一个指定提供传递到日志框架的不同对象的字符串表示。这个对象所使用的Layout Object来准备最后的日志信息。

(2)Core Objects:核心对象

框架的强制对象,决定框架的使用。

A)Appender Object:附加器对象

负责输出日志信息到不同的地方,如数据库,文件,控制台,Unix系统日志等。
常用的类如下:

l org.apache.log4j.ConsoleAppender:控制台

l org.apache.log4j.FileAppender:文件

l org.apache.log4j.DailyRollingFileAppender:每天产生一个日志文件

l org.apache.log4j.RollingFileAppender:文件大小到达指定尺寸的时候产生一个新的文件

l org.apache.log4j.WriterAppender:将日志信息以流格式发送到任意指定的地方

配置模式:

l log4j.appender.appenderName = className

l log4j.appender.appenderName.Option1 = value1

l log4j.appender.appenderName.Option2 = value2

l log4j.appender.appenderName.OptionN = valueN

每个Appender对象有与之相关联的不同的属性,这些属性表明对象的行为:

l layout:Appender使用Layout Object和与之相关的格式化的日志记录信息转换模式来记录日志;

l target:目标可以是一个控制台,一个文件,或根据附加器的另一个项目

l level :级别是必需的,以控制日志消息的过滤

l threshold:Appender可以有与之独立的记录器级别相关联的级别阈值水平。Appender忽略具有级别低于阈级别的任何日志消息

l filter :Filter对象可以分析超出级别的匹配记录信息,并决定是否记录的请求应该由一个特定 Appender 或忽略处理

B)Layout Object:布局对象

格式化不同风格的日志信息的对象。布局层提供支持Appender Object到发布日志的信息之前。

Apache log4j提供了各种布局对象,每一个对象都可以根据各种布局格式记录数据。布局对象检索来自Logging Event的消息参数,并使用适当的Object Renderer获得消息的字符串表示。

*抽象类Layout的子类包括:

l DateLayout

l HTMLLayout

l PatternLayout

l SimpleLayout

l XMLLayout

配置模式:

l log4j.appender.appenderName.layout =className

l log4j.appender.appenderName.layout.Option1 = value1

l log4j.appender.appenderName.layout.Option1 = value2

l log4j.appender.appenderName.layout.OptionN = valueN

C)Logger Object:记录器对象

*层的Logger,它提供Logger对象。Logger对象负责捕获日志信息及它们存储在一个空间的层次结构。

例如:private static Logger logger = Logger.getLogger(Test1.class.getName());

 

2、log4j.properties文件:

(1)介绍:log4j.properties文件是一个键-值对保存log4j配置的属性文件。默认情况下,日志管理器在classpath查找一个名为log4j.properties的文件。

(2)语法:

①根日志记录器的级别定义为OFF,DEBUG,INFO,ERROR,WARN,FATAL和ALL之中的一个或多个,并连接附加器命名为X到它;

②设置名为X的附加目的地是一个有效的appender;

③设置布局的附加器X。

# Define the root logger with appender X

log4j.rootLogger = level, appenderX

 

# Set the appender named X to be a File appender

log4j.appender.X=org.apache.log4j.FileAppender

 

# Define the layout for X appender

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

log4j.appender.X.layout.conversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [%-5p] --> %F(%L): %m %x %n

 

3、conversionPattern中模式转换字符及含义:

l c:category,用于输出的记录事件的类别。如,对于类别名称"com.remoa.Test1" ,%c{2} 会输出 "remoa.Test1"

l C:用于输出完全限定类名。例如,对于类名 "org.apache.xyz.SomeClass", 模式 %C{1} 会输出 "SomeClass".

l d:输出日期时间。。例如, %d{HH:mm:ss,SSS} 或 %d{yyyy-MM-dd  HH:mm:ss,SSS}

l F:用于输出被发出日志记录请求的文件名,带.java后缀及包名称

l l:记录发生位置的详细描述,包括方法名、文件名及行号

l L:用于输出从被发出日志记录请求的行号

l m:输出记录事件的消息内容

l M:用于输出发出日志请求所在的方法名称

l n:输出平台相关的行分隔符或文字

l p:输出记录事件的级别,比如输出INFO,WARN

l r:用于输出毫秒从布局的结构经过直到创建日志记录事件的数目

l t:用于输出生成的日志记录事件的线程的名称,比如在main方法中,将输出main

l x:用于与产生该日志事件的线程相关联输出的NDC(嵌套诊断上下文)

l X:在X转换字符后面是键为的MDC。例如  X{clientIP} 将打印存储在MDC对键clientIP的信息

l %:文字百分号,%%将打印%标志

 

4、格式修饰符及含义:

%-5p:用空格右垫,如果事件级别的名称少于5个字符

%20c:用空格左垫,如果类别名称少于20个字符

%.30c:指定输出类别的名称,最大的长度是30,如果类别的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

%20.30c:指定输出类别的名称,最大的长度是30,如果类别的名称长度大于30的话,就会将左边多出的字符截掉,但大于20小于30的话也不会补空格。小于20的话,用空格左垫。

 

5、FileAppender的配置:

l immediateFlush:标志的默认设置为true,这意味着输出流的文件被刷新,在每个追加操作

l encoding:它可以使用任何字符编码。默认情况下是特定于平台的编码方案

l threshold:这个 appender 阈值级别

l Filename :日志文件的名称

l fileAppend:默认设置为true,这意味着记录的信息被附加到同一文件的末尾

l bufferedIO:此标志表示是否需要写入缓存启用。默认设置为false

l bufferSize:如果 bufferedI/O 启用,这表示缓冲区的大小,默认设置为8KB

 

6、日志记录到多个文件:

(1)RollingFileAppender:按大小备份

l maxFileSize:上述的文件的回滚临界尺寸。默认值是10MB

l maxBackupIndex:此属性表示要创建的备份文件的数量。默认值是1

(2)DailyRollingFileAppender:按日备份

l DatePattern:表示在滚动的文件,并按命名惯例来执行。默认情况下,在每天午夜滚动。其描述如下:

l '.' yyyy-MM:滚动在每个月的结束和下一个月初

l '.' yyyy-MM-dd:这是默认值,每天午夜滚动

l '.' yyyy-MM-dd-a:滚动每一天的午夜和中午

l '.' yyyy-MM-dd-HH:滚动在每一个小时

l '.' yyyy-MM-dd-HH-mm :滚动在每一个分钟

l '.' yyyy-ww:滚动每个星期取决于区域设置时的第一天

示例:

log4j.rootLogger = DEBUG, FILE
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=${log}/log.out
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=true
log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

7、配置文件示例:

logpath=D:/logs
log4j.rootLogger=ERROR, console, file
 
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold = DEBUG
log4j.appender.console.ImmediateFlush = true
log4j.appender.console.Target = System.err
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{yyyy-MM-dd HH\:mm\:ss} [%-5p] --> %F(%L): %m %x %n
 
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=${logpath}/log.out
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%C{2}] [%p %L] [%t] %m [ %x] %n 

8、JAVA代码示例:

导入依赖包:

 <!-- https://mvnrepository.com/artifact/log4j/log4j -->
  <dependencies>
      <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
      </dependency>
  </dependencies>

log4j学习

图8.1 代码示例