log4j学习

log4j学习

目录:

1、log4j核心组件:

2、log4j.properties文件:

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

4、格式修饰符及含义:

5、FileAppender的配置:

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

7、配置文件示例:

8、JAVA代码示例:


1、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>


图8.1 代码示例


Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 log4j的好处在于: 1) 纪录操作,能够详细的知道错误的原因 2) 通过修改配置文件,可以定义每一条日志信息的级别,从而控制是否输出。在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(......)等)。 log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j。 首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址: http://logging.apache.org/log4j/1.2/download.html 1.得到记录器   使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:   public static Logger getLogger( String name) name : 这个那么就是你配置文件中对应的 log4j.logger. 后面的字符串   通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:   static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )   2.读取配置文件   当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:   BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。   PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。   DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。   3.插入记录信息(格式化日志信息)   当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值