使用与 slf4j 绑定的 log4j2 记录多条消息

logging multiple messages with log4j2 binded with slf4j

我想实现类似的目标

Logger logger = LoggerFactory.getLogger(MyClassname.class);
logger.info("message1", "message2");

日志应该类似于

message1 "some other info coming from log4j2 pattern" message2 

目前我正在使用模式布局来获取所需格式的日志,但无法找到有助于满足给定要求的方法。

编辑: 添加一个小 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
​
    <!-- Logging Properties -->
    <Properties>
        <Property name="LOG_PATTERN"> %sn | %d{yyyy-MM-dd HH:mm:ss}{GMT+0} | %d{yyyy-MM-dd HH:mm:ss} | %p | %m%n </Property>
<!--        <Property name="APP_LOG_ROOT">/Users/<User_name>/Documents/Logs</Property>-->
    </Properties>

    <Appenders>
        <RollingFile name="debugLog" fileName="app-debug.log"
                     filePattern="app-debug-%d{yyyy-MM-dd}-%i.log">
            <LevelRangeFilter minLevel="ERROR" maxLevel="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="10MB" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>
​
    <Loggers>
​
        <Logger name="com.example" additivity="false" level="debug">
            <AppenderRef ref="debugLog" />
        </Logger>
    </Loggers>
​
</Configuration>

我们想给每个日志日志行一个 ID,而不是使用 %sn 我们想创建我们自己的 ID。我正在记录多个文件,%sn 使用所有文件共享的静态计数器。

日志应该类似于

line-0 | 2022-03-30 05:00:13 | 2022-03-30 10:30:13| DEBUG | A Sample Debug Message

更新: 这似乎是 SLF4J MDC(映射诊断上下文)(或直接 Log4j ThreadContext)的情况。

Java代码:

MDC.put("ownId", "line-0" /* computeYourOwnIdHere() */);
logger.debug("A Sample Debug Message");

配置模式:

<Property name="LOG_PATTERN"> %X{ownId} | %d{yyyy-MM-dd HH:mm:ss}{GMT+0} | %d{yyyy-MM-dd HH:mm:ss} | %p | %m%n </Property>

上一个回答:

logger.info("message1", "message2"); 只是一个 API 来构建格式化的日志消息。由于 "message1" 不包含参数占位符 {},因此 "message2" 字符串被简单地丢弃。您要在日志消息中插入哪些具体的“来自 log4j2 模式的其他信息”?您将其放在消息中间的要求非常不寻常,暂且不考虑日志分析工具如何处理此类日志的问题。 如果 "some other info coming from log4j2 pattern" message1 message2 就足够了,只需在末尾使用模式 "... %m" 并调用 log.info("message1 {}","message2").