我正在尝试使用apache commonn logging和log4j.xml文件作为配置文件来实现logger。
所以在实际的java代码中,我将日志写为
我正在使用appache常见日志记录
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
我正在记录诸如的信息。我正在为每个类创建一个日志实例
private static Log logger = LogFactory.getLog( MyClass.class );
private static final String name ="SAM";
logger.info("name= "+name);
所以现在我的问题是实现这样的记录器会造成性能问题吗?
是否需要检查日志
if ( log.isInfoEnabled( ) )
{
log.info( "Info message" );
}
混淆主要是因为在他们提到的Apache常见日志记录中这样做而在log4j中他们提到它是不必要的。
每次我们写入文件登录?
萨姆
答案 0 :(得分:2)
是和否,记录总是会降低您的性能,但某些功能比其他功能更昂贵,例如获取调用类/方法 - 名称使用反射并且非常慢。但正常的logfuntion不是那么昂贵如果你在调用日志记录函数中没有昂贵的语句(这将在每次检查日志级别之前进行评估。在这种情况下你可以使用.isLevelEnabled
检查以防止评估)。记录到控制台的输出也比记录到文件需要更长的时间。您可以通过谷歌搜索和log4j的FAQ /手册找到更多相关信息。
您不必须在登录前检查日志级别。这是在日志功能本身内完成的。因此,通用日志方法中每个级别或级别参数的方法都不同。
答案 1 :(得分:2)
日志记录的一个很大的潜在性能问题通常是你有一些传递给log方法的东西,转换成字符串是非常昂贵的。这就是为什么你有像isInfoEnabled()
这样的方法,这样代码可以避免从参数创建消息字符串(否则info()
方法中的检查为时已晚,转换已经完成)。如果传递给日志方法的对象是字符串或者不是很复杂,那么is*Enabled()
方法将没有那么有用。
SLF4J值得一试。它不依赖于类加载器技巧(这是公共日志记录受到谴责的一个重要部分),并且它有一种不同的创建日志消息的方式,这种方式在创建消息字符串时会延迟,以便在记录方法。
答案 2 :(得分:1)
有一种更好的方法可以做到这一切。无需添加ifDebugEnabled
等方法的混乱,您就可以获得非常出色的性能。查看类似Logback(或SLF4J)的内容。这是关于您想要什么样的API的优秀文档。请注意,Log4J和Commons-Logging没有这样的API。使用Parameterized Logging。