java - 如何减少每个类中的 Logger.getLogger(...) 样板

标签 java logging refactoring code-duplication

要在 Java 中使用记录器,现在我使用如下代码:

Logger logger = Logger.getLogger("MyLog");
FileHandler fh;

try {

  // This block configure the logger with handler and formatter
  fh = new FileHandler("c:\\MyLogFile.log", true);
  logger.addHandler(fh);
  logger.setLevel(Level.ALL);
  SimpleFormatter formatter = new SimpleFormatter();
  fh.setFormatter(formatter);

  // the following statement is used to log any messages   
  logger.log(Level.WARNING,"My first log");

} catch (SecurityException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}

但是为每个类文件添加这个总是让我有些不安:

Logger l = Logger.getLogger("MyLog");

我怎样才能重构出这种重复?

最佳答案

Is there a better recommended way for logging, which could be less intrusive/less repeative but offers the same or even better functions?

您可以将 l 设为类的 private staticprivate 字段,但除此之外没有明显的改进。

(有一些不好的想法,比如 public static “全局”变量,或者在“通用”基类中的 private static 声明。但这些都是不好的想法……不是更好的方法。)

但是,嘿,声明本地记录器对象的一行代码很难“侵入”……是吗?

关于java - 如何减少每个类中的 Logger.getLogger(...) 样板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38176285/

相关文章:

JavaFX线程与Java线程同步

java - 有没有办法直接在 ENUM 上声明 @Convert

java - 面向对象编程,getter 不是从另一个类获取私有(private)变量

mysql - 将所有查询结果记录到 MySQL 中

c# - Roslyn - 如何在 DiagnosticAnalyzer 类中获取变量的所有引用?

refactoring - 红色、绿色、重构 : refactor after each test case, 还是充实整个测试套件?

java - 应为元素类型 "column"声明属性 "properties"

hibernate - 如何在 JHipster 中更改 hibernate 日志记录级别?

php - CloudFlare 并通过 PHP 记录访问者 IP 地址

language-agnostic - 解释重构