你已不再是菜鸟,看下日志处理吧

来源:互联网 发布:c4d软件64位下载 编辑:程序博客网 时间:2024/05/12 19:16

        曾听人这样说过:如果你编程中,还是用System.out来打印一些调试信息,那么你依旧只是个菜鸟。

        日志,最早来源于航海日志,是用来记录航海过程中的所见所闻。

        在应用程序开发领域,特别是企业级应用程序,需要在程序不停止的情况下,能够分析程序的运行过程。这个时候就需要把程序运行过程中的数据内容,分支选择,异常,错误等信息完整的记录下来。实现这个功能的部件就叫做日志,因而日志主要是用在部署之后的排错调试。

        如果没有日志,你无法知道导致错误的数据,无法确定究竟是什么操作导致了异常,是什么异常,因为我们不会24小时盯着它。

        现在我们来介绍一下日志工具:logging,log4j,commons-logging。

        系统会在有log4j的时候使用log4j,没有的时候使用logging,那么commons-logging是一个什么东西呢?

        commons-logging其实没有做什么实质上的实现,它仅仅是将log4j和logging重新封装了一遍,使得你系统中如果有log4j,就使用log4j的实现,如果没有,那么就用jdk的默认实现,从而使你系统不会因为没有拷进去log4j而不能使用,如果想使用,直接将jar包放进去就可以使用,代码不用做任何改变。

        所以在使用日志的时候,建议使用commons-logging。

        而一个日志工具,至少应该饮食以下几个组成部分:

        1、Logger

        记录器组件负责产生日志,并能够对日志信息进行分类筛选,控制什么样的日志应该被输出,什么样的日志应该被忽略。它还有一个重要的属性——日志级别。不管何种日志记录工具,大概包含如下几种日志级别:DEBUG,INFO,WARN,ERROR,FATAL。

        在log4j中,使用 

                log4j.rootLogger=[级别],[使用哪个appender]

                log4.logger.[logger的名称]=[级别],[使用哪个appender]

        来对logger进行配置,如果某个logger没有进行配置,那么就会使用rootLogger的配置信息。

        2、Level

        日志级别组件。在log4j中,级别的排序是这样的DEBUG<INFO<WARN<ERROR<FATAL。要求输出低级为低级别时,高级别的信息也会相应打出

        3、Appender

        日志记录工具基本上通过Appender组件来输出到目的地,一个Appender实例就表示了一个输出的目的地。

        在log4j中,使用

                log4j.appender.[appender的名称]=[appender类名] 来指定appender,其中常用的类是ConsoleAppender,FileAppender。

                log4j.appender.[appender的名称].[appender的属性名]=[appender的属性值] 对appender中的属性进行赋值。

        例,

log4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=d:/oa.log

        4、Layout

        Layout组件负责格式化输出的日志信息,一个Appender只能有一个Layout。

        在log4j中,使用

                log4j.appender.[appender的名称].layout=[layout的类名] 来指定layout要使用的类,常用的有PatternLayout

                log4j.appender.[appender的名称].layout.[layout的属性名]=[layout的属性名] 来定义layout的格式

        而log4j采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

        %m输出代码中指定的消息

        %p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

        %r输出自应用启动到输出该log信息耗费的毫秒数

        %c输出所属的类目,通常就是所在类的全名

        %t输出产生该日志事件的线程名

        %n输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”

        %d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy MM dd HH:mm:ss}

        %l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数


        总结,对于日志的使用,还可以结合AOP(面向切面编程)的思想进行使用,从而达到更好的使用效果。