概述
在应用程序中输出日志有三个目的:
- 监视代码中变量的变化情况,把数据周期性地记录到文件中供其他应用进行统计分析的工作
- 跟踪代码运行时的轨迹,作为日后审计的依据
- 担当开发环境中调试器的作用,向文件或者控制台打印代码的调试信息
log4J主要由以下三个构件组成:
- Logger:负责生成日志,并能够对日志信息进行分类筛选,通俗地讲就是决定什么日志应该被输出,什么日志应该被忽略,主要是由日志的级别来控制
- Appender:定义了日志信息输出的目的地,指定日志信息应该被输出到 什么地方,如控制台、文件或者网络设备等
- Layout:指定日志信息的输出格式
一个Logger可以有多个Appender,也就是说一条日志信息可以同时输出到多个目的地;而每个Appender对应一种Layout,Layout指定了日志输出的格式。
Logger组件
Logger组件是Log4J的核心组件,它代表了Log4J的日志记录器,能够对日志信息进行分类筛选,决定什么日志应该被输出,什么日志应该被忽略。
Logger组件由org.apache.log4j.Logger类来实现,它提供了如下方法:
//创建及返回Logger实例的静态方法
public static Logger getRootLogger();
public static Logger getLogger(String name);
//打印各种类别的日志的方法
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);
//打印日志的通用方法
public void log(Priority p, Object message);
可以在Log4J的配置文件中配置自己的Logger组件,例如:
log4j.logger.helloappLogger=WARN
以上代码定义了一个Logger组件,名为helloappLogger,并设置它的日志级别为WARN。Log4J共有5种日志级别,从高到低分别是FATAL、ERROR、WARN、INFO、DEBUG。当调用输出日志的方法时,只有方法级别大于这个logger所设置的级别的日志信息才会以被记录。
Appender组件
Log4J的Appender组件用于决定将日志输出到什么地方。目前Log4J支持将日志输出到以下目的地:
- 控制台
- 文件
- GUI组件
- 远程套接字服务器
- NT的事件记录器
- 远程UNIX Syslog守护进程
一个Logger可以同时对应多个Appender。
Layout组件
Layout组件用于决定日志的输出格式,它有以下几种类型:
- org.apache.log4j.HTMLLayout(以HTML表格形式布局)
- org.apache.log4j.PatternLayout*可以自定义布局格式)
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息)
SimpleLayout仅输出日志信息级别和信息字符串,例如:
WARN - This is a log message from the helloappLogger.
PatternLayout可以让开发者依照ConversionPattern去定义输出格式。ConversionPattern有点像C语言的print打印函数,开发者可以通过一些预定义的符号来指定日志的内容和格式,这些符号的说明如下所示:
符号 | 描述 |
---|---|
%r | 自程序开始运行到输出当前日志所消耗的毫秒数 |
%t | 表示输出到当前日志的线程的名字 |
%p | 表示当前日志的级别 |
%d | 表示输出当前日志的日期 |
%c | 表示输出当前日志的Logger的名字 |
%m%n | 表示日志信息的内容 |
大致的符号就这些,再详细的信息可以参考官方文档。
Logger组件具有继承性,Log4J提供了一个root Logger,它是所有Logger组件的父类。用户可以在配置文件中方便地配置存在继承关系的Logger组件,凡是在符号”.”后面的Logger组件都会成为在符号”.”前面的Logger组件的子类,例如:
log4j.apache.logger.helloappLogger=WARN
log4j.apache.helloappLogger.childLogger=,file
对于以上配置文件,childLogger就是helloappLogger的子类的Logger组件。
Logger组件的继承关系有以下特点:
- 如果子类没有设置日志的级别,那么将继承父类的日志级别
- 如果子类设置了自己的日志级别,就不会继承父类的日志级别
- 在默认情况下,子类会继承父类所有的Appdnder,并把它们加入到自己的Appender清单中
- 如果把子类的additivity标志设置为false,那么它就不会继承父类的Appender。additivity标志的默认值是true
Log4J的使用方法
定义配置文件
Log4J有三个重要的组件:Logger、Appender和Layout。Log4J支持在程序中以编程的方式设置这些组件,也可以在配置文件中设置这些组件。Log4J支持两种配置文件的格式:XML格式的配置文件和Java属性文件。下面介绍如何用Java属性文件的方式来配置Log4J。
配置Logger组件
如果是配置rootLogger,则语法为:
log4j.rootLogger=[priority], appenderName1, appenderName2, ...
其中priority是日志的级别,appenderName指定Appender组件,用户可以同时指定多个Appender组件。
如果配置自己的Logger组件,则语法为:
log4j.logger.loggerName=[priority], appenderName1, appenderName2, ...
配置Appender组件
log4j.appender.appenderName=从log4j的几种Appender类选择一个
log4j.appender.appenderName.option1=value1
log4j.appender.appenderName.option2=value2
...
Log4J提供的Appender组件有以下几种:
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
- org.apache.log4j.RollingFileAppender(文件大小达到一定尺寸的时候产生一个新的文件)
- org.apache.log4j.WriteAppender(将日志信息作为数据流改善到任意指定的地方)
配置Layout组件
log4j.appender.appenderName.layout=从log4j的几种Layout中选择一种
log4j.appender.appenderName.layout.option1=value1
log4j.appender.appenderName.layout.option2=value2
...
Log4J提供的Layout有以下几种:
- org.apache.log4j.HTMLLayout(以HTML表格形式布局)
- org.apache.log4j.PatternLayout(自定义布局方式)
- org.apache.log4j.SImpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息)
在程序中使用Log4J
在程序中使用Log4J需要以下几个 步骤:
- 读取配置文件,配置Log4J的环境
- 获得日志记录器
- 输出日志信息
首先读取配置文件,配置Log4J环境,有以下三种方法:
- BasicConfigurator.configure():自动快速地使用默认Log4J环境
- PropertyConfigure(String configFilename):读取Java属性格式的配置文件并配置Log4J环境
- DOMConfigutor.configure(String filename):读取XML形式的配置文件并配置Log4J环境
然后获得日志记录器,这个logger负责日志的输出。如果要获得root logger,可以调用Logger类的静态方法getRootLogger():
Logger rootLogger = Logger.getRootLogger();
如果需要获得用户自己的Logger,可以使用Logger类的静态方法getLogget(String name):
Logger helloappLogger = Logger.getLogger("log4j.logger.helloappLogger");
然后就可以在程序中调用Logger类的输出方法了。
最后
以上就是无心大神为你收集整理的Log4J介绍Log4J的使用方法的全部内容,希望文章能够帮你解决Log4J介绍Log4J的使用方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复