什么是JAVA Logging的最佳方法/性能? String或StringBuilder或StringBuffer

时间:2018-02-02 16:25:27

标签: java logging log4j

这就是事情:我想改进我们的应用程序中的记录系统。

我们有多项服务在云上运行(不相关)。

每个服务都记录日志中的所有内容,例如:

public class class1 {

protected Logger logger = 
Logger.getLogger(Service1 .class.getName());


  public method1 (){

   ...
   logger.info("....."); //It creates a new String
   ...
   logger.debug("..."); //It creates a new String
   .
   .
   .
  }

  public method2 (){

   ...
   logger.info("....."); //It creates a new String
   ...
   logger.debug("..."); //It creates a new String
   .
   .
   .
  }
}

我想改进这些代码并标准化日志系统,但我不是Java专家,我需要帮助才能知道最佳方法是什么?

我有一个想法,我走了:

我正在考虑创建一个管理所有Logging Messaging的实用程序类(我认为这种方法将使用StringBuffer进行同步)或者在每个方法上创建一个StringBuilder并重用它,如下所示:

public class class1 {

  protected Logger logger = 
  Logger.getLogger(Service1 .class.getName());


  public method1 (){
    StringBuilder msg = new StringBuilder();

    msg.append(" ...").append(" xx ").append(" yy "); //new message
    logger.info(msg); 
    ...
    msg.setLength(0); //Reset
    msg.append(" ...").append(" xx ").append(" yy "); //new message
    logger.debug("..."); 
    .
    .
    .
  }

  public method2 (){

    StringBuilder msg = new StringBuilder();

    msg.append(" ...").append(" xx ").append(" yy "); //new message 
    reusing builder
    logger.info(msg); 
    ...
    msg.setLength(0); //Reset
    msg.append(" ...").append(" xx ").append(" yy "); //new message 
    reusing builder
    logger.debug(msg);
    .
    .
    .
  }
}

您怎么看?

PD:我们正在使用Log4j,我的英语并不完美。这种方法是为了避免Sonar无法做到这一点:

logger.debug("..." + " " + someVariable + " " + otherVariable);

我希望你能理解我=)

1 个答案:

答案 0 :(得分:3)

如果你能够使用log4j 2.x,你可以让图书馆使用参数来处理它:

logger.debug("... {} {}", someVariable, otherVariable);

有关详情,请参阅Logger javadocs。

请注意,即使您将依赖项绑定到1.x,log4j团队也明确更改了2.x的包结构,以避免冲突。您可以自由地使用它们而不用担心兼容性问题(只需确保导入正确的Logger类)。