`
sandy_leen
  • 浏览: 72161 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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记录程序退出的消息。 

 

分享到:
评论

相关推荐

    mybatis源码+练习代码+插件+log4j2+maven

    - Log4j2是Apache的一个日志记录组件,提供了灵活的日志级别设置,丰富的日志输出格式,以及高效的性能。 - 配置Log4j2可以通过XML、JSON或YAML文件,可以定制化日志输出位置、级别、格式等,便于调试和监控。 5....

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    总结,SLF4J和Log4j的组合使用让日志管理更加灵活,开发者可以通过SLF4J的简洁API进行日志记录,同时利用Log4j的强大功能,如自定义输出格式和多种输出目的地。通过适当的配置和测试,我们可以确保日志系统按照预期...

    log4j + slf4j-api + slf4j-log4j12

    slf4j-log4j12-1.7.x版本是SLF4J针对Log4j 1.2版本的绑定器,它使得应用可以使用SLF4J接口,但实际的日志输出通过Log4j进行。这个桥接器让项目能利用SLF4J的灵活性,同时使用Log4j的成熟实现。 在提供的文件名列表...

    log4j使用与java中log4j记录日志如何写入数据库

    本文将详细介绍如何在Java中使用Log4j来记录日志,并将其写入数据库。 首先,我们需要了解Log4j的基本结构。一个简单的Log4j项目通常包含以下几个部分: 1. **配置文件**:Log4j的配置文件通常是`log4j.properties...

    log4j2+kafka

    Log4j2作为Java领域广泛应用的日志框架,提供了强大的日志记录功能,而Kafka作为一个高吞吐量、低延迟的分布式消息系统,被广泛用于实时数据流处理。当这两者结合时,我们可以构建一个高效的日志流处理系统,实现...

    老生常谈Log4j和Log4j2的区别(推荐)

    然后使用Logger.getLogger()方法获取日志记录器,而Log4j2需要import org.apache.logging.log4j.Level、org.apache.logging.log4j.LogManager和org.apache.logging.log4j.Logger,使用LogManager.getLogger()方法...

    log4j2+slf4j+测试类日志按日期生成

    `Log4j2`和`SLF4J`是两个广泛使用的Java日志框架,它们各有特点,并且可以协同工作,提供强大的日志记录功能。本文将详细介绍如何利用`Log4j2`和`SLF4J`来配置一个测试类,使其日志按照日期生成,以便于管理和分析。...

    Log4j2结合Slf4j配置使用

    Log4j2 是一个功能强大且广泛使用的日志记录工具,它提供了灵活的日志记录机制和高性能的日志记录能力。Slf4j 则是一个简单的日志记录门面,提供了统一的日志记录接口。今天,我们将讨论如何将 Log4j2 结合 Slf4j ...

    log4j使用教程(详解)

    1. **什么是Log4j** Log4j是一个基于Java的日志记录工具,它提供了灵活的控制来记录日志信息,包括日志级别(DEBUG、INFO、WARN、ERROR、FATAL)、日志输出格式以及输出目标(控制台、文件、网络等)。 2. **日志...

    Log4j手册+API

    《Log4j手册+API》是一份针对Java开发者的重要参考资料,它涵盖了Log4j这个广泛使用的日志记录框架的详细信息。Log4j是Apache软件基金会的一个项目,它为Java应用程序提供了一种灵活且高效的日志系统。通过使用Log4j...

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...

    log4j2+slf4j+spring4+mybatis的整合使用

    5. 编写应用程序代码,在需要日志记录的地方,使用log4j2提供的Logger对象记录日志。 通过上述步骤,可以使得Spring 4应用程序具备日志记录能力,MyBatis能够记录底层数据库操作的详细信息,而开发者则可以通过log4...

    Log4j+使用方法+配置文件log4j.properties

    Log4j是Apache组织开发的一款强大的Java日志记录框架,被广泛应用于各种Java项目中,以提供灵活的日志输出和管理。它允许开发者控制日志信息的输出级别、格式以及输出位置,帮助调试和监控系统运行状态。Log4j的核心...

    Log4j+MongoDB 完整实例

    Log4j是Java平台上广泛使用的日志记录框架,它提供了灵活的日志配置和丰富的日志输出功能。而MongoDB则是一款高性能、开源的NoSQL数据库,特别适合处理和存储大量非结构化数据,如日志数据。在这个"Log4j+MongoDB...

    tomcat9 slf4j+log4j2 写日志.zip

    本教程主要关注如何在Tomcat 9环境中使用SLF4J(Simple Logging Facade for Java)和Log4j2进行日志记录,并解决可能出现的日志不写入问题。 首先,SLF4J是一个日志门面,它为各种日志框架提供了抽象层,如Logback...

    Junit+log4j+slf4j

    将JUnit、log4j和SLF4J结合使用,开发者可以在开发过程中方便地进行单元测试,并通过SLF4J调用底层的日志框架(如log4j)记录测试和应用运行过程中的日志信息。这有助于调试、性能分析和问题定位,从而提高软件质量...

    log4j2.xml记录日志到到数据库

    Log4j2是一款广泛使用的日志框架,它提供了灵活且高效的日志记录功能。本示例将详细介绍如何配置并使用Log4j2将日志信息记录到MySQL数据库中。 首先,我们要理解Log4j2的核心概念。Log4j2主要包括以下几个组件: 1...

    slf4j1.7.25+ log4j2.8.2 集成jar包

    "slf4j1.7.25+ log4j2.8.2 集成jar包" 提供了在Spring MVC项目中使用SLF4J和Log4j进行日志管理的必备组件。通过SLF4J的抽象层,你可以轻松地在不同的日志框架之间切换,而Log4j则提供了强大的日志记录功能。这个...

    slf4j+log4j2配置使用

    在Spring Boot项目中,可以使用SLF4J作为日志门面,通过Log4j2实现日志记录。首先需要在项目中排除Spring Boot默认的日志实现(即spring-boot-starter-logging),然后添加Log4j2的依赖。具体操作如下: 1. 在pom....

    示范如何在android工程中使用log4j记录日志

    在Android开发中,日志记录是一项非常重要的任务,它...通过以上步骤,你就能在Android工程中成功使用Log4j进行日志记录了。记得合理配置日志级别,平衡调试需求与性能消耗,以及定期清理日志,以保持应用的健康运行。

Global site tag (gtag.js) - Google Analytics