当前位置: 首页 > 面试题库 >

用于调试和错误的不同log4j布局?

荀正谊
2023-03-14
问题内容

在log4j中,是否可以让logger.error(“”)和logger.debug(“”)包含不同的输出布局?

我希望错误包含方法名和行号,这两者都会降低应用程序的性能。

编辑:

添加apache-log4j-extras之后,以下配置文件将起作用。

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

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="WARNINGS" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="warnings.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c - %m%n%n"/>
        </layout>
        <filter class="org.apache.log4j.filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="WARN"/>
        </filter>
    </appender>

    <appender name="ERRORS" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="errors.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <!-- %M for method name , %L for line number  -->
            <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c %M %L - %m%n%n"/>
        </layout>
        <filter class="org.apache.log4j.filter.LevelRangeFilter">
            <param name="LevelMin" value="ERROR"/>
            <param name="LevelMax" value="FATAL"/>
        </filter>
    </appender>

    <logger name="com.foo.bar">
        <appender-ref ref="WARNINGS"/>
        <appender-ref ref="ERRORS"/>
    </logger>

</log4j:configuration>

此代码用于测试

// goes to errors.txt
     log.error("error");
//goes to warnings.txt
     log.warn("warn");

问题答案:

在您的log4j.xml配置中,您可以创建两个附加程序,每个附加程序都使用LevelMatchFilter并分别具有单独的模式输出。



 类似资料:
  • 首先,我有一个类的头文件,一个没有定义的专业化声明(来自互联网的代码示例) $ 猫 foo.h 然后有2个模板专业化的实现文件 最后我得到了一个主文件 如果我在没有优化的情况下编译并运行它,它会给出: g foo_ int。cpp foo_ float。cpp main.cpp 如果我添加优化,那么结果是不同的: $ g foo _ int . CPP foo _ float . CPP main

  • 在程序运行过程中,总会遇到各种各样的错误。 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。 有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理。 还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网

  • 在程序运行过程中,总会遇到各种各样的错误。 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。 有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理。 还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网

  • 我有一个Android项目,它依赖于纯Java项目。它们都依赖于另一个Java库,也在我在Android Studio中的多项目gradle集中。我有两个版本的库,希望Android和Java项目在调试模式下依赖其中一个,在发布模式下依赖另一个。 Android项目有可能吗?纯Java项目?怎样

  • 问题内容: 我想使用Log4J记录我的Java项目。我在src目录中创建了一个log4j.properties文件,其内容如下: 例如,我只想在我的主要方法中使用“ DEFAULT_LOGGER”。所以我写道: 但是,当我执行main方法时,我将消息“ Process Logger”打印到所有Appender(stdout,file和file2),但是我只想将其打印到file2。我该怎么做,或者更