当前位置: 首页 > 面试题库 >

log4j与System.out.println-记录器的优势?

冯胤
2023-03-14
问题内容

我在项目中第一次使用log4j。一位程序员告诉我,使用System.out.println被认为是一种不好的风格,而log4j类似于当今用于记录事务的标准。

我们进行了大量的JUnit测试- System.out结果很难测试。

因此,我开始将log4j用于控制台控制器类,该类仅用于处理命令行参数。

// log4j logger config 
org.apache.log4j.BasicConfigurator.configure();
Logger logger = LoggerFactory.getLogger(Console.class);
Category cat = Category.getRoot();

似乎可以工作:

logger.debug("String");

产生:

1 [main] DEBUG project.prototype.controller.Console  - String

我对此有 两个 问题:

  1. 根据我的基本理解,使用此记录器应该为我提供一个方便的选项,以便使用时间戳编写日志文件-而不是向控制台发送垃圾邮件-如果在记录器中启用了调试模式?
  2. 为什么System.out.println更难测试?我搜索了stackoverflow,发现了一个测试方法。所以我想知道使用log4j到底能带来什么样的优势。

问题答案:

记录器可以定义已记录消息的重要性的不同级别,并可以将不同的接收器用于输出-控制台,文件等。

另外,使用记录器时仅启用或禁用某些类型的消息也很容易-例如,您不想在生产中看到所有调试消息。

我认为使用记录器在单元测试中没有任何显着优势,但是无论如何我还是更喜欢它。在单元测试中,断言通常是我最关心的问题。

顺便说一句,您应该真正考虑使用Commons
Logging
或SLF4J之类的东西作为日志框架外观-
将代码绑定到特定的日志框架是不好的样式。通用日志记录和SLF4J使您可以轻松地切换日志记录框架。



 类似资料:
  • 问题内容: 我正在使用PMD插件进行日食,使用说明时出现错误: 使用System。(out | err).print,请考虑使用记录器。 我的问题是-什么是记录仪?如何用于打印到屏幕上?为什么会更好? 问题答案: 请参阅log4j的简短介绍。 问题在于用于打印调试或诊断信息。这是一种不好的做法,因为您无法轻松更改日志级别,关闭日志级别,对其进行自定义等。 但是,如果您合法地用于向用户打印信息,则可

  • 我计划用log4j one替换旧的记录器。我需要创建继承Logger的新类LocalLogger,而不是直接使用Logger。这样做的原因-我需要旧记录器中可用的新日志方法名称。 我有log4j记录器: 如何以与Logger相同的方式实现LocalLogger的功能? 如何将c类传递给超级本地记录器? LocalLogger的草稿:

  • 我们使用ivy来管理一个多项目java应用程序,最近当我们进行构建时,这个错误开始出现。这是什么原因?

  • 我正在用Java编写一个REST服务(在Tomcat 9上使用JAX-RS标准),我想向我的程序添加日志,以便在调用时跟踪他的工作。 因此,我使用Log4j(版本1.2.17)来编写日志,我想为在REST服务上运行的每个服务编写不同的日志文件,但我只需要为整个应用程序使用一个Log4j属性 所以我想在我的日志文件夹中保存这种日志 所以我把它写成Log4j(restServiceLogger.pro

  • 使用log4j,我可以将日志记录到调用此方法的不同文件: “解答”哦是的,我少了一个记录器: 我可以这样选择logger:

  • 在我部署在WebSphere 8.5上的java应用程序中,我遇到了这个错误,尽管我的maven依赖项低于log4j。 我确实运行了一个,我可以看到它正以 的形式被拉进来,这是我期望在树结果中看到的,这样我就可以确认它在类路径中。有什么想法吗?