我在我的应用程序中使用Log4J进行日志记录.以前我使用调试调用如:
选项1:
logger.debug("some debug text");
Run Code Online (Sandbox Code Playgroud)
但有些链接表明最好先检查一下isDebugEnabled(),例如:
选项2:
boolean debugEnabled = logger.isDebugEnabled();
if (debugEnabled) {
logger.debug("some debug text");
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是" 选项2能否以任何方式提高性能? ".
因为在任何情况下Log4J框架都对debugEnabled进行相同的检查.对于选项2,如果我们在单个方法或类中使用多个调试语句可能是有益的,其中框架不需要isDebugEnabled()多次调用方法(在每次调用时); 在这种情况下,它只调用isDebugEnabled()一次方法,如果Log4J配置为调试级别,那么实际上它调用isDebugEnabled()方法两次:
我不认为如果我们logger.debug()在方法或类中编写多个语句并debug()根据选项1 调用方法,那么与选项2相比,它是Log4J框架的开销.因为它isDebugEnabled()是一个非常小的方法(就代码而言),它可能是内联的好人选.
说服别人评论他们的代码有什么好的理由?
我注意到许多程序员喜欢编写代码的速度,而没有评论而是为自己和其他人留下一些文档.当我试图说服他们时,我会听到一半被烘焙的东西,比如"方法/班级名称应该说它做什么"等等.你会怎么说他们改变主意?
如果您反对评论,请发表评论.对于试图说服人们评论代码的人来说,这应该是一种资源,而不是其他.:-)
每个文件的代码行,每个类的方法,圈复杂度等.开发人员抵制并解决大多数(如果不是全部的话)!有一篇很好的Joel文章(没时间找到它).
您建议使用哪些代码指标来自动识别"糟糕的代码"?
什么可以说服大多数(你不能说服我们所有人一些糟糕的指标!:O))开发人员认为这个代码是"废话".
只有可自动测量的指标才算重要!
我需要类似于String.format(...)方法的东西,但是有懒惰的评估.
这个lazyFormat方法应该返回一些对象,其toString()方法将评估格式模式.
我怀疑有人已经这样做了.这可以在任何图书馆中找到吗?
我想替换它(logger是log4j实例):
if(logger.isDebugEnabled() ) {
logger.debug(String.format("some texts %s with patterns %s", object1, object2));
}
Run Code Online (Sandbox Code Playgroud)
有了这个:
logger.debug(lazyFormat("some texts %s with patterns %s", object1, object2));
Run Code Online (Sandbox Code Playgroud)
只有在启用调试日志记录时,我才需要lazyFormat来格式化字符串.
我们最近一直在分析我们的代码,我们遇到了一些恼人的热点.他们是在形式
assert(a == b, a + " is not equal to " + b)
Run Code Online (Sandbox Code Playgroud)
因为其中一些断言可能在代码中被称为字符串concat开始加起来的次数很多.assert定义为:
def assert(assumption : Boolean, message : Any) = ....
Run Code Online (Sandbox Code Playgroud)
为什么不定义为:
def assert(assumption : Boolean, message : => Any) = ....
Run Code Online (Sandbox Code Playgroud)
这样它会懒洋洋地评估.鉴于它没有定义,是否有一种内联方式调用断言与一个懒惰评估的消息参数?
谢谢
您对log4j或类似库中的日志类别使用了哪些约定?通常您将类名称视为类别,但是您是否使用过其他系统?
日志级别怎么样?你使用什么级别,在哪种情况下?
更新:正如你们中的一些人回答的那样,没有"正确"的答案.我只是在寻找人们使用的不同惯例作为灵感来源.
我做了一些搜索,寻找有关如何使用Spring Framework进行日志记录的信息.
我们目前有一个除了system.out语句之外没有登录的应用程序(非常糟糕的方式).
我想做的是添加日志记录,但也希望能够在运行时控制日志记录,比如说JMX.
我们正在使用Rad 7.0/WebSphere 6.1
我很有兴趣找出实现这个目标的最佳方法(我想可能有几个).
更新:关于以下Spring AOP Logging的想法不错的理想与否.这是关于此处发布的有关日志记录的问题: 条件日志记录.这是改善了事情还是仅仅在伐木方面变得更加困难?
有庞大的网络应用程序.当用户与Web应用程序交互时,大多数函数只被调用一次,因此没有性能问题.我写了一个新的"从文件导入"方法,该方法从系统调用多次不同的方法.我不想修改其他人的方法也不想禁用log4j.从文件导入将很少使用,并被视为加载项,而不是主要功能.由于这个原因,我遇到了性能问题.在分析后,我发现log4j使用了近22%的时间.
是否可以以编程方式禁用log4j,以便调用一种方法和方法?
java ×6
logging ×4
log4j ×3
profiling ×2
api ×1
assert ×1
automation ×1
comments ×1
javadoc ×1
metrics ×1
performance ×1
scala ×1
spring ×1
testing ×1
unit-testing ×1