zoukankan      html  css  js  c++  java
  • 你已不再是菜鸟,看下日志处理吧

            曾听人这样说过:如果你编程中,还是用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.FileAppender
    log4j.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平台为“ ”,Unix平台为“ ”

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

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


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

            

  • 相关阅读:
    Objective-C学习笔记2013(Category 扩展(类目)/分类)(4)
    Objective-C学习笔记(static,self,super)
    Objective-C学习笔记2013(3)[NSArray]数组[在可变数组中,加用add减用remove]
    Objective-C学习笔记2013(2)[NSNumber]
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    C语言学期总结
    第一次作业
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3241084.html
Copyright © 2011-2022 走看看