log4j.xml示例配置
我们可以使用属性文件和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类来实现。