【问题标题】:Filter log4j2 SYSTEM_ERR target logs on linux command line在 linux 命令行上过滤 log4j2 SYSTEM_ERR 目标日志
【发布时间】:2021-07-26 22:42:07
【问题描述】:

我在我的 Java 项目中使用 log4j2,并希望在 linux 控制台上过滤错误日志。

log4j2配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Properties>
    <Property name="pattern">[%d{yyyy-MM-dd HH:mm:ss.SSS}][%highlight{%-5level}][%t][%logger] %msg%n</Property>
  </Properties>
  <Appenders>
    <Console name="stdout" target="SYSTEM_OUT"> <!-- 1 -->
      <PatternLayout pattern="${pattern}"/>
      <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/> <!-- 3 -->
    </Console>
    <Console name="stderr" target="SYSTEM_ERR"> <!-- 2 -->
      <PatternLayout pattern="${pattern}"/>
      <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/> <!-- 3 -->
    </Console>
  </Appenders>
  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="stdout"/> <!-- 4 -->
      <AppenderRef ref="stderr"/> <!-- 4 -->
    </Root>
  </Loggers>
</Configuration>

(在这里找到:https://rmannibucau.metawerx.net/log4j2-error-log-event-on-stderr.html

当我通过命令行运行我的程序时

java -jar program.jar 2>&1 >/dev/null

stdout 被重定向到 /dev/null,而 stderr 被打印在屏幕上。 (好的)

奇怪的是,我的 LOGGER.error("...") 跟踪也被重定向到 /dev/null(这意味着它已登录 linux 标准输出)(NOK),同时在我的 Eclipse 控制台(OK)上显示为红色(错误)。

我是否遗漏了什么,或者为什么我的 log4j2 标准错误记录器没有记录到 linux 标准错误?

【问题讨论】:

  • 重定向是从右到左读取的,因此在您的情况下,stdout 将被重定向到 dev/null 和 stderr 到 stdout。要仅将 stderr 重定向到 dev null 使用java -jar program.jar 2&gt;/dev/null
  • 我想将 stdout 重定向到 /dev/null 并且只打印 stderr 但是程序本身应该打印每个日志(信息和更高版本)

标签: java linux logging command-line log4j2


【解决方案1】:

我的 logj42.xml 未包含在类路径中。这就是为什么所有日志消息的输出都到 linux 的标准输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2016-11-14
    • 2015-03-28
    • 2020-05-25
    • 2018-10-15
    • 2014-08-13
    • 2011-11-12
    相关资源
    最近更新 更多