`

log4j通用封装

阅读更多

以前用 java 做工程需要调试信息都是自己 System.out.println,虽然很早就知道 log4j,不过没认真研究过,一般拿简单的 .property 文件来配置,不过最近仔细看了一下 log4j 的源文件,发现人家 apache 早就不建议使用 .property 了,首选 .xml,于是再研究了一下 .xml 的配置,这里记一下备忘。

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
  3.   
  4. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  
  5.   
  6.     <!-- Created by DavidHsing <DavidHsing@163.com>, on Oct.20 2009, pm -->  
  7.   
  8.     <!-- logger 分 5 级: #FATAL-0, #ERROR-3, #WARN-4, #INFO-6, #DEBUG-7 -->  
  9.     <!--   
  10.     %c 输出日志信息所属的类的全名   
  11.     %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2008-08-08 20:08:08   
  12.     %f 输出日志信息所属的类的类名   
  13.     %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行   
  14.     %m 输出代码中指定的信息,如log(message)中的message   
  15.     %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”   
  16.     %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推   
  17.     %r 输出自应用启动到输出该日志信息所耗费的毫秒数   
  18.     %t 输出产生该日志事件的线程名   
  19.     -->  
  20.   
  21.   
  22.     <!-- ============================================================== -->  
  23.     <!--                       a console appender                       -->  
  24.     <!-- ============================================================== -->  
  25.     <appender name="Log.All.Console" class="org.apache.log4j.ConsoleAppender">  
  26.         <layout class="org.apache.log4j.PatternLayout">  
  27.             <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%t] %C{2} (%F:%L) - %m%n" />  
  28.         </layout>  
  29.     </appender>  
  30.   
  31.     <!-- ============================================================== -->  
  32.     <!--                         a file appender                        -->  
  33.     <!-- ============================================================== -->  
  34.     <appender name="Log.All.File" class="org.apache.log4j.FileAppender">  
  35.         <param name="File" value="log/AppRunLog.log" />  
  36.         <param name="Append" value="false" />  
  37.         <param name="Encoding" value="GBK" />  
  38.         <layout class="org.apache.log4j.PatternLayout">  
  39.             <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%t] %C{2} (%F:%L) - %m%n" />  
  40.         </layout>  
  41.     </appender>  
  42.   
  43.     <category name="org.apache.log4j.xml">  
  44.       <priority value="debug" />  
  45.     </category>  
  46.   
  47.     <!-- level = debug/off -->  
  48.     <root>  
  49.        <level value="debug" />  
  50.        <appender-ref ref="Log.All.Console" />  
  51.        <appender-ref ref="Log.All.File" />  
  52.     </root>  
  53.   
  54. </log4j:configuration>  

这个 xml 是建好了,不过由于在运行时需要配置 XML,而这个配置 log4j 又限定只能配置一次,所以最简单的办法,就是再次封装一下,写个类来配置和提供 Logger:

  1. package xxx.utilities;   
  2.   
  3. import org.apache.log4j.*;   
  4. import org.apache.log4j.spi.*;   
  5. import org.apache.log4j.xml.*;   
  6.   
  7.   
  8. /**  
  9.  * 通用 log4j 封装类  
  10.  * @author DavidHsing  
  11.  */  
  12. public class Log4jLogger   
  13. {   
  14.     private static final String r_sProfileName = "log4j.xml";   
  15.   
  16.     static  
  17.     {   
  18.         DOMConfigurator.configure(Log4jLogger.class.getResource(r_sProfileName));   
  19.     }   
  20.   
  21.     private Log4jLogger() {}   
  22.   
  23.     public static String getProfileName() { return r_sProfileName; }   
  24.   
  25.     public static Logger getLogger(Class clsClass)   
  26.     {   
  27.         return LogManager.getLogger(clsClass);   
  28.     }   
  29.   
  30.     public static Logger getLogger(String sClassName)   
  31.     {   
  32.         return LogManager.getLogger(sClassName);   
  33.     }   
  34.   
  35.     public static Logger getLogger(String sClassName, LoggerFactory lfLoggerFactory)   
  36.     {   
  37.         return LogManager.getLogger(sClassName, lfLoggerFactory);   
  38.     }   
  39. }  

这样,在调用的时候就不需要配置了,直接获取 Logger 并输出就 OK 了。

注意最好将 .xml 放到这个 java 类所在的同一目录(当然也可以通过在上述类里面指定路径)。

代码:

  1. package xxx;   
  2.   
  3. import org.apache.log4j.*;   
  4.   
  5. public class TestLog4j   
  6. {   
  7.     protected Logger r_l4jlogger = Log4jLogger.getLogger(TestLog4j.class);   
  8.   
  9.     //测试代码   
  10.     r_l4jlogger.error("这里是 DavidHsing 的 log4j 测试。");   
  11. }  

这样就可以正常的运行了。

不过最上面的 xml 只是个例子,真正要研究的话还有很多内容,比如按事件级别分别输出到不同地方等等,总之,log4j 是个很强大而且高效的东东,值得认真研究一下。

参考文献:

1、Apache Logging Project Homepage: http://logging.apache.org

分享到:
评论

相关推荐

    封装好的log4j 包括properties文件和使用类

    这个压缩包包含了一个已经封装好的Log4j实现,使得在项目中集成和使用日志变得更加简便。 首先,我们来看看`log4j.properties`文件。这是Log4j的配置文件,它定义了日志的输出级别、格式、目的地等。例如,你可以...

    log4cxx封装为通用LOG宏

    本文将详细讨论如何将log4cxx封装为通用LOG宏,以及其配置文件的详细内容。 首先,让我们了解log4cxx的基本概念。Log4cxx是基于日志级别(如DEBUG、INFO、WARN、ERROR和FATAL)的,允许我们根据需要调整日志输出的...

    一种基于Log4J的日志输出组件的设计

    ### 基于Log4J的日志输出组件设计的关键知识点 #### 1. 引言:日志管理的重要性 在软件开发与系统运行过程中,日志管理占据着至关重要的地位。据统计,在一个软件系统中,日志输出相关的代码量约占总代码量的4%...

    java日志jar包

    而`slf4j.jar` 和 `slf4j-log4j.jar` 则是另一种更高层次的抽象,SLF4J提供了比Commons Logging更好的封装和灵活性,`slf4j-log4j.jar` 则将SLF4J与log4j进行绑定,使得SLF4J可以通过log4j来记录日志。 在实际开发...

    Java8应用封装,手写ORM,LOG,framework

    在这个“Java8应用封装,手写ORM,LOG,framework”的项目中,开发者显然专注于利用Java8的新特性来构建自己的轻量级框架,包括对象关系映射(ORM)、日志系统(LOG)以及一些通用的工具类和自动化配置。 1. **Java...

    Log4QT源码(个人上传)

    这个框架深受Apache的Log4j启发,旨在帮助开发者方便地进行日志输出,便于调试、监控和问题排查。在Log4QT中,我们可以找到一系列的类和接口,用于配置、管理和记录日志信息。下面,我们将深入探讨这些文件的功能和...

    java源码:通用数据底层 Jsa4j.zip

    《通用数据底层 Jsa4j》是一套基于Java语言编写的源码库,它为开发者提供了在各种场景下处理数据的通用工具和方法。作为Java编程的经典案例,Jsa4j旨在简化数据操作,提高开发效率,使得在复杂的业务逻辑中处理数据...

    前所未有最新版springmvc5.0.8集成框架完整版! 整合LOG4J2、ORACLE、MYSQL等基础组件。配置已简化,且二次开发更简便!!

    - **日志系统**:LOG4J2是Apache的一个高性能、灵活的日志框架,比老版本LOG4J具有更好的性能和更多的功能。 - **配置灵活性**:使用JSON或XML配置,提供动态日志级别调整,支持异步日志记录,提高应用性能。 - *...

    common-log:通用日志界面

    回到"common-log:通用日志界面",这可能是一个将这些日志库的接口进行封装的项目,使得开发者无需关心底层实现,只需要通过统一的接口就可以进行日志记录。这样的通用日志界面可能包含以下功能: 1. **多日志库支持...

    多功能通用Excel导入导出数据

    4. `log4j.properties`:日志配置文件,用于控制应用的日志输出级别、格式和目的地。 5. `config`:可能包含项目的配置文件,如数据库连接信息、应用设置等。 6. `META-INF`:Java应用的标准目录,通常包含MANIFEST....

    通用jar包通用jar

    另一个例子是`log4j.jar`,这是一个流行的日志记录框架,可以方便地管理和控制应用程序的日志输出。 创建和使用通用jar包的过程通常包括以下步骤: 1. 开发和测试:编写实现特定功能的Java源代码,进行单元测试以...

    JDBC链接Oracle数据库增删改查通用工具类

    标题中的“JDBC链接Oracle数据库增删改查通用工具类”指的是一个Java编程中的实用工具类,它封装了与Oracle数据库交互的JDBC操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select)这四种基本...

    基于通用遥感数据处理系统的日志子系统的设计与实现.pdf

    Log4J以其灵活性和强大的功能而被选中,但针对GHIPS的特定需求,进行了功能封装和数据库扩展等优化,以适应遥感数据处理的特性。优化后的日志子系统能够实现GHIPS的记录和追踪需求,并能便捷地处理大量日志数据,...

    java封装接口智能交通DEMO

    7. **日志记录**:为了便于调试和故障排查,DEMO可能会使用日志记录框架,如Log4j或SLF4J,记录程序运行过程中的关键信息。 8. **单元测试**:为了确保接口功能的正确性,DEMO可能包含了JUnit或其他测试框架的使用...

    ssm(Spring-springMVC-Mybatis)通用Dao框架

    9. **日志和异常处理**:通常会集成日志框架(如Log4j、Logback)和全局异常处理,便于调试和问题排查。 使用该通用Dao框架,开发者只需关注业务逻辑,而无需关心底层的数据库操作和对象映射,极大地提升了开发效率...

    SpringBoot单体项目通用脚手架

    3. **日志处理**:集成Logback或Log4j,统一日志管理,便于追踪问题。 4. **异常处理**:全局异常处理,捕获并统一返回错误信息,提高用户体验。 5. **数据库支持**:支持多种数据库,如MySQL、Oracle等,通过JPA或...

    Web Service通用客户端和测试工具

    可以使用Java的logging框架(如Log4j或java.util.logging)记录网络请求和响应,以帮助诊断问题。同时,Web服务器的日志也能提供有价值的信息。 7. **持续集成与自动化测试**:为了确保Web服务的质量,持续集成和...

    maven配置最新SSH框架

    齐全的代码注释,完整的hibernate通用方法封装。商业代码的规范。配置好了log4j,并且呢给出一个简单的注册实例。可以说这完全是一个商业项目的基础框架。并且也适合初学者学习使用。 此例中,数据库配置的是mysql,...

    封装 okhttp

    可以集成第三方库,如 Timber 或 Log4j,对网络请求进行日志打印,方便调试。 **三、使用封装后的工具类** 使用封装好的工具类 `LouisOkHttp`,只需实例化对象,然后调用相应的方法发起请求,例如: ```java ...

    JSP数据库通用模块开发与系统移植

    日志框架如Log4j可以帮助我们实现这一目标。 8. **性能优化**: 为了提高系统性能,可以采用缓存技术、批处理操作、减少不必要的数据库查询等方法。例如,使用缓存(如 Ehcache 或 Redis)存储经常访问的数据,可以...

Global site tag (gtag.js) - Google Analytics