Java 如何在tomcat中为记录器层次结构创建不同的文件?

Java 如何在tomcat中为记录器层次结构创建不同的文件?,java,tomcat,logging,Java,Tomcat,Logging,在我的Tomcat应用程序中,我想使用两个记录器将一般事件信息和错误记录到两个不同的文件中 Logger eventLogger = Logger.getLogger("event"); Logger errorLogger = Logger.getLogger("error"); 现在我想做以下事情:eventLogger的日志应该写入“events.log”文件,errorLogger日志应该写入“errors.log”文件。来自任何其他记录器的所有日志(例如Tomcat日志)都应写入ca

在我的Tomcat应用程序中,我想使用两个记录器将一般事件信息和错误记录到两个不同的文件中

Logger eventLogger = Logger.getLogger("event");
Logger errorLogger = Logger.getLogger("error");
现在我想做以下事情:eventLogger的日志应该写入“events.log”文件,errorLogger日志应该写入“errors.log”文件。来自任何其他记录器的所有日志(例如Tomcat日志)都应写入catalina.out(或任何其他默认文件)


我怎样才能和朱莉做到这一点?或者我需要第三方库吗?

您必须为log4j.xml中的每个文件定义一个appender,并将它们连接到记录器:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<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{ISO8601} %5p [%c.%M:%L] - %m%n" />
    </layout>
</appender>

<appender name="FILE-error" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="${catalina.base}/logs/error.log" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <param name="ImmediateFlush" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %5p [%c.%M:%L] - %m%n" />
    </layout>
</appender>

<appender name="FILE-event" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="${catalina.base}/logs/event.log" />       
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <param name="ImmediateFlush" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss};%m%n" />
    </layout>
</appender>

<!-- Loggers -->
<logger name="error" additivity="false">
    <level value="warn" />
    <appender-ref ref="FILE-error" />
</logger>

<logger name="event" additivity="false">
    <level value="info" />
    <appender-ref ref="FILE-event" />
</logger>

<!-- Root Logger -->
<root>
    <priority value="warn" />
    <appender-ref ref="FILE-error" />
</root>
</log4j:configuration>

这是朱莉无法做到的。您可以使用log4j

基本上你需要追加器。他们将对日志进行管理,以便将其转到单独的文件中。
xml
中的配置示例:

<?xml version="1.0"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.EnhancedPatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%t][%c{1}:%L] %m%n" />
        </layout>
    </appender>

    <appender name="eventFILE" class="org.apache.log4j.DailyRollingFileAppender">
       <param name="File" value="@tomcat.home@/logs/event.log" />
       <param name="DatePattern" value="'.'yyyy-MM-dd" />
       <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>

    <appender name="errorFILE" class="org.apache.log4j.DailyRollingFileAppender">
       <param name="File" value="@tomcat.home@/logs/error.log" />
       <param name="DatePattern" value="'.'yyyy-MM-dd" />
       <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>

    <logger name="event" additivity="false">
        <level value="INFO" />
        <appender-ref ref="eventFILE" />
    </logger>

    <logger name="error" additivity="false">
        <level value="INFO" />
        <appender-ref ref="errorFILE" />
    </logger>

    <root>
        <priority value="INFO" />
        <appender-ref ref="FILE" />
    </root>
</log4j:configuration>

在使用JULI时,不提供任何方法为每个应用程序定义多个文件。实际上,它提供了使用log4j而不是它的步骤,因为JULI配置可能过于基本

但同样,此配置位于容器级别:

注意:如果需要,则需要执行本节中描述的步骤 将Tomcat重新配置为使用ApacheLog4j进行自己的日志记录。这些 如果您只想在自己的web中使用log4j,则不需要执行步骤 应用程序。-在这种情况下,只需放置log4j.jar和log4j.properties 进入WEB应用程序的WEB-INF/lib和WEB-INF/class

因此,使用第三方库是合乎逻辑的选择,您可以在
${catalina.base}/config
文件夹中的
logging.properties
中找到如何配置它

#Declares the handlers allowed for use.
handlers = 100catalina.org.apache.juli.FileHandler, 200catalina.org.apache.juli.FileHandler, 300catalina.org.apache.juli.FileHandler

 #Install the 'all' hander on the root logger.
.handlers=300catalina.org.apache.juli.FileHandler

#Install the 'event' handler on the 'event' logger and don't report to root.
event.handlers=100catalina.org.apache.juli.FileHandler
event.useParentHandlers=false

#Install the 'error' handler on the 'error' logger and don't report to root.
error.handlers=200catalina.org.apache.juli.FileHandler
error.useParentHandlers=false

#Event handler settings.
100catalina.org.apache.juli.FileHandler.level = ALL
100catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
100catalina.org.apache.juli.FileHandler.prefix = event.

#Error handler settings.
200catalina.org.apache.juli.FileHandler.level = ALL
200catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
200catalina.org.apache.juli.FileHandler.prefix = error.

#Root handler settings.
300catalina.org.apache.juli.FileHandler.level = ALL
300catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
300catalina.org.apache.juli.FileHandler.prefix = all.

如果尝试在
WEB-INF/classes/logging.properties
中安装此文件,则此配置将不起作用。这是因为不允许您在指定的记录器上安装处理程序。

我需要等待一天才能获得赏金。