我是靠谱客的博主 温柔未来,最近开发中收集的这篇文章主要介绍log4j输出到数据库(输出自定义参数、分级保存),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

[b]配置文件如下:[/b]
log4j.rootLogger=DEBUG,logfile,stdout

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

#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
[color=red]#此处优先级高于log4j.logger.SYSTEM指定级别,[/color]
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
[color=red]#只接收ERROR级别的日志,这是很有用的技术
#这功能在1.2.8版本时,不支持这样配置,好像仅支持XML方式配置,我试了好多次才发现这个问题
#可多个Filter组合共同限制[/color]
log4j.appender.JDBC.filter.F1.levelMin=ERROR
log4j.appender.JDBC.filter.F1.levelMax=ERROR
log4j.appender.JDBC.filter.F1.acceptOnMatch=true

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

[b]测试类:[/b]


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");
}
}


[b]控制台输出:[/b]
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

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

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

[color=red]注意:仅记录了一条日志。[/color]

最后

以上就是温柔未来为你收集整理的log4j输出到数据库(输出自定义参数、分级保存)的全部内容,希望文章能够帮你解决log4j输出到数据库(输出自定义参数、分级保存)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部