JAVA日志记录的最佳方法/性能是什么?字符串或StringBuilder或StringBuffer
问题是:我想改进我们应用程序中的日志记录系统 我们在云上运行多个服务(不相关) 这些服务都会在其日志中记录所有内容,例如:JAVA日志记录的最佳方法/性能是什么?字符串或StringBuilder或StringBuffer,java,logging,log4j,Java,Logging,Log4j,问题是:我想改进我们应用程序中的日志记录系统 我们在云上运行多个服务(不相关) 这些服务都会在其日志中记录所有内容,例如: public class class1 { protected Logger logger = Logger.getLogger(Service1 .class.getName()); public method1 (){ ... logger.info("....."); //It creates a new String ... l
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);
.
.
.
}
}
你觉得怎么样
我们用的是Log4j,我的英语不是很好。这种方法是为了避免声纳无法做到这一点:
logger.debug("..." + " " + someVariable + " " + otherVariable);
我希望您能理解我=)如果您能够使用log4j 2.x,您可以使用参数让库处理它:
logger.debug("... {} {}", someVariable, otherVariable);
有关更多信息,请参阅javadocs
请注意,即使您有一个绑定到1.x的依赖项,log4j团队也显式地更改了2.x的包结构,以避免冲突。您可以自由地同时使用这两个选项,而不必担心兼容性问题(只需确保您导入的是正确的
Logger
类)。所有建议的选项仍然会创建字符串。例如,“xx”
和“yy”
。我最喜欢的是使用String.format(“来自%s类的错误:%s”,“MyClass”,例如getMessage())
,因为它允许一次查看所有日志消息,并且是NPE免费的。您将重新发明轮子,并使用反模式修复反模式。我建议您使用某种面向方面的机制来记录日志,同时利用日志框架的格式驱动功能来标准化格式。你只会让事情变得更糟。@Kayaman这就是我问的原因,对吧?谢谢,这很有帮助。