[英]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 使用在所有文件中共享的 static 计数器。
日志应该看起来像
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")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.