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

标签 java logging architecture slf4j logback

我正在使用 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/

相关文章:

c# - ApiController,Viewmodel和DTO的设计

java - 检测参数字符串的代码行

grails - 在Grails中的单独文件中记录log4j消息

javascript - log4js ConsoleAppender 初始化

java - 继续向类(class)提供信息

events - 事件驱动架构和事件结构

c# - 插件架构模式

java - 使用文件对象创建文件?

java - Apache Archiva 2.0 Jetty WebAppContext :Failed startup of context o. e.j.w.WebAppContext

java - 如何将 txt 文件添加到您的 android 项目中?