一、Log4j使用
1、 配置运行环境,包含log4j-1.2.9.jar,使用BasicConfigurator.configure()配置运行环境。
2、 使用Logger.getLogger(TestLogginLevel.class)获取Logger实例。
3、 使用fatal()、error()、warn()、info()、debug()打印Log。
二、记录器(Logger)log4j允许程序员定义多个记录器,每个记录器有自己的名字,记录器之间通过名字来表明隶属关系(或家族关系)。
1、 Logger的层次结构。X.y的logger是x.y.z的logger的父logger,x是x.y.z的祖先logger.
Logger loggerX = Logger.getLogger(Y.class);
Logger loggerY = Logger.getLogger(X.class);//取得的是同一个Logger实例。
2、 Logger的等级(Logger-Level filter)。如果Logger没有定义等级,则使用它父Logger的等级。根Logger的等级为DEBUG。
等级次序:OFF>FATAL>ERROR>WARN>INFO>DEBUG>ALL;
可以使用logger. setLevel(Level.DEBUG)设置Logger的等级。
等级过滤:如果执行等级<设定等级,则相应操作不会执行。
3、 基准过滤等级(Hierarchy-wide Threshold filter)。它有两种作用范围,全局范围和Appender范围,它的过滤级别高于实行等级。可以使用如下程序设置:
LoggerRepository repository = logger.getLoggerRepository();
repository.setThreshold(Level.OFF);
三、存储器(Appenders):负责Log的保存。
1、 log4j 中,log信息通过存放器输出到目的地。支持的存放器有console, files, GUI components, remote socket servers, JMS, NT Event Loggers, remote UNIX Syslog daemons。通过file存放器,log信息可以被输出到不同的文件中(即不同的目的地)。log信息可被异步存放。
2、 一个记录器可以有多个存放器,可以通过方法addAppender来增加存放器。一条blog信息如果可被这个记录器处理,则记录器会把这条信息送往每个它所拥有的存放器。
3、 每个记录器有一个继承开关,其开关决定记录器是/否继承其父记录器的存储器。可以使用setAdditivity()方法设置继承开关,默认为打开状态。
4、 Appender也可以设置过滤器,在配置文件中的属性为:Threshold。也可在程序中用setThreshold()方法设置,参数为Priority类的静态常量{FATAL,ERROR,WARN,INFO,DEBUG}。
5、 可以在一个Logger绑定两个同样的Appender。
四、布局器(Layouts)布局负责格式化输出的log信息。log4j的PatternLayout可以让程序以类似C语言printf的格式化模板来定义格式。
五、对象翻译器(Object Rendering),提供可插入式的对象翻译器,即将对象翻译为相应的消息。可以让你在不在对象类中添加toString()方法,而格式化类的信息。
1、 果想翻译的类实现了toString()方法,可以使用DefaultRenderer。
2、 自己的对象翻译器需要实现org.apache.log4j.or.ObjectRenderer接口。
3、 如果子对象没有相应的翻译器类,则会使用父类对应的翻译器类。
六、Logger的执行时序。
1、 执行Hierarchy-wide Threshold过滤。
2、 执行Logger-Level过滤。
3、 生成LoggingEvent。
4、 调用Appender。
5、 调用Layout格式化LoggingEvent。
6、 返回格式化好的LoggingEvent,在Appender中执行相应的Log动作。
七、性能(已经和System.out.println()差不多了)
1、 Logging关闭后的性能:应该在写Log之前判断isDebugEnabled()和相应的方法。优:可以省去一些对象调用toString()的时间。弊:当Logging打开时会做两次判断。
2、 如何Logging的性能:从继承的路径中寻找Appender是比较费时的,建议继承路径应该短点。
3、 Logging中的性能:操作文件系统等物理硬件是很费时的。
八、XML配置文件
1、 Log4j首先查找默认的配置文件log4j.xml,如果没有找到就找log4j.properties。
2、 Log4j.xml只有Log4j1.2.7以后才支持,之前的版本只支持log4j.properties。
九、重新读取配置文件。
1、 它是线程安全的。
2、 它并不是将上一次配置文件中的所有Appender、Logger删除,重新配置,而是指将在新的配置文件中涉及到的Appender关闭并删除。
3、 支持增量配置。注:不能再新的配置中涉及到已经配置的内容,一旦修改了某个Logger的配置可能关闭某些Appender。
十、Log4j的配置
正如看到的,如果程序没有配置Log4j,他会报出一些Log4j没有初始化的错误,而用户可能并不愿意看到这类错误,这样可以通过如下的函数来解决:
static void turnOffLogging()
{
Logger root = Logger.getRootLogger();
boolean rootIsConfigured = root.getAllAppenders().hasMoreElements();
if(!rootIsConfigured)
{
root.setLevel(Level.OFF);
}
}
十一、Sevlet中Log4j的配置
1、 建议将log4j-1.2.9.jar放在WEB-INF/lib/目录下。配置文件放在WEB-INF/classes/目录下,这样没个应用可以是用独立的配置。当然,如果想在整个服务器上使用一种配置,可是将Log4j的配置,交给应用服务器如jBoss、weblogic等。
2、 如果无法确定在何处初始化Log4j,可是使用一个Sevlet做初始化工作。
Web.xml配置如下:
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>chapter3.Log4jInitServlet</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
sevlet代码如下:
public void init()
{
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j-init-file");
//if the log4j-init-file is not set, then no point in trying
if(file != null)
{
PropertyConfigurator.configure(prefix+file);
}
}
分享到:
相关推荐
**Log4j简介** Log4j是Apache组织开发的一款强大的日志组件,它允许开发者对应用程序进行日志输出的控制。Log4j包括三个核心部分:配置器(Configurator)、日志记录器(Logger)和布局器(Layout)。配置器用于设置...
### Log4j2简介 Log4j2是Apache软件基金会推出的日志框架,它是Log4j 1.x的重构版本,旨在提供更为高效且灵活的日志解决方案。与Log4j 1.x相比,Log4j2在设计上进行了重大改进,并解决了Logback等其他日志框架中...
Log4j是一款广泛使用的日志记录框架,尤其在Java开发中极为常见。它是由Ceki Gülcü在2002年开发的,其版本 jakarta-log4j-1.2.8 提供了详细的文档。这个框架允许开发者以灵活的方式输出不同级别的日志信息,如...
下面我们将从配置文件类型、核心JAR包、文件渲染和Log调用四个方面来比较Log4j和Log4j2的区别。 配置文件类型 Log4j通过一个.properties文件作为主配置文件,而Log4j2则弃用了这种方式,采用的是.xml、.json或者....
log4j的使用习惯,让每个类都拥有一个private static的Logger对象,用来输出该类中的全部日志信息 ,使用xml文件来完成对log4j环境的配置。在项目的main class中的静态初始化块里放log4j环境的配置代码。注意:在一...
一、Log4j简介 Log4j是由Apache软件基金会开发的一个开源日志组件,主要为Java应用程序提供日志服务。它的设计理念是让日志输出变得简单、灵活且可配置,同时提供了丰富的API,使得开发者可以根据需求定制日志输出...
一、Log4j简介 Log4j是一个开源的日志组件,由Ceki Gülcü于20世纪90年代末创建。它的主要目标是提供一个灵活、高性能的日志记录框架,使得开发者能够轻松地控制日志信息的输出级别、格式和目的地。Log4j不仅支持...
#### 一、log4j简介与重要性 Log4j是一种广泛使用的开源日志框架,由Apache软件基金会维护。它主要用于记录Java应用程序的运行时信息,帮助开发者追踪应用程序的行为、调试问题以及进行性能分析。log4j的主要优势...
1. **Log4j简介** Log4j是Apache组织提供的一款开源日志框架,最初由Ceki Gülcü设计。它为Java应用程序提供了丰富的日志功能,包括日志级别控制、输出格式定制、多种输出目的地选择等。1.2.17是Log4j的一个稳定...
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...
一、Log4j简介 Log4j是由Apache软件基金会开发的一个开源日志组件,主要服务于Java平台。它的设计目标是提供一个灵活且高效的日志记录系统,允许开发者自定义日志输出的级别、格式和目的地。Log4j的灵活性体现在它...
一、Log4j简介 Log4j是一个用于生成日志的灵活框架,它提供了丰富的配置选项,允许开发者根据需求调整日志级别、格式和输出目的地。Log4j-1.2.17.jar是该版本的二进制文件,包含了所有必要的类库,可以直接引入Java...
针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...
一、Log4j简介 Log4j是一个灵活且高效的日志记录库,为Java应用程序提供了丰富的日志功能。它的设计目标是提供一个能够进行调试、性能监测、系统管理和安全控制的工具。Log4j的核心组件包括Logger(日志器)、...
#### 一、Log4J简介 Log4J是Apache的一个开源项目,用于提供灵活的日志记录功能。通过它,开发者能够控制日志信息的输出级别、输出目的地(控制台、文件等)、格式化方式等。本文将围绕一份示例配置文件来详细介绍...
**一、Log4j简介** Log4j是基于组件的日志框架,它提供了一种灵活的方式来记录应用程序中的事件。这些事件可以是错误、警告、调试信息等。Log4j的核心组件包括Appender(输出目标)、Layout(格式化输出)和Logger...
1. **Log4j简介** - Log4j是一个轻量级的日志记录工具,具有强大的可配置性和灵活性。 - 它提供了多种级别的日志记录,如DEBUG、INFO、WARN、ERROR和FATAL,便于控制日志信息的输出。 - Log4j由三个主要组件构成...
apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...
#### 一、Log4j 简介与特性 在当前强调可重用组件的软件开发环境中,Apache 的 Log4j 为开发者提供了强大的日志管理工具。Log4j 不仅开源免费,还具备高度的灵活性与可配置性,支持多种日志输出目的地(例如控制台...