当前位置: 首页 > 知识库问答 >
问题:

使用同一对象将不同级别的日志记录到不同的文件

咸琪
2023-03-14

我的简单问题是:如果我有两个类似logger的语句。info()和记录器。error()在Java中(使用log4j),我希望将这两行的结果打印在两个单独的文件中。也就是说,记录器。信息(…)应该打印到一个文件,比如myLog。信息和记录器。错误(…)应该打印到myLog。错误文件。我正在使用滚动文件追加器执行此任务。另外,我只需要一个记录器对象来完成任务。有人可能会建议两个或多个不同的记录器,每个文件一个,但事实并非如此。

我试图寻找解决这个问题的办法。其中一个使用log4j创建不同内容的多个日志文件的链接提到了“阈值”,我甚至尝试在xml配置文件中添加阈值。但它实际上在做什么:信息日志正在myLog中打印。信息文件,但在这两个文件中都会打印错误日志。可以单独通过xml配置文件完成,还是需要单独的属性文件?如果xml文件足够,那么需要做什么?

我更喜欢xml文件而不是属性文件。如果有一个只使用xml配置文件的工作解决方案,那就足够了。提前谢谢。

共有1个答案

谷梁楷
2023-03-14

您可以使用筛选器拒绝任何消息,但所需级别的消息除外。以下是如何执行此操作的示例:

首先是一节课来测试我们的努力:

package test;
import org.apache.log4j.Logger;

public class Main {

    private static final Logger logger = Logger.getLogger(Main.class);
    public static void main(String[] args) {
        logger.debug("here's some debug");
        logger.info("here's some info");
        logger.warn("here's some warn");
        logger.error("here's some error");
        logger.fatal("here's some fatal");
    }

}

接下来是log4j。用于设置附加器和记录器的xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p  [%c{1}] %m %n" />
        </layout>
    </appender>

    <appender name="debugLog" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="logs/debug.log" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="5000KB" />
        <param name="maxBackupIndex" value="5" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p - %m%n" />
        </layout>

        <filter class="org.apache.log4j.varia.LevelMatchFilter">
            <param name="LevelToMatch" value="DEBUG" />
            <param name="AcceptOnMatch" value="true" />
        </filter>

        <filter class="org.apache.log4j.varia.DenyAllFilter" />
    </appender>

    <appender name="infoLog" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="logs/info.log" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="5000KB" />
        <param name="maxBackupIndex" value="5" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p - %m%n" />
        </layout>

        <filter class="org.apache.log4j.varia.LevelMatchFilter">
            <param name="LevelToMatch" value="INFO" />
            <param name="AcceptOnMatch" value="true" />
        </filter>

        <filter class="org.apache.log4j.varia.DenyAllFilter" />
    </appender>

    <logger name="test" additivity="false">
        <level value="DEBUG" />
        <appender-ref ref="consoleAppender" />
        <appender-ref ref="debugLog" />
        <appender-ref ref="infoLog" />
    </logger>
</log4j:configuration>

此模式将允许您为每个日志级别生成单独的日志,只需重复我为调试或信息日志提供的配置即可。请注意,控制台appender将接受所有级别。

我能从这篇文章中获得一些见解,所以我认为我应该给予表扬。

 类似资料:
  • 问题内容: 我正在使用log4j登录我的应用程序。我正在尝试在不同文件中使用不同级别的日志,但是出了点问题。对于解决此问题的任何帮助,我们将不胜感激。 问题答案: log4j附加程序的标准行为是,它们以其阈值级别 或更高 的阈值记录所有消息,即具有阈值INFO的附加器将记录INFO,WARN,ERROR和FATAL消息,但不记录DEBUG。如果你想记录 只有 INFO信息,但不会发出警告及以上,然

  • 问题内容: 我有一个普通的INFO级别应用日志。我需要的是另外记录所有错误级别的事件,以单独的错误日志。我正在使用这样的配置: 此配置仅记录错误。如果我首先放置信息级别记录器,则它将仅记录到一般附加程序,但错误记录器将无法工作。我想让他们两个都工作。 问题答案: 您需要做的是只有一个定义了INFO级别的定义,但是在您的两个追加器定义中,您需要相应地设置其阈值,例如 然后,将两个追加程序添加到记录器

  • 如何编写一个简单的log4j2.xml文件,将不同级别的日志放入不同的文件中? 例如,我们有错误日志,任何信息日志,我需要将所有错误日志消息推入一个日志文件,所有信息日志消息推入另一个文件。 我怎么做?

  • 在log4j2文档log4j2 java配置中,默认配置为: 根本就不在那里。它仍将只打印出错误日志。 问题 是否有其他人遇到此问题? 有人能复制它吗? 有人知道怎么修吗?我几乎要给别人一块钱。不过,我肯定会把他们的答案标成绿色。 我的最终目标是让特定的记录器发送SMTP请求。我很确定我知道怎么做,我只是在和这个小问题作斗争

  • 我们有两个不同的ASP.NET应用程序启用了Log4net日志记录。它们都有相同的log4net1.2.10.0版本。

  • 以下是我的java logback配置: 我想在这里做的是:我有两个日志追加器:一个用于控制台,另一个用于日志文件;但是对于相同的java软件包(例如:组织.apache.zookeeper),我想使用两个不同的日志级别,INFO用于文件追加器和错误用于康多尔;但是我的日志配置优势无法正常工作。任何人都可以找出我的错误或一些解决方案吗?