我有一个Spring应用程序,它使用logback作为应用程序日志。现在,我增加了对logz.io的支持,将日志从多台机器集中到一个地方。问题是我不知道哪个日志是从哪台机器来的。
在应用程序数据库中,对于正在运行应用程序的每台计算机,我都有一个唯一的令牌。我的想法是将这个标记值预先附加到每个日志消息中,这样我就可以区分哪个客户端正在发送哪个日志。
我可以通过扩展JpaRepository的存储库中的方法访问令牌值。登录配置是通过logback.xml完成的
编辑:每个客户端使用自己的H2数据库存储值。
我现在有一条消息的示例:
2020-03-26 07:58:13,702 [scheduling-1] INFO n.g.service.ScheduledBotService - Test message
将是:
UniqueToken123 2020-03-26 07:58:13,702 [scheduling-1] INFO n.g.service.ScheduledBotService - Test message
发布于 2020-03-26 09:22:42
我尝试了线程上下文在log4j2中,它似乎对我有用。
测试代码
public class AppTest {
private Logger logger = LogManager.getLogger(AppTest.class);
@Test
public void testMaxFromIntegerList(){
String uniqueToken = getTokenFromJpa();
ThreadContext.put("uniqueToken", uniqueToken);
logger.info("Message Set uniqueToken");
//remove after using
ThreadContext.remove("uniqueToken");
logger.info("Message Clear uniqueToken");
}
// dummy code.
private String getTokenFromJpa() {
return "UniqueToken123";
}
}Log4j2 Config.
请注意,在PatternLayout中,使用%X{ key }包含指定的键。
appender.rolling.layout.pattern = %X{uniqueToken} %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%nlogFile中的内容。
UniqueToken123 2020-03-26 18:18:56 INFO AppTest:30 - Message Set uniqueToken
2020-03-26 18:18:56 INFO AppTest:33 - Message Clear uniqueToken您可以从这里获得更多关于线程上下文的信息。
希望能帮上忙。
https://stackoverflow.com/questions/60862492
复制相似问题