gpt4 book ai didi

java - JAVA 日志记录的最佳方法/性能是什么?字符串或 StringBuilder 或 StringBuffer

转载 作者:行者123 更新时间:2023-11-29 04:21:55 25 4
gpt4 key购买 nike

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

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

这些服务每个都在他们的日志中记录所有内容,例如:

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 专家,我需要帮助才能知道最好的方法是什么?

我有一个想法,我开始了:

我正在考虑创建一个实用程序类来管理所有日志消息传递(我认为这种方法将与 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);

希望你能理解=)

最佳答案

如果你能够使用 log4j 2.x,你可以让库通过使用参数来处理它:

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

参见 Logger javadocs 获取更多信息。

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

关于java - JAVA 日志记录的最佳方法/性能是什么?字符串或 StringBuilder 或 StringBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48586887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com