Log4j 单例包装器的好处?

2024-01-05

我最近继承了一些Java代码,需要将其集成到我正在开发的项目中。我的项目是一个处理和转换 XML 消息的服务代理。在查看新代码时,我发现了以下日志记录类:

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class MyLogger {

    private static MyLogger instance = null;
    protected final static Logger log = Logger.getLogger(MyLogger.class);

    private MyLogger() {
        super();
    }

    public static MyLogger getInstance(){
        if(instance  == null){
            instance  = new MyLogger();
            BasicConfigurator.configure();
            log.setLevel(Level.ALL);
        }
        return instance;
    }

    public void info(String myclass, String msg) {
        log.info("[" + myclass + "] " + msg);

    }

    public void error(String myclass, String msg, Exception ce) {               
        log.error("[" + myclass + "] " + msg, ce);      
    }

    public void warning(String myclass, String msg) {
        log.warn("[" + myclass + "] " + msg);
    }    
}

这个类基本上用(另一个)单例包装了 log4j。我需要集成的类中的所有日志记录如下所示:

public class MyClass {
   private final static MyLogger log = MyLogger.getInstance();
   private final static String myclass = MyClass.class.getName();

   ...

   log.info(myclass, "Information message...");   
}

我没有看到使用额外的类进行日志记录有任何明显的好处,因此我正在考虑重构此代码以删除 MyLogger 类并按以下方式登录:

import org.apache.log4j.Logger;

public class MyClass {
   private static Logger log = Logger.getLogger(MyClass.class);

   ...

   log.info("Information Message...");     
}

这将使整个项目的日志记录机制保持一致。在执行此操作之前,我想知道使用单例类包装 Log4j 是否有任何我可能缺少的好处。谢谢!

EDIT:感谢大家提供的有用答案——我从每个人身上都获得了一些新的见解。接受 Nathan Hughes 的回答,指出通过保持类完整而丢失的功能 - 我一直认为单独保留单例的最大缺点只是代码膨胀。我会把班级搞得一团糟。


摆脱它。使用这个怪物意味着通过它的所有日志记录都将使用相同的记录器(MyLogger)和方法列出(这就是为什么其方法的参数包括正在记录的事物的类)。这意味着您不仅必须向每个记录器调用添加任何类、方法和行号信息,而且无法像使用典型的 log4j 方法(将类作为记录器)那样对不同包的日志级别进行任何过滤。

这东西就是个垃圾,没有它你会过得更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Log4j 单例包装器的好处? 的相关文章

