log4j中isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled的封装

1. 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.正确的优化方法

建议采用AOP来封装

log4j中isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled的封装

时间: 2024-11-10 14:38:11

log4j中isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled的封装的相关文章

log4j中的MDC和NDC

NDC和MDC NDC(Nested Diagnostic Context)和MDC(Mapped Diagnostic Context)是log4j种非常有用的两个类,它们用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息. NDC采用了一个类似栈的机制来push和pop上下文信息,每一个线程都独立地储存上下文信息.比如说一个servlet就可以针对每一个request创建对应的NDC,储存客户端地址等等信息. 当使用的时候,我们要尽可能

log4j中Logger.getLogger与LogFactory.getLog的区别

Logger来自log4j自己的包.如果用Logger.getLogger,需要一个log4j的jar包,用此方式你只能依靠log4j; LogFactory来自common-logging包.如果用LogFactory.getLog,你可以用任何实现了通用日志接口的日志记录器替换log4j,而程序不受影响. apache的common-logging包是通用日志接口,通过这个中间层,你可以随便指定到底用哪个日志系统.增加系统的灵活性.若log4j它不存在, commons-logging 会另

LOG4J中日志级别的使用

<logger name="demo-log" additivity="false"> <level value="${log.level}" /> <appender-ref ref="LOG-FILE" /> </logger> LOG4J中分为OFF.FATAL.ERROR.WARN.INFO.DEBUG.TRACE.ALL或者您定义的级别.Log4j建议仅仅使用四个级别.

log4j中怎样将信息写入到不同的日志文件

log4j中怎样将信息写入到不同的日志文件 有没有想过为什么我们用:Logger logger = Logger.getLogger(ABC.class) ;来得到 logger? 不想只看人家的 demo, demo 毕竟是 Hello World 级别的简单入门样例,我们需要知道 API 是如何描述它们的. Logger.getLogger() 除非用类当参数外还有用字符串当参数的,意思就是说“你可以给你的 Logger 取任意的名字,不是非要使用类名”. 上面这句话是说你可以在log4j.

log4j中日志输出文件指定相对路径的方法

我想大多数使用Log4j输出日志到文件系统的朋友可能都碰到过这个问题吧. 那就是在log4j的配置文件中无法指定相对路径,比如如下的配置就会有问题: log4j.appender.E = org.apache.log4j.RollingFileAppender log4j.appender.E.File = ../log/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.append

logcat 提示 Unable to open log device &#39;/dev/log/main&#39;: No such file or directory

解决办法: Open: /system/etc/init.d/××× (not the same file on different ROMs, find the right file) Find the line that says: rm /dev/log/main Change the line to: # rm /dev/log/main (comments out the line, rm = remove, in case you were wondering) Save and r

Oracle之 等待事件log file sync + log file parallel write (awr优化)

这是3月份某客户的情况,原因是server硬件故障后进行更换之后,业务翻译偶尔出现提交缓慢的情况.我们先来看下awr的情况. 我们能够看到,该系统的load profile信息事实上并不高,每秒才21个transaction.先来看看top5events: 从top 5event,我们能够发现,log file sync的avg wait很之高,高达124ms.大家应该知道,对于绝大多数情况 下,log file sync的平均等待时间是小于5ms的,这个值有点高的离谱. 我们知道,产生log

master log 与relay log的关系

--master log 与relay log的关系 -------------------------------2014/06/09 Just to clarify, there are three sets of file/position coordinates in SHOW SLAVE STATUS: 1) The position, ON THE MASTER, from which the I/O thread is reading: Master_Log_File/Read_M

[转]undo log与redo log原理分析

数据库通常借助日志来实现事务,常见的有undo log.redo log,undo/redo log都能保证事务特性,这里主要是原子性和持久性,即事务相关的操作,要么全做,要么不做,并且修改的数据能得到持久化. 假设数据库在操作时,按如下约定记录日志: 1. 事务开始时,记录START T 2. 事务修改时,记录(T,x,v),说明事务T操作对象x,x的值为v 3. 事务结束时,记录COMMIT T undo log原理 undo log是把所有没有COMMIT的事务回滚到事务开始前的状态,系统