我正在使用slf4j和logback为几个项目构建一个记录器,并且在记录器附带的功能之上我想向Logger添加更多方法:log.debug(String key,String [] params ,Throwable throwable)(同样的信息,警告和错误)。密钥将从资源文件中获取一个字符串,并使用String []中的参数填充它并记录它
我希望用户使用干净的slf4j,如果可能的话,不要被绑定到logback。
我正在考虑使用我的功能扩展logback并将slf4j的绑定写入扩展的新logback。
这是正确的方法吗?如果是这样,我如何延长回溯?
通过查看其他绑定,我了解到他们没有实现标记。是否有绑定到某些东西的例子?所以我可以用它作为“logback扩展”绑定的骨架?
答案 0 :(得分:1)
我同意SLF4J缺少报告异常的all-args-in-one方法,但我认为不需要其他类型(info,warn ......)。
您可以创建一个具有这些方法的实用程序类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);
}
}
}
答案 1 :(得分:1)
最终使用新接口扩展了org.slf4j.Logger,然后实现了该接口。 使用我的记录器的项目不需要更改其代码,以防止从logback切换。 当然,实现只是路由到slf4j实现,除了添加的方法。