`

log4j输出到数据库(输出自定义参数、分级保存)

阅读更多
  Log4J日志输出到数据库中,且保存些用户自定义的参数,如用户ID,且配置仅输出指定级别的日志。

配置文件如下: 
log4j.rootLogger=DEBUG,logfile,stdout

log4j.logger.SYSTEM = INFO,JDBC
#也可以使用包名或类名,这样可以用JAVA的class来初始化logger
log4j.logger.com.wallimn.test=INFO,JDBC
#不继承父appender的配置,如果取消注释,rootCategory指定的appender将不再输出
#log4j.additivity.SYSTEM=false


#stdout configure
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %5p [%c] - %m%n

#logfile configure
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=./wallimn.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern= %d{yyyy MM dd HH:mm:ss} %5p [%c] - %m%n

#JDBC configure
log4j.appender.JDBC=org.apache.log4j.jdbc.JDBCAppender
#此处优先级高于log4j.logger.SYSTEM指定级别,
log4j.appender.JDBC.Threshold=INFO
log4j.appender.JDBC.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.JDBC.URL=jdbc:oracle:thin:@127.0.0.1:1521:swdb
log4j.appender.JDBC.user=scott
log4j.appender.JDBC.password=tiger
log4j.appender.JDBC.layout=org.apache.log4j.PatternLayout
log4j.appender.JDBC.sql=INSERT INTO XT_SYS_LOG(USERID,LOGTIME,LOGLEVEL,LOGACTION,MESSAGE)VALUES('%X{userId}',sysdate,'%p','%l','%m')
log4j.appender.JDBC.filter.F1=org.apache.log4j.varia.LevelRangeFilter
#只接收ERROR级别的日志,这是很有用的技术
#这功能在1.2.8版本时,不支持这样配置,好像仅支持XML方式配置,我试了好多次才发现这个问题
#可多个Filter组合共同限制

log4j.appender.JDBC.filter.F1.levelMin=ERROR
log4j.appender.JDBC.filter.F1.levelMax=ERROR
log4j.appender.JDBC.filter.F1.acceptOnMatch=true

建测试表的SQL:
create table xt_sys_log(
userid number,
logtime date,
logaction varchar2(100),
loglevel varchar2(100),
message varchar2(255));

测试类:
package com.wallimn.test;

import org.apache.log4j.Logger;
import org.apache.log4j.MDC;

import junit.framework.TestCase;

public class Log4JTest extends TestCase {

	public void testLog1(){
	    Logger logger = Logger.getLogger("SYSTEM");    
	    //Logger logger = Logger.getLogger(Log4JTest.class);    
	        MDC.put("userId", "11");    
	        logger.fatal("test_fatal");
	        logger.error("test_Error");
	        logger.warn("test_warn");
	        logger.info("test_Info");
	        logger.debug("test_debug");
	        MDC.remove("userId");
	}
}
 

控制台输出:
2012-05-12 22:08:01,156 FATAL [SYSTEM] - test_fatal
2012-05-12 22:08:01,156 ERROR [SYSTEM] - test_Error
2012-05-12 22:08:01,421 WARN [SYSTEM] - test_warn
2012-05-12 22:08:01,421 INFO [SYSTEM] - test_Info

数据库记录查询:
SQL> select userid,loglevel,message from xt_sys_log;

    USERID LOGLEVEL             MESSAGE
---------- -------------------- --------------------
        11 ERROR                test_Error

注意:仅记录了一条日志。
分享到:
评论
3 楼 wallimn 2013-09-05  
没有用过,因此没有有看过LOG4J的源码,估计是用线程安全的变量来保存信息的吧。
2 楼 uuhorse 2013-09-04  
你好!请问上述测试有没有应用于开发环境中?测试环境写一条数据是没有问题的,但在web环境里面,有很多用户访问的时候,MDC如何解决多线程问题,如何保证userId是当前会话中的用户id?
1 楼 huchuhan 2013-05-08  
  非常感谢 无比受用.

相关推荐

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

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

    log4j-1.2.17

    通过阅读文档,开发者可以更好地理解和利用log4j的全部功能,如自定义Appender、过滤器、异步日志记录等。 五、进阶应用 1. **日志性能优化**:合理设置日志级别,避免过多的日志输出影响系统性能。 2. **日志分级...

    log4j-1.2.14.jar1

    Log4j是一个开源的Java日志框架,它提供了丰富的日志记录功能,包括不同级别的日志输出(DEBUG、INFO、WARN、ERROR、FATAL),以及可定制的日志格式和输出目的地(控制台、文件、数据库等)。1.2.14是Log4j的一个...

    log4j-core-2.5

    配置Log4j-core-2.5通常涉及创建一个`log4j2.xml`或`log4j2.json`文件,指定日志级别、输出目的地(如控制台、文件、数据库等)、布局(如PatternLayout、XMLLayout等)以及过滤规则。例如,以下是一个简单的XML配置...

    log4j使用手册和配置文件实例

    Log4j的配置文件通常是`log4j.properties`或`log4j.xml`,用于设置日志器、输出器和布局等相关属性。以下是一些基本配置示例: ```properties # 配置控制台输出 log4j.rootLogger=DEBUG, Console log4j.appender....

    log4j**************************

    相比`System.out.println`,Log4j具有许多优势,例如它允许在运行时动态地打开或关闭日志,可以选择特定包或类的日志输出,可以对日志进行分级,支持多种输出格式,甚至可以将日志信息输出到不同的位置。 要开始...

    Log4jAPI 应用案例 配置说明 log4jjar包

    Log4j是Java平台上广泛使用的日志记录框架,它的全称是Apache Log4j,它为应用程序提供了灵活的日志记录功能。在Java开发中,日志记录是非常关键的一部分,可以帮助开发者跟踪程序运行状态,定位错误,进行性能分析...

    log4j使用完全指南

    2. 日志级别:Log4J提供了五种级别,按照严重性从高到低排列为FATAL、ERROR、WARN、INFO和DEBUG。开发者可以根据需要选择相应级别的日志输出,例如`logger.info("This is an informative message.")`。 三、日志...

    log4j学习资料

    除了默认的Appender和Layout,Log4j还允许自定义实现,以满足特定的需求。例如,你可以创建一个将日志发送到邮件服务器的Appender,或者定义一个输出JSON格式的日志的Layout。 **6. 实用技巧** - **异步日志**:...

    用到的两个log4j日志架包

    这个版本包含了Log4j的核心组件,包括Appenders(输出目的地)、Layouts(日志格式化)、Loggers(日志记录器)和Filters(过滤器)。通过配置XML或.properties文件,可以灵活地定制日志策略,比如设置不同级别的...

    mybatis、mysql、log4j等常见jar包

    - 灵活性:通过配置文件(如log4j.properties或log4j.xml),开发者可以自定义日志级别(DEBUG、INFO、WARN、ERROR、FATAL)、输出目的地(控制台、文件、网络、数据库等)和格式。 - 性能优化:Log4j在运行时能够...

    Log4j总结

    2. 配置文件:创建一个名为log4j.properties或log4j.xml的配置文件,定义日志级别、输出目的地、格式等。 3. 日志API:在代码中通过LoggerFactory获取Logger实例,然后调用debug、info、warn、error、fatal等方法...

    log4j 1.2.12.zip

    Log4j支持七种日志级别,按严重程度从低到高排序:TRACE、DEBUG、INFO、WARN、ERROR、FATAL和OFF。根据不同的场景,可以通过配置调整日志级别,控制输出的日志信息量。 5. **性能优化** - 使用异步Appender可以...

    [0积分下载] log4J.rar

    Log4j主要由三个核心组件构成:Logger(日志器)、Appender(输出端)和Layout(布局)。Logger负责生成日志事件,Appender负责将这些事件输出到指定的地方,如控制台、文件、数据库等,而Layout则决定了日志事件的...

    log4j的相关jar包

    Log4j是Java编程语言中广泛使用的日志记录框架,其设计目的是为了提供灵活且强大的日志输出功能。这个框架允许开发者控制日志信息的输出级别、格式以及目的地,极大地提高了应用程序的日志管理效率。在Java开发环境...

    de.jayefem.log4e_free_1.2.1.zip

    相比传统的`System.out.println()`,Log4j提供了更高级别的日志管理,例如过滤信息、分级处理、输出格式定制等,极大地提升了开发效率和日志分析的便利性。 二、Log4j的核心组件 1. **Logger**:日志记录器,它是...

    log4js.7z

    log4js起源于Java世界的log4j,是一款灵活且可配置的日志模块,专为Node.js设计。它支持多种输出格式,如控制台、文件、数据库等,且可以自定义级别和布局,方便开发者进行不同级别的日志记录。 2. **核心概念** ...

    Log4NET详细配置教程

    这个组件的起源可以追溯到2001年,由NeoWorks Limited启动,其设计灵感来源于Java平台上的著名日志框架log4j。Log4NET的核心特性在于它的灵活性和可扩展性,能够满足各种日志记录需求。 在软件开发中,日志记录扮演...

    log4cplus-2.0.5.tar.gz

    Log4cplus,一个源于Java的log4j项目的C++版本,是Linux环境中广泛使用的日志库之一。本文将深入探讨log4cplus-2.0.5这一特定版本,包括其主要功能、使用方法以及在Linux系统中的集成。 1. **Log4cplus简介** Log4...

Global site tag (gtag.js) - Google Analytics