随机推荐

  • 如何限制 while 循环中的项目

    这是我的项目中的 while 循环 div class index a href img width 200 height 171 alt src a div
  • jQuery 多次点击事件

    我被迫使用从外部服务器加载的脚本 该脚本基本上添加了一个元素 div class myClass 并绑定一个click的方法 事情是 在click与元素关联的函数 它们有一个return false声明在最后 我也有自己的脚本 我正在尝试添
  • 如何在 OSX 上卸载 pip?

    我运行了以下命令 easy install pip sudo pip install setuptools no use wheel upgrade 如何反转这两个命令以使我的 python 在 OSX 中恢复到其原始状态 删除 pip 作
  • R Shiny:数据表行的鼠标悬停文本

    有没有办法在将鼠标悬停在数据表显示中的行 记录 上时显示鼠标悬停文本 在 StackOverflow 上解决了一些类似的问题后 我发现了 2 个示例代码 一个显示列单元格的悬停文本 另一个在鼠标悬停时突出显示整行 显示列单元格悬停文本的示例
  • 示例 XSD 失败并显示“错误:未找到元素 X 的声明”

    尽管我是 xml 解析领域的新手 但我能够xsd创建有效的c 并成功编译和链接 但编译器优化 了实例化 所以 从第一步开始 我尝试你好世界CodeSynthesis 中的 xml 示例 http www codesynthesis com
  • 如何查看有关 Firebase JavaScript 客户端正在执行的操作的更多详细信息?

    我想更深入地了解 Firebase JavaScript 客户端库正在做什么 我正在使用 Firebase 开发一个 JavaScript 应用程序 该应用程序必须处理很多复杂性 例如 它必须处理网络中断和间歇性高延迟期 客户端库正在处理这
  • 如何在 Python 上使用 PuLP GLPK 为混合整数线性规划 (MILP) 的决策变量编写 IF 条件?

    我正在尝试使用 PuLP 上的混合整数线性规划和 Python 上的 GLPK 求解器来解决优化问题 到目前为止 我已经成功解决了带有约束的基本优化问题 例如 prob LpProblem MILP LpMinimize x1 LpVari
  • PHP 对象运算符优先级 (->)

    我写了一些代码 class a public b f gt c a new a b b echo a gt b f 当我使用 cli 时 它输出 c 但是当我使用 apache http 服务器时 抛出错误Illegal string of
  • 无需 JavaScript 即可模拟 bootstrap side popover

    我有一个仅支持现代浏览器的网站 我喜欢 bootstrap popover 的美感 但真的不喜欢它如何依赖 jquery 小部件和 javascript 来定位箭头 我理解为什么它曾经是必要的 但现在确实不应该了 我想看看我是否能得到类似的
  • 在 Dart 中如何判断 DOM 何时准备就绪?

    我想在页面准备好后获取有关某些 DOM 元素的一些信息 但我还没有弄清楚如何判断这是什么时候 我尝试过使用document on contentLoaded and document on readyStateChange 但似乎都不起作用
  • 为不同的存储库设置不同的配置[重复]

    这个问题在这里已经有答案了 我想知道如何更改命令的内容git config list 我将从中提取 分叉一个存储库GitHub https github com 我将在我的 Windows Linux 和 Mac 工作站上配置此类存储库 如
  • 在 MATLAB 中计算函数的反函数

    如何在 MATLAB 中计算函数的反函数 假设你想计算 f x e x 的倒数 代码是什么 如果分析方法失败 尽可能首选 请使用数值方法 给定 y 并猜测 x0 的逆 x fzero x f x y x0 或者当 x 的范围已知在 xmin
  • Android:检测活动何时返回到上一个活动

    我有一个带有 listView 的活动 A 用户单击启动活动 B 的任何项目 根据用户在活动 B 中执行的操作 可能会更改活动 A 上的 listView 所以我的问题是 当用户从活动 B 返回到活动 A 时 如何告诉活动 A 它已恢复 我
  • 数据列值不会更改为浮点型

    我有一个数据框 df Name Stage Description 0 sri 1 sri is one of the good singer in this two 1 nan 2 thanks for reading 2 ram 1 r
  • 找不到 JupyterLab 应用程序资产

    我刚刚在我的 MacBook 上使用 pip 下载了 jupyter lab 当我在终端上运行 jupyter lab 时 浏览器打开并出现以下错误 JupyterLab 错误 JupyterLab 应用程序资产未在以下位置找到 选择 自制
  • Bootstrap 中的固定宽度表格列

    我正在使用 Bootstrap 3 作为后端应用程序 该应用程序在表中显示数据 每行末尾有一个删除按钮 有时还有编辑按钮 我对具有删除按钮的列使用 col md 1 而在其他列上使用 col md x 的变体 效果很好 让我烦恼的一件事是
  • 如何在使用 iText 创建的 PDF 中显示阿拉伯语

    我需要您的帮助来显示阿拉伯语内容并在我尝试创建的 PDF 示例中从右向左开始书写 这是示例代码 public static void main String args throws IOException try BaseFont Aria
  • 如何在 Node.JS 中为 MSSQL 创建准备好的语句?

    我需要将 Javascript 中定义的字符串插入到 SQL 表中 这是我到目前为止所拥有的 JavaScript var message It s a great day today post www server com message
  • 查找有向图中具有特定成本的所有路径

    假设我们有有向加权图 我们的任务是找到两个顶点 源和目的地 之间的所有路径 其成本小于或等于 我认为可以通过修改Dijkstra算法来完成 但我不知道如何实现这样的事情 谢谢你的帮助 您可以使用递归回溯来解决这个问题 在以下情况下终止递归
  • Log4j 单例包装器的好处?

    我最近继承了一些Java代码 需要将其集成到我正在开发的项目中 我的项目是一个处理和转换 XML 消息的服务代理 在查看新代码时 我发现了以下日志记录类 import org apache log4j BasicConfigurator i