扩展logback并允许客户端使用干净的slf4j

时间:2013-07-30 07:53:50

标签: java logging architecture slf4j logback

我正在使用slf4j和logback为几个项目构建一个记录器,并且在记录器附带的功能之上我想向Logger添加更多方法:log.debug(String key,String [] params ,Throwable throwable)(同样的信息,警告和错误)。密钥将从资源文件中获取一个字符串,并使用String []中的参数填充它并记录它 我希望用户使用干净的slf4j,如果可能的话,不要被绑定到logback。 我正在考虑使用我的功能扩展logback并将slf4j的绑定写入扩展的新logback。
这是正确的方法吗?如果是这样,我如何延长回溯? 通过查看其他绑定,我了解到他们没有实现标记。是否有绑定到某些东西的例子?所以我可以用它作为“logback扩展”绑定的骨架?

2 个答案:

答案 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实现,除了添加的方法。