日志
日志结果
为什么有问题
没给出正确的方法名和正确的行号
日志结果
为什么有问题
1.还是相同的行号
2.传入的方法名是硬编码,如果方法名有变动,需要修改debug的内容
日志结果
不但给出了调用的方法名,还给出了log的行号。
项目中的问题代码
private void doBissness() {
String account = "LEON";
String cardNum = "XXX0288";
doDebug("account is " + account);
doDebug("card num is " + cardNum);
// do something
}
private void doDebug(String str) {
if (logger.isDebugEnabled()) {
logger.debug(str);
}
}
日志结果
DEBUG -- 2014-05-31 22:02:41,890 -- com.leon.Main.doDebug(Main.java:22)-- account is LEON
DEBUG -- 2014-05-31 22:02:41,894 -- com.leon.Main.doDebug(Main.java:22)-- card num is XXX0288
为什么有问题
没给出正确的方法名和正确的行号
修改之后还是有问题的代码
private void doBissness() {
String account = "LEON";
String cardNum = "XXX0288";
doDebug("account is " + m1.getAccount(), "doBissness()");
doDebug("card num is " + m1.getCardNum(), "doBissness()");
// do something
}
private void doDebug(String str, String method) {
if (logger.isDebugEnabled()) {
logger.debug(method + "--" + str);
}
}
日志结果
DEBUG -- 2014-05-31 22:08:23,059 -- com.leon.Main.doDebug(Main.java:22)-- doBissness()--account is LEON
DEBUG -- 2014-05-31 22:08:23,061 -- com.leon.Main.doDebug(Main.java:22)-- doBissness()--card num is XXX0288
为什么有问题
1.还是相同的行号
2.传入的方法名是硬编码,如果方法名有变动,需要修改debug的内容
再次修正的代码
private void doBissness() {
String account = "LEON";
String cardNum = "XXX0288";
logger.debug("account is " + account);
logger.debug("card num is " + cardNum);
// do something
}
日志结果
DEBUG -- 2014-05-31 22:16:37,487 -- com.leon.Main.doBissness(Main.java:15)-- account is LEON
DEBUG -- 2014-05-31 22:16:37,490 -- com.leon.Main.doBissness(Main.java:16)-- card num is XXX0288
不但给出了调用的方法名,还给出了log的行号。
分析logger.isDebugEnabled()是否必须写
log4j-1.2.17源码
public boolean isDebugEnabled() {
if(repository.isDisabled( Level.DEBUG_INT))
return false;
return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());
}
public void debug(Object message) {
if(repository.isDisabled(Level.DEBUG_INT))
return;
if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
forcedLog(FQCN, Level.DEBUG, message, null);
}
}
debug方法已经判断了isDebugEnabled的情况
结论
1.在完全了解方法调用情况之后进行方法重构
2.没有必要判断logger.isDebugEnabled()
附配置文件log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="File" value="./log/xxx.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p -- %d -- %l-- %m%n" />
</layout>
</appender>
<root>
<priority value="debug" />
<appender-ref ref="FILE" />
</root>
</log4j:configuration>