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

适用于不同类别的Log4J记录器

苏麒
2023-03-14
问题内容

我想使用Log4J记录我的Java项目。我在src目录中创建了一个log4j.properties文件,其内容如下:

# Root logger option
log4j.rootLogger=INFO, file, stdout
log4j.logger.DEFAULT_LOGGER=INFO,file2

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=file.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p %c - %m%n



# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


log4j.appender.file2=org.apache.log4j.FileAppender
log4j.appender.file2.File=file2.log
log4j.appender.file2.layout=org.apache.log4j.PatternLayout
log4j.appender.file2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

例如,我只想在我的主要方法中使用“ DEFAULT_LOGGER”。所以我写道:

static Logger log = Logger.getLogger("DEFAULT_LOGGER");
log.fatal("Process Logger");

但是,当我执行main方法时,我将消息“ Process
Logger”打印到所有Appender(stdout,file和file2),但是我只想将其打印到file2。我该怎么做,或者更好地说出我做错了什么?

第二点是,当我第二次执行main方法时,它不会覆盖file和file2,而是在文本文件内添加一行。我该如何避免呢?


问题答案:

Log4j有一个叫做的东西additivity。默认情况下,它设置为true,这意味着您写入的每个日志不仅将由特定的记录器记录,而且还将由其祖先记录(在本例中为根记录器)。

要将其设置为false,请尝试以下操作:

log4j.additivity.DEFAULT_LOGGER = false

在此处了解更多信息。



 类似资料:
  • 我有一个情况,我有两个追加器,一个写到控制台,另一个写到文件。我想记录除一个类以外的所有调试级别的东西。对于这个类,我想要记录调试到控制台,错误到文件。 我发现这种过滤是通过类别标记完成的,但是我还没有设法将不同的级别拆分给特定类上的不同追加器。

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

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

  • 我不明白为什么log4j会用不同的格式附加两次。以前有人见过这个吗? 这是我的log4j。xml文件: 下面是一些示例输出: 编辑:当我将“myAppender”appender阈值更改为“ERROR”时,显示的第二条日志消息(以时间开始的消息,而不是“INFO”)仍在生成。是否有需要禁用的默认记录器?尽管指定的appender用于“ERROR”级别的消息,但似乎仍有一些东西在记录这些“INFO”

  • 我在代码中声明记录器如下: 我希望能够在运行时以编程方式更改日志记录器的日志级别。我曾尝试通过LogManager在存储库中迭代日志记录者,但它只将新的日志级别应用于代码中实例化的日志记录者。如果创建了新的记录器实例,则它不会使用新的日志级别。我的要求是,我的web应用程序中的日志级别需要通过管理GUI进行配置,并且这个新的日志级别需要应用于我代码中的所有记录器(不包括第三方库日志记录,例如JSF

  • 使用log4j,我可以将日志记录到调用此方法的不同文件: “解答”哦是的,我少了一个记录器: 我可以这样选择logger: