这是一个有趣的问题,它也引入了新的问题。您可以拥有一个单词列表,这些单词可以升级或降低该消息的日志级别。
解决这个问题的一种方法是制作自己的记录器类,它封装了您的通用日志框架,镜像每个日志方法。建立的第一个版本将简单地调用 ie 后面的日志框架。
public class MyLogger {
public void info(String message) { Logger.info(message); }
public void debug(String message) { Logger.debug(message); }
// And so on
}
假设您有一个单词表,如果包含在消息中,您可以引入一些单词来触发另一个级别。
public class MyLogger {
private final List<String> warnTriggerMessages;
public MyLogger(List<String> warnTrigerMessages) {
this.warnTriggerMessages = warnTrigerMessages;
}
public void info(String message) {
if (warnTriggerMessages.stream().anyMatch(trigger => message.contains(trigger))) {
Logger.warn(message);
} else {
Logger.info(message);
}
}
// And so on
}
这只是一个非常简单的示例,但可以使用更通用的方法进行扩展或与 strategyPattern 交织在一起,这将根据“建议的”日志级别和消息解析日志记录方法,其中消息可能导致策略选择另一个日志级别,而不是建议的日志级别。