【发布时间】:2018-04-05 00:24:11
【问题描述】:
现在我有一个使用标准 java.util.logging 包和 SimpleFormatter 写入日志的应用程序。我想知道是否有办法将某种“上下文”字段添加到 every 日志语句。
我想要的是这样的。假设我有一个俄罗斯方块游戏,它一直在记录移动,我希望它在每个日志语句上写下当前分数:
package org.tester;
import java.util.logging.Logger;
public class Tetris implements HighScoreGame {
static Logger logger = Logger.getLogger("org.tester.Tetris");
int score;
void horizontalMove(Move move) {
logger.info("Going sideways: " + move.direction);
moveTarget();
}
void verticalMove() {
logger.info("Falling...");
if(landed()) {
updateScore();
logger.info("Done falling");
} else {
logger.info("Falling again in 5s")
}
}
}
我可以将字段附加到消息中。
logger.info("Score:" + score + " Falling...");
我不想这样做,因为我必须检查和编辑每条日志语句,而且真正的应用程序相当大。它还会阻止我使用格式化程序配置日志条目。
我想我可以扩展 SimpleFormatter 和 Logger,但似乎应该已经存在类似的东西了。
我也意识到 JUL 可能过于原始而无法满足我的需求,因此切换到另一个日志框架(如 Log4j2)可能是正确的解决方案。特别是 Log4j 有 Mapped Diagnostic Contexts,这可能是我需要的,除了它是每个线程而不是每个记录器。
这里最好的方法是什么?
【问题讨论】: