如何在tomcat中为logger层次结构创建不同的文件?

时间:2017-07-25 16:46:55

标签: java tomcat logging

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

Logger eventLogger = Logger.getLogger("event");
Logger errorLogger = Logger.getLogger("error");

现在我要执行以下操作:eventLogger的日志应该写入" events.log"文件和errorLogger日志应写在" errors.log"文件。来自任何其他记录器的所有日志(例如Tomcat日志)应写入catalina.out(或任何其他默认文件)。

我怎样才能与JULI达成协议?或者我需要第三方lib?

4 个答案:

答案 0 :(得分:1)

这与Juli无法实现。您可以使用log4j。

基本上你需要appenders。他们将管理日志以转到单独的文件。 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>

答案 1 :(得分:0)

你必须为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>

答案 2 :(得分:0)

在使用JULI时,

Tomcat documentation没有提供任何方法来为每个应用程序定义多个文件。实际上它提供了使用log4j代替它的步骤,因为JULI配置可能太基本了。

但是这个配置再次处于容器级别:

  

注意:如果需要,可以使用本节中描述的步骤   重新配置Tomcat以使用Apache log4j进行自己的日志记录。这些   如果您只想在自己的网站中使用log4j,则不需要步骤   应用。 - 在这种情况下,只需输入log4j.jar和log4j.properties   到Web应用程序的WEB-INF / lib和WEB-INF / classes。

因此,使用第三方库是合乎逻辑的选择,您可以在this SO post

中找到如何配置它

答案 3 :(得分:0)

not joined仅通过位于logging.properties文件夹中的${catalina.base}/config支持此功能。

#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中安装此文件,则此配置将无效。这是因为Tomcat JULI logging不允许您在命名记录器上安装处理程序。