以前一直不明白为什么在输出日志前必须使用:
if (log.isDebugEnabled())???
在看下面的解释之前,我先说明下,对于打印的信息没有字符拼接或者对象(说白了没有tostring的方法调用),如果打印的信息是固定字符串的话,就加上面的判断和不加其实意义是一样的(更说白了,就是节省log.debug(***)中***部分向字符串的装换。下面是一位网友写的,他说明了比较纤细,我摘录了给大家看看
log4j中isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled的封装
分类: Java语言2010-01-05 13:30 435人阅读 评论(0) 收藏 举报
log4j中log.isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled()作用
项目在应用log4j打印Debug,Info和Trace级别的log时需要加上对应的三个方法进行过滤,代码如下:
if (log.isDebugEnabled()) {
log.debug(" From: " + req.getFrom().toString() +
" To: " + req.getTo().toString() +
" CallId: " + req.getCallId() +
" msg:" + msg);
}
其作用是因为Debug,Info和Trace一般会打印比较详细的信息,而且打印的次数较多,如果我们不加log.isDebugEnabled()等
进行预先判断,当系统loglevel设置高于Debug或Info或Trace时,虽然系统不会答应出这些级别的日志,但是每次还是会拼接
参数字符串,影响系统的性能。
2.错误的优化方法
部分编码人员因为不了解机制,从代码复用性和简洁性而言定义如下函数来封装
private void debug(String msg) {
if (log.isDebugEnabled()) {
log.debug(msg);
}
}
其实这种封装方式是错误的,因为当系统中调用debug(msg)函数还是出现字符串的拼接。
分享到:
相关推荐
3. 封装Unity的Debug方法,如`Debug.Log`,在新的方法中添加条件判断,只有当`IsDebugEnabled`为true时,才调用原生的Debug方法输出信息。 4. 提供设置`IsDebugEnabled`状态的接口,允许在运行时动态切换调试开关。 ...
使用`isDebugEnabled()`方法判断当前Logger是否开启DEBUG级别,如果开启了,则调用`debug()`方法记录日志信息。 #### 五、总结 通过以上步骤,我们可以清晰地了解到如何使用Log4j进行日志记录。从安装配置到具体...
- 为了提高性能,Log4Net 提供了`IsDebugEnabled`、`IsInfoEnabled`等属性检查,只有当日志级别开启时才会执行日志记录操作,避免不必要的计算。 9. **线程安全**: - Log4Net 是线程安全的,可以在多线程环境中...
要使用Log4Net,首先需要从官方网站http://logging.apache.org/log4net/下载源代码。解压缩后,在Visual Studio .NET中打开src目录下的log4net.sln文件进行编译,生成log4net.dll库。之后,将这个dll文件引入你的...
假设我们希望程序中的日志消息既能输出到程序运行的控制台上,又能输出到指定的文件中,且控制台使用SimpleLayout布局,文件使用PatternLayout布局。以下是一个简单的配置示例: ``` # LOGGERS log4j.rootLogger=...
使用示例 // suppose NODE_DEBUG="app lib:func" var isDebugEnabled = require ( 'debug-flags' ) ; isDebugEnabled ( 'app' ) ; // => true isDebugEnabled ( 'app:something:nested' ) ; // => true ...
通过在代码中使用`if (logger.isDebugEnabled()) {...}`,可以在运行时避免不必要的日志计算,因为如果日志级别高于DEBUG,这些代码将不会执行。 五、日志滚动和归档 Log4j的DailyRollingFileAppender允许每天生成...
- **日志输出控制**:为了在运行时控制日志输出,log4net提供了布尔属性如`IsDebugEnabled`、`IsInfoEnabled`等,用于检查当前日志级别的启用状态。 2. **Repository**:Repository充当了log4net的容器,用于维护...
例如`isDebugEnabled`表示是否启用Debug级别的日志记录。 ##### 2.2 Repository(存储库) Repository用于存储Logger实例,并管理其配置信息。默认情况下,log4net使用一个名为`DefaultRepositorySelector`的类来...
- **为什么使用logger之前要判断日志输入级别?** 在调用`logger.debug`、`logger.info`等方法前,可以先通过`logger.isDebugEnabled()`、`logger.isInfoEnabled()`等方法来检查当前的日志级别是否允许输出该级别...
可以使用`log4net.Config.DOMConfigurator.Configure()`方法进行配置,并使用`log4net.Repository.Hierarchy.Logger.IsDebugEnabled`检查调试级别是否开启。 **七、总结** log4Net作为.NET平台的强大日志工具,其...
Log4j是一款广泛使用的日志记录工具,尤其在Java开发中极为常见。它允许开发者灵活地控制日志信息的输出级别、格式以及目的地,从而帮助调试、监控和维护应用程序。以下是对Log4j配置和使用的一些关键知识点的详细...
static bool isDebugEnabled() { return isDebugEnabled; } }; // 初始化调试开关 bool Logger::isDebugEnabled = false; ``` 在实际项目中,你可以进一步扩展这个类,比如添加文件日志功能,将日志写入文件;...
- 为了减少性能开销,可以在代码中使用`if (log.isDebugEnabled()) { log.debug(); }`的方式来判断是否输出debug级别的日志。 3. **环境适应性**: - 对于不同的环境(如开发环境、测试环境、生产环境)可以采用...
**1.1 Log4j是什么?** Log4j是Apache的一个开源项目,它提供了一种强大的日志记录功能,使得开发人员能够轻松地控制日志信息的输出目的地、格式以及级别。这包括但不限于将日志发送至控制台、文件系统、GUI组件、...
log.IsDebugEnabled) { SetConfig(); } log.Debug(Message); } private static void SetConfig() { object o = ConfigurationManager.GetSection("log4net"); log4net.Config.XmlConfigurator.Configure(o...