zoukankan      html  css  js  c++  java
  • 系统日志处理系列 (一)如何使用logging、commons-logging、log4j输出日志

            在任何一个系统的运行过程中难免会出现各种异常信息,为了很容易的找到出问题的关键,就需要为系统建立日志来帮助分析和查找问题,那么如何建立日志呢,方法有很多种在这里给大家介绍一种目前流行的一种。

            需要引入logging、commons-logging、log4这三个工具包,logging是JDK自带的一个包而commons-logging是log4的抽象,我们可以使用commons-logging也可以使用log4,基于面向抽象编程的思想所以我们选择使用commons-logging的人多一些,如果某一天需要更换导出日志的包得时候也会容易替换。

            让我们通过一个实例演示一下怎么样导出日志到文件或控制台。

            首先,建立一个java project项目,然后在项目里面导入所需的三个包,建立一个logtest测试类,以及log4j.properties日志配置文件。

            logTest类

    package com.bjsxt.logTest;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    public class logTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		
    		Log logger = LogFactory.getLog(logTest.class);
    		
    		logger.debug("DUBUG调试信息");
    		logger.info("INFO信息");
    		logger.warn("WARN信息");
    		logger.error("ERROR信息");
    		logger.fatal("FATAL信息");
    	}
    
    }
    
            log4j.properties日志配置文件

    ### direct log messages to stdout ###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### direct messages to file hibernate.log ###
    log4j.appender.file=org.apache.log4j.FileAppender
    log4j.appender.file.File=d:/oa.log
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### set log levels - for more verbose logging change 'info' to 'debug' ###
    
    log4j.rootLogger=warn, stdout,file
    
    #log4j.logger.org.hibernate=info
    #log4j.logger.org.hibernate=debug
    
    ### log HQL query parser activity
    #log4j.logger.org.hibernate.hql.ast.AST=debug
    
    ### log just the SQL
    #log4j.logger.org.hibernate.SQL=debug
    
    ### log JDBC bind parameters ###
    log4j.logger.org.hibernate.type=info
    #log4j.logger.org.hibernate.type=debug
    
    ### log schema export/update ###
    log4j.logger.org.hibernate.tool.hbm2ddl=debug
    
    ### log HQL parse trees
    #log4j.logger.org.hibernate.hql=debug
    
    ### log cache activity ###
    #log4j.logger.org.hibernate.cache=debug
    
    ### log transaction activity
    #log4j.logger.org.hibernate.transaction=debug
    
    ### log JDBC resource acquisition
    #log4j.logger.org.hibernate.jdbc=debug
    
    ### enable the following line if you want to track down connection ###
    ### leakages when using DriverManagerConnectionProvider ###
    #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
    log4j.logger.com.bjsxt =info
               在处理日志中涉及到一些重要概念,主要包括logger、appender、level、layout。

    1Logger

    Logger按照布局中指定的格式把日志信息写入一个或多个输出源,Log4j 允许开发人员定义多个Logger每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系

     

    2Level

    它还有一个重要的属性——日志级别。不管何种日志记录工具,大概包含如下几种日志级别,优先级由低到高:DEBUG,INFO,WARN,ERROR,FATAL

     

    在程序中打印日志信息时,优先级别低于配置文件中指定的级别时,将不做任何处理;比如配置文件中指定优先级别是WARN,当程序中有代码logger.info(message),则对message不会进行处理(输出到控制台或者文件)

     

         log4j中,使用

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

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

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

     

    3Appender

           一个Appender表示一个输出的目的地Appendr可以是控制台、文本文件、XML文件或Socket。一个Logger可以拥有多个Appender ,即可以将种信息输出到多个位置。

     

    log4j中,使用

    log4j.appender.[appender的名称]=[appender类名]

    log4j.appender.[appender的名称].[appender的属性名]=[appender的属性值]

    来对appender进行配置

     

    4Layout

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

    log4j中,使用

    log4j.appender.[appender的名称].layout=[layout的类名]                

    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{yyyyMM dd HH:mm:ss}

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

               日志的工具的使用很简单,也是一个系统必须得组成部分,需要掌握目前通用的几种处理日志方法。


  • 相关阅读:
    SourceTree 启动不需要账号
    获取httpservletrequest所有参数的键值对--key-value,用getParameterMap
    ajax 参数出现在Request payload导致request.getParameter(name)是获取不到值
    导出
    替换jar包里面的文件。利用jar ucf
    mysql CPU使用率过高的一次处理经历
    实用小知识
    spring-boot 静态资源自定义配置
    java多线程调用静态方法安全吗?
    spring 注解@Bean
  • 原文地址:https://www.cnblogs.com/lilongsheng1125/p/4978555.html
Copyright © 2011-2022 走看看