我正在使用 slf4j 和 logback 为多个项目构建一个记录器,除了记录器附带的功能之外,我想向记录器添加更多方法: log.debug(String key, String[] params 、 Throwable throwable)(对于信息、警告和错误也是如此)。该 key 将从资源文件中获取一个字符串,并用 String[] 中的参数填充它并记录它。
我希望用户使用干净的 slf4j,并且如果可能的话,不要绑定(bind)到 logback。
我正在考虑用我的功能扩展 logback,并为 slf4j 编写一个绑定(bind)到我扩展的新 logback。
这是正确的做法吗?如果是这样,我该如何扩展 logback?
通过查看其他绑定(bind),我了解到它们没有实现标记。有绑定(bind)到某物的例子吗?所以我可以使用它作为“logback 扩展”绑定(bind)的骨架?
最佳答案
我同意 SLF4J 缺乏报告异常的全参数合一方法,但我认为其他类型(信息、警告...)不需要它。
您可以创建一个具有以下方法的实用程序类LoggerWrapper
:
class LoggerWrapper extends Logger {
private Logger logger;
private ResourceBundle bundle;
public LoggerWrapper(Logger logger, ResourceBundle bundle) {
this.logger = logger;
this.bundle = bundle;
}
public void error(final String key, Object[] params, Throwable cause) {
logger.error(String.format(bundle.getString(key), params), cause);
}
...
}
使用示例:
class Something {
private static LoggerWrapper logger = new LoggerWrapper(
Logger.getLog(Something.class),
ResourceBundle.getBundle("ErrorMessages"));
...
private void doSomething(Object params...) {
try {
// Do something that could fail.
}
catch (SomeException e) {
logger.error("error.something.failed", params, e);
}
}
}
关于java - 扩展 logback 并允许客户端使用干净的 slf4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17941282/