在 linux 命令行上过滤 log4j2 SYSTEM_ERR 目标日志

Filter log4j2 SYSTEM_ERR target logs on linux command line

我在我的 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 stdout)(NOK),同时在我的 eclipse 控制台上显示为红色(错误) (好的)。

我是不是遗漏了什么或者为什么我的 log4j2 stderr 记录器没有记录到 linux stderr?

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