如何为 Log4J 使用两个不同的 XML-配置文件
How To Use Two Different XML-Configuration-Files For Log4J
我有两个 XML-配置文件。一个用于我的 Java Jersey WebService,一个用于我的数据访问对象(=DAO;MySQL-DB via JDBC)。当我 运行 我的应用程序时,日志被分隔在两个不同的文件夹中,但日志文件彼此相同。
我怎样才能避免这种情况?
XML-DAO 的配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- CONSOLE -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<!-- ERROR LOG INTO FILE -->
<appender name="dberr" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/database/errlog.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<!-- STANDARD LOG INTO FILE -->
<appender name="dbstd" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/database/std.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- DEBUG LOG INTO FILE -->
<appender name="dbdebug" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/database/debug.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="dberr" />
<appender-ref ref="dbstd" />
<appender-ref ref="dbdebug" />
</root>
</log4j:configuration>
XML-Web 服务配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- CONSOLE -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<!-- ERROR LOG INTO FILE -->
<appender name="wserr" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/webservice/errlog.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<!-- STANDARD LOG INTO FILE -->
<appender name="wsstd" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/webservice/std.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- DEBUG LOG INTO FILE -->
<appender name="wsdebug" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/webservice/debug.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="wserr" />
<appender-ref ref="wsstd" />
<appender-ref ref="wsdebug" />
</root>
</log4j:configuration>
这就是我调用 Log4J 的方式:
Logger log = Logger.getLogger(DAO.class);
DOMConfigurator.configure("C:\file\path\to\config.xml");
我想要一个文件夹中包含来自 DAO 的日志 olny 的日志文件和 WebService 的等效文件。我哪里不好?
我将两个文件合并为一个 XML 文件。我需要做的是:
<logger name="webservice_container">
<appender-ref ref="wserr" />
<appender-ref ref="wsstd" />
</logger>
<logger name="db_container">
<appender-ref ref="dberr" />
<appender-ref ref="dbstd" />
</logger>
<root>
<level value="DEBUG" />
</root>
现在我只有一个文件,因为我拥有 Log4J 的所有配置,它记录在 2 个不同的文件夹和 4 个不同的文件中。
我有两个 XML-配置文件。一个用于我的 Java Jersey WebService,一个用于我的数据访问对象(=DAO;MySQL-DB via JDBC)。当我 运行 我的应用程序时,日志被分隔在两个不同的文件夹中,但日志文件彼此相同。
我怎样才能避免这种情况?
XML-DAO 的配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- CONSOLE -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<!-- ERROR LOG INTO FILE -->
<appender name="dberr" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/database/errlog.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<!-- STANDARD LOG INTO FILE -->
<appender name="dbstd" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/database/std.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- DEBUG LOG INTO FILE -->
<appender name="dbdebug" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/database/debug.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="dberr" />
<appender-ref ref="dbstd" />
<appender-ref ref="dbdebug" />
</root>
</log4j:configuration>
XML-Web 服务配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- CONSOLE -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<!-- ERROR LOG INTO FILE -->
<appender name="wserr" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/webservice/errlog.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<!-- STANDARD LOG INTO FILE -->
<appender name="wsstd" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/webservice/std.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- DEBUG LOG INTO FILE -->
<appender name="wsdebug" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="5MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="logs/webservice/debug.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="wserr" />
<appender-ref ref="wsstd" />
<appender-ref ref="wsdebug" />
</root>
</log4j:configuration>
这就是我调用 Log4J 的方式:
Logger log = Logger.getLogger(DAO.class);
DOMConfigurator.configure("C:\file\path\to\config.xml");
我想要一个文件夹中包含来自 DAO 的日志 olny 的日志文件和 WebService 的等效文件。我哪里不好?
我将两个文件合并为一个 XML 文件。我需要做的是:
<logger name="webservice_container">
<appender-ref ref="wserr" />
<appender-ref ref="wsstd" />
</logger>
<logger name="db_container">
<appender-ref ref="dberr" />
<appender-ref ref="dbstd" />
</logger>
<root>
<level value="DEBUG" />
</root>
现在我只有一个文件,因为我拥有 Log4J 的所有配置,它记录在 2 个不同的文件夹和 4 个不同的文件中。