log4j.xml示例配置

时间:2020-02-23 14:37:20  来源:igfitidea点击:

我们可以使用属性文件和xml文件来配置log4j。
今天,我们将研究log4j.xml示例,并获取log4j.xml配置的详细信息。

log4j.xml

这是一个典型的log4j.xml示例文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="https://jakarta.apache.org/log4j/"
	debug="false">

<!-- console appender -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
	<param name="Target" value="System.out" 
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%-5p %c{1} - %m%n" 
	</layout>
	<filter class="org.apache.log4j.varia.LevelMatchFilter">
		<param name="LevelToMatch" value="INFO" 
      <param name="AcceptOnMatch" value="true" 
	</filter>
	<filter class="org.apache.log4j.varia.DenyAllFilter"
</appender>

<logger name="com.theitroad.log4j" additivity="false">
	<level value="DEBUG" 
	<appender-ref ref="console" 
</logger>

<root>
	<priority value="DEBUG" 
	<appender-ref ref="console" 
</root>

</log4j:configuration>

如果您使用的是Eclipse,则会注意到它没有显示XML元素选项,这是因为它无法找到log4j.dtd文件。
如下图所示。

将DOCTYPE声明更改为以下即可解决此问题。
您将需要互联网连接才能为此验证log4j.xml文件。

<!DOCTYPE log4j:configuration PUBLIC
"-//APACHE//DTD LOG4J 1.2//EN" "https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

log4j.xml示例配置属性

让我们看一下log4j.xml示例配置属性-"阈值"和"调试"。

<log4j:configuration xmlns:log4j="https://jakarta.apache.org/log4j/" threshold="info" debug="false">

"阈值"属性采用最低级别,在该级别之下,将禁用所有日志记录语句。
这将覆盖所有记录器级别的配置,仅当您要为所有记录器禁用一些较低级别的记录时才使用此配置。
在上述情况下,即使将任何记录程序级别定义为调试,也会禁用所有跟踪和调试日志。

" debug"属性用于切换内部log4j日志语句的打印。
您应该将其保留为false,以避免通过log4j框架进行批量日志记录。
如果将其更改为true,则将获得以下类似的日志。

log4j: reset attribute= "false".
log4j: Threshold ="warn".
log4j: Retreiving an instance of org.apache.log4j.Logger.
log4j: Setting [com.theitroad.log4j] additivity to [false].
log4j: Level value for com.theitroad.log4j is  [TRACE].
log4j: com.theitroad.log4j level set to TRACE
log4j: Class name: [org.apache.log4j.ConsoleAppender]
log4j: Setting property [target] to [System.out].
log4j: Parsing layout of class: "org.apache.log4j.PatternLayout"
log4j: Setting property [conversionPattern] to [%-5p %c{1} - %m%n].
log4j: Adding appender named [console] to category [com.theitroad.log4j].
log4j: Level value for root is  [DEBUG].
log4j: root level set to DEBUG
log4j: Adding appender named [console] to category [root].

log4j.xml示例–追加程序

下一个重要部分是appender元素。
其中我们定义了日志记录策略,我们可以在log4j.xml配置中定义多个附加程序。

每个追加程序都有一个用于记录的独特名称和类。
然后,我们设置appender类使用的参数,每个类都有自己的一组可定义的参数。

例如,"目标"是" ConsoleAppender"中的参数,而"文件"," MaxFileSize"," MaxBackupIndex"是" RollingFileAppender"的参数。

<appender name="console" class="org.apache.log4j.ConsoleAppender">
	<param name="Target" value="System.out" 
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%-5p %c{1} - %m%n" 
	</layout>
</appender>

<!-- rolling file appender -->
<appender name="file" class="org.apache.log4j.RollingFileAppender">
  <param name="File" value="logs/main.log" 
  <param name="Append" value="true" 
  <param name="ImmediateFlush" value="true" 
  <param name="MaxFileSize" value="10MB" 
  <param name="MaxBackupIndex" value="5" 

  <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" 
  </layout>
</appender>

log4j.xml示例–布局

下一部分是布局,我们通过PatternLayout参数ConversionPattern定义日志记录模式。
这是所有日志消息的前缀。
在上面的文件附加器中,我们为日志消息添加了日期,线程名称,类名称和行号。
以下是此模式的示例输出:

2015-05-12 21:22:44,610 +0530 [main] DEBUG (Log4jExample.java:18) - XYZ Message

log4j xml配置过滤器和记录器

接下来是过滤器部分,我们可以定义自己的自定义过滤器或者使用任何现有过滤器,有关更多详细信息,请阅读log4j过滤器。

下一部分是记录器,我们也可以有多个记录器。
"名称"属性用于定义将使用此记录器的软件包。
请注意,如果一个类有多个记录器匹配项,那么将使用最特定的一个。

log4j xml可加性

"可加性"属性是非常重要的属性-如果为true,则日志记录会遍历层次结构。
例如,如果我们有如下定义的记录器。

<logger name="com.theitroad.log4j" additivity="true">
	<level value="DEBUG" 
	<appender-ref ref="jdbc" 
</logger>

<logger name="com.theitroad.log4j.model" additivity="true">
	<level value="DEBUG" 
	<appender-ref ref="file" 
</logger>

<root>
	<priority value="DEBUG" 
	<appender-ref ref="console" 
</root>

而且我们从com.theitroad.log4j.model包中的某个类进行记录,由于记录器的层次结构,它将使用附加程序" file"," jdbc"和" console"。
这会生成很多冗余日志,因此我们通常将其保留为false。
不过,它的默认值为" true"。

记录器也可以使用多个追加程序。

<logger name="com.theitroad.log4j" additivity="true">
	<level value="TRACE" 
	<appender-ref ref="console" 
	<appender-ref ref="file" 
</logger>

log4j xml根记录器

最后,需要定义根记录器,这是默认级别,如果找不到记录器匹配项,则使用附加程序。

在结束本教程之前,还有一点是,log4j框架在类路径中查找log4j.xml或者log4j.properties文件。
如果您为这些配置文件使用其他名称,则需要在使用之前对其进行配置。

DOMConfigurator.configure("log4j.xml");
//OR, don't use both
PropertyConfigurator.configure("log4j.properties");

对于独立的Java程序,可以在程序开始执行之前在main方法中进行操作。
对于Web应用程序,可以通过Servlet Context Listener类来实现。