使用与 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")
.
我想实现类似的目标
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")
.