【问题标题】:redirecting log4j messages from a method to a different log file将 log4j 消息从方法重定向到不同的日志文件
【发布时间】:2010-10-01 03:36:43
【问题描述】:

现在我以普通的香草/开箱即用的形式使用 log4j。我在类路径中有一个 log4j.properties 文件,并且在 Web 应用程序中散布着各种记录器消息。现在我有兴趣将日志消息从包“xyz”中的方法“abc”重定向到特定的日志文件“pqr”。我不希望包 xyz 中的所有记录器消息都转到“pqr”,而只是来自包中的一种方法(“abc”)。

我如何做到这一点?

TIA 博

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

    这是我正在使用的配置文件。这会将一些特定消息发送到文件,将其他消息发送到控制台。这可能会对您有所帮助。 这在独立应用程序中使用。

    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <!-- ============================== -->
    <!-- Append SQL messages to a file. -->
    <!-- ============================== -->
    <appender name="SQL" class="org.apache.log4j.RollingFileAppender">
        <param name="Threshold" value="TRACE" />
        <param name="File" value="sql-statement.log" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="5000KB" />
        <param name="MaxBackupIndex" value="100" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n" />
        </layout>
    </appender>
    
    <!-- ============================== -->
    <!-- Append messages to the console -->
    <!-- ============================== -->
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <param name="Threshold" value="DEBUG" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%p] %m%n" />
        </layout>
    </appender>
    
    <!-- =============================== -->
    <!-- Application specific categories -->
    <!-- =============================== -->
    <category name="com.edusoft.crashtest.qsbi">
        <priority value="DEBUG" />
        <appender-ref ref="CONSOLE" />
    </category>
    <category name="com.edusoft.crashtest.qsbi.printer" additivity="true">
        <priority value="TRACE" />
        <appender-ref ref="SQL" />
    </category>
    
    <!-- Setup the Root category -->
    <root>
        <priority value="ERROR" />
    </root>
    

    【讨论】:

      【解决方案2】:

      我不认为它可以那么细化。为什么不将该方法拉到单独的类中?

      【讨论】:

      • 好主意。但这是我想要做的,我在属性文件中创建了一个记录器并在方法中使用该记录器(基本上在类级别声明两个记录器对象)并且来自该方法的所有消息都被重定向到这个新的 &单独的记录器。像这样的:
      • 哎呀按了不小心输入了。
      • 私有静态 Logger logger = Logger.getLogger(Main.class);私有静态记录器 logger2 = Logger.getLogger("AUDITLOG"); /** * @param args 命令行参数 */ public static void main(String[] args) { // TODO code application logic here logger.info("TESTS"); logger2.info("SDS"); System.out.println("叮咚");
      • @BoCode:那么,它是否按预期工作?请将此代码和您的配置添加到您的问题中。这可能会让更多人回答您的问题。
      猜你喜欢
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 2019-09-27
      • 2014-09-19
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      相关资源
      最近更新 更多