公司介绍 产品展示 业务支持 解决方案 文档资料
网站导航 访客留言 技术论坛
     
     
  产品资料
  业界动态
  JAVA技术


首  页 > 文档资料 > 产品资料  
 
  在IDEA下处理程序中日志技巧

我们经常要在程序中做日志处理,以方便以后我们对程序的跟踪,我们最常用的日志处理开发包可能就是Jakarta Commons项目下的logging开发包,它起到在不同日志处理包的衔接作用,它可以衔接Log4J、Jdk Logger和自身实现的简单日志处理包等,让日志处理更透明,相信可以满足绝大多数的需求。

Comons-logging的处理很简单,它有一个决定使用哪一个日志包的内在次序:首先查找是否包含Log4J包,如果有就使用Log4J,然后时Jdk的Logger,最后是自身实现的Simple Logger,这样即使你没有使用其他任何日志处理包,commons-logging自身的Simple Logger实现也帮你做简单实现。下面让我们看看如实使用commons-logging:首先我们要获得一个Commons-loggin包中的Log对象即可,然后调用相关的日志方法即可,这里我们只需在Java类中包含以下声明语句即可:


protected final Log logger = LogFactory.getLog(this.getClass());

介绍了Commons-loggin包的最基本用法的步骤后,我们就需要在项目中规划一下采用哪一款日志包,这里我们拟定采用Log4J作为日志处理包,这也是非常流行的一款日志处理包。下面就让我们看看如何做准备工作吧。

1 在IDEA下建立日志处理相关的Library:由于日志是很多项目中都用到的,我们需要将其建成Global Library,方便以后的每一个项目调用。打开设置面板,选择“Jdk & Global Libraries”,在弹出的“Jdk & Global Libraries”对话框中选择“Global Libraries”标签,然后创建一个新的Library,命名为Logging,包含Jakarta的Commons-logging包和Log4J包,最后确认即可。以后在新的项目中我们只需选中此Library即可。

2 Log4J的核心配置是log4j.xml文件,所以我们创建一个log4j.xml文件模板,在新的项目中要配置Log4J的话,只需根据模板生成一个新的Log4J配置文件,然后修改一下即可,而且IDEA在编辑XML文件的时候可以根据DTD进行提示,编辑log4j.xml也是非常容易的。Log4J.xml的文件模板创建完毕后,我们只需在项目的源码(Source)目录下根据模板创建一个新的log4j.xml文件即可,编译后自动会拷贝到编译输出目录中,Log4J的配置就会发挥其作用。

3 所有的准备步骤都完成啦,下面就是在编码中加入日志处理。这里我们形成一个约定,Commons-loggin的Log类的变量名同一为“logger”,这样对以后处理比较方便,如果没有特殊情况的话,就选择这个名称。首先我们要在类中声明Log,也是我们上面所说的那个声明语句,为了方便以后调用,我们将其做成Live template,不需要在键入这么长的语句。我们只需在Live Template中创建一个模板即可,这里我们选择loginit作为名称,“protected final Log logger = LogFactory.getLog(this.getClass());”为模板内容即可,以后我们只需键入loginit,然后按下Tab键,声明语句就完成啦。

4 Exception的处理:在程序中我们经常要处理Exception,我们通常使用Excpetion类的printStackTrace()方法简单处理一下,这个是不好的做法,首先它无法被Log记录下来,如果你不去查看控制台,就如同没有处理一样,如果这些信息被记录下来,我们就可以根据这些信息修改程序潜在的问题,这个过程很简单,我们只需告诉logger记录下StrackTrace即可,代码如下:


catch(Excption e)
{
logger.error(“Exception”,e);
}

为了简单,不要再重复键入这样的语句,我们同样创建一个模板,在Live Template对话框中输入模板名称“logx”,模板内容为:


logger.error(“Exception”,$exception$);

然后我们点击“Edit Variables”按钮,将“exception”变量的表达式(Expression)设为variableOfType("java.lang.Throwable"),表示只接受Throwable变量,一般在当前catch语句中只有一个Exception变量,你可以选择“Skin if defined”,这样更快捷些。

logx模板创建完毕后,我们只需在catch语句中键入logx,然后按下Tab键,你就会看到效果。
5 你可能在程序中想输出一些log信息,你可以创建一些便利的Live Template,如logt代表logger.trace,logd代表logger.debug等,这样你以后处理log语句就会很方便,既不容易出错又高效。你可以根据具体的项目微调一下,利用好Live Template提供的各项函数,你的效率会提高很多。

极限Log:上述我们讲的都是开发过程中需要做的事情,事实上这些步骤都可以简化,让Log极限化。首先我们在“File Template”创建一个新的模板,名称为“Log Class”,这个模板保护导入相关的日志处理类、Commons-logging的声明语句,以后我们创建需要日志处理能力的类都从这个模板生成。

由于Exception在多数情况下都可以由IDEA自动处理,如Sourround with(Ctrl+Alt+T),自动添加Exception处理的Intention Action,Detail Exception Intention等,这时你只需更改一下IDEA默认对Exception的处理即可。打开“File Template”,点击“Code”标签,将“Catch Statement Body”内容改为“logger.error("Exception",$EXCEPTION);”,这样IDEA再以后处理Exception时就会调用这个模板。

设定好这两个模板后,你在开发中的日志处理动作将会减少许多,在创建时就添加了日志处理能力,你只需添加一些简单日志输出语句即可。

总结:日志处理一直是我们认为很好的事情,需要去做,往往因为我们处理手段不当,过程很繁琐而不愿意去做,这样的情况非常多,如测试、bug跟踪等等。通过以上的步骤,我们介入全局包、文件模板、Live Template,给开发人员带来非常大的便利,相信每一位开发人员都会爱上Log,“Don’t use System.out.println(),use Log4J!”将马上成为可能。

参考资料:
Log4J: http://logging.apache.org/log4j
Commons-logging:http://jakarta.apache.org/commons/logging/