Log4J使用+什么地方记录log

<一>.介绍

log4J将日志分为5个级别,从低到高分别是DEBUG,INFO,WARN,ERROR,FATAL,相应地log4J为记录这5个级别提供了5个方法,它们分别是:


   public void debug(Object obj)

   public void info(Object obj)

   public void warn(Object obj)

   public void error(Object obj)

   public void fatal(Object obj)

同时每个方法还对应一个带Throwable入参的重载函数,用于将异常一并记录到日志中:

   public void debug(Object obj,Throwable ex)

   public void info(Object obj,Throwable ex)

   public void warn(Object obj,Throwable ex)

   public void error(Object obj,Throwable ex)

   public void fatal(Object obj,Throwable ex)

 

 

<二>一般原则: 

1、  在程序开始运行应该以INFO记录程序开始运行的消息。 

2、  在程序初始化过程中,如果影响程序主体正常运行错误出现,应该以FATAL记录出现错误的函数名、事件和错误号;如果只是一个不影响程序正常功能的模块出现错误,则应该以ERROR记录出现错误的函数名、模块名、事件和错误号。 

3、  在程序初始化完成后,应该以INFO记录程序初始化完成的消息。 

4、  在函数的入口,如果需要验证参数,则可以以DEBUG的形式输出参数的信息。如果重要参数不正确,则应该以ERROR输出。 

5、  在调用比较成熟的API时,如果失败,则以ERROR记录,并且有错误号记下错误号。 

6、  在调用没有经过严格测试的库时,即使返回成功,也要以DEBUG的形式记录下返回的结果。 

7、  以捕获异常时,以ERROR记录下错误。 

8、  在进行数据库操作时,以DEBUG的级别输出执行的SQL词句,对于取回的结果,最好是能打印出所有构造完成的对象的信息。 

9、  在与其它程序进行通信时,以DEBUG记录下通信过程中的重要信息。 

10、 对程序中的每个线程,它们的初始化完成和开始运行也要以INFO记录下来。 

11、 对程序中需要检查运行性能的地方,以DEBUG记录下运行耗时。 

12、 程序正常结束时,和初始化的记录方式相同,对各个模块的卸载采用和加载是一样的处理方式。当程序都卸载完成后以INFO记录程序退出的消息。 

 

<三>写日志API的使用示例

 

 

Connection conn = null;
	String sqlStr = "select * from table1 where a=’"+a+"’";
	// 测试变量是否正确,在调度时查看,以后不会用
	logger.debug("sqlStr字串为:"+sqlStr);
	// ...
	try
	{
	conn = DBBean.getConnection();
	Statement stat = conn.createStatement();
	ResultSet rs = stat.executeQuery(sqlStr);
	if(rs.next())
	{
	     logger.info("有记录");
	           // 查看程序运行中的信息,反映程序及配置信息的情况
	}
	else
	{
	       logger.warn("因配置要求至少要有一条记录,请核对配置信息。");
	      // 假设配置信息要求一条配置记录,当找不到记录时应该警告,
	           // 以并更改配置
	}
	}catch(SQLException e)
	{
	          logger.error("数据查询时发生异常",e);
	         // 发生了查询异常,可能是sqlStr语句的语法错误造成的
	}
	finally
	{
	try
	{
	 if(conn != null)
	{
	  conn.close();
	   conn = null;
	}
	}
	catch(SQLException e)
	{
	        logger.warn("数据连接无法关闭,连接将无法释放",e);
	        // 数据连接无法关闭将导致资源泄漏,可能是系统原因产生的
	           // 如果持续产生这个问题,开发人员需要查明原因,
	           // 否则系统将因数据连接资源无法释放而崩溃
	}
	}

 

 <四>log4j怎样记录日志到项目目录而不是tomcat目录中

      1:新建一个ServletContextListener的实现类Log4jConfigListener   
      2:Log4jConfigListener做:System.setProperty("webapp","你的webapp路径");   
      3:在log4j配置中:   
          log4j.appender.A2.File=${webapp}/log/access.log.   
       这样就配置了你的log路径.   
    

 

=====================什么时候记录log==================================
三、Log问题 

怎么记录Log,在什么地方记,记录什么信息,怎么很容易的在发布版中去掉Log。 

3.1   Log的分级 

在程序中Log进行分级是很重要的,通常可以分为6级:ALL<DEBUG<INFO<ERROR<FATAL<NONE,Log的级别是可以配置的,当总的Log级别是ERROR时,则级别低于ERROR的都不会输出,只有高于或等于ERROR的才被输出。在程序中,可以指定的级别只有中间的四种。 

DEBUG代表这些Log是用来输出调试信息,一般是在程序中不是非常重要的地方;INFO代表一些比较重要的信息,比如程序初始化完毕;ERROR一般指程序本身引起的,可以恢复的错误;FATAL一般指程序所依赖的环境出现错误,使的程序不恢复。其中常用的是DEBUG和ERROR。 

3.2   在什么地方记Log 
基本原则: 

l         对程序的输入输出要以DEBUG记录下来,常包括从文件、数据库、网络、用户等输入的信息,向文件、数据库、网络输出的信息。 

l         对重要对象或结构体的修改,要以INFO记录修改前的信息和修改后的状态。 

l         不能忽视每个调用错误。 

l         记下打印信息时所在的文件名和函数名(必须能区分开重载函数),有行数最好。 

一般原则: 

1、  在程序开始运行应该以INFO记录程序开始运行的消息。 

2、  在程序初始化过程中,如果影响程序主体正常运行错误出现,应该以FATAL记录出现错误的函数名、事件和错误号;如果只是一个不影响程序正常功能的模块出现错误,则应该以ERROR记录出现错误的函数名、模块名、事件和错误号。 

3、  在程序初始化完成后,应该以INFO记录程序初始化完成的消息。 

4、  在函数的入口,如果需要验证参数,则可以以DEBUG的形式输出参数的信息。如果重要参数不正确,则应该以ERROR输出。 

5、  在调用比较成熟的API时,如果失败,则以ERROR记录,并且有错误号记下错误号。 

6、  在调用没有经过严格测试的库时,即使返回成功,也要以DEBUG的形式记录下返回的结果。 

7、  以捕获异常时,以ERROR记录下错误。 

8、  在进行数据库操作时,以DEBUG的级别输出执行的SQL词句,对于取回的结果,最好是能打印出所有构造完成的对象的信息。 

9、  在与其它程序进行通信时,以DEBUG记录下通信过程中的重要信息。 

10、 对程序中的每个线程,它们的初始化完成和开始运行也要以INFO记录下来。 

11、 对程序中需要检查运行性能的地方,以DEBUG记录下运行耗时。 

12、 程序正常结束时,和初始化的记录方式相同,对各个模块的卸载采用和加载是一样的处理方式。当程序都卸载完成后以INFO记录程序退出的消息。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值