这就是事情:我想改进我们的应用程序中的记录系统。
我们有多项服务在云上运行(不相关)。
每个服务都记录日志中的所有内容,例如:
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);
我希望你能理解我=)
答案 0 :(得分:3)
如果你能够使用log4j 2.x,你可以让图书馆使用参数来处理它:
logger.debug("... {} {}", someVariable, otherVariable);
有关详情,请参阅Logger javadocs。
请注意,即使您将依赖项绑定到1.x,log4j团队也明确更改了2.x的包结构,以避免冲突。您可以自由地使用它们而不用担心兼容性问题(只需确保导入正确的Logger
类)。