转载自:http://wallimn.iteye.com/blog/1525819

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



测试类:

  1. package com.wallimn.test;
  2. import org.apache.log4j.Logger;
  3. import org.apache.log4j.MDC;
  4. import junit.framework.TestCase;
  5. public class Log4JTest extends TestCase {
  6. public void testLog1(){
  7. Logger logger = Logger.getLogger("SYSTEM");
  8. //Logger logger = Logger.getLogger(Log4JTest.class);
  9. MDC.put("userId", "11");
  10. logger.fatal("test_fatal");
  11. logger.error("test_Error");
  12. logger.warn("test_warn");
  13. logger.info("test_Info");
  14. logger.debug("test_debug");
  15. MDC.remove("userId");
  16. }
  17. }

控制台输出: 

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 



注意:仅记录了一条日志。

log4j输出到数据库(输出自定义参数、分级保存)的更多相关文章

  1. log4j配置输出到数据库+自定义字段

    Log4j.properties配置 log4j.rootLogger = info,stdout,D,E,A3 log4j.appender.Threshold=info ### 控制台输出### ...

  2. log4j 输出到 数据库

    # LOG4J配置 log4j.rootCategory=ERROR,stdout,errorfile,jdbc # 控制台输出 log4j.appender.stdout=org.apache.lo ...

  3. log4j.xml配置,包含自定义log4j日志级别及输出日志到不同文件

      一.配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configura ...

  4. 使用log4j配置不同文件输出不同内容

    敲代码中很不注意写日志,虽然明白很重要.今天碰到记录日志,需要根据内容分别输出到不同的文件. 参考几篇文章: 感觉最详细:http://blog.csdn.net/azheng270/article/ ...

  5. Asp.Net Core NLog 将日志输出到数据库以及添加LayoutRenderer的支持

    在这之前打算用Apache的Log4Net,但是发现其AdoNetAppender方法已经不存在了,无法使用配置文件直接输出到数据库了,因此我便改用了NLog框架. 一.对项目添加NLog 通过Nug ...

  6. 《手把手教你》系列基础篇(八十七)-java+ selenium自动化测试-框架设计基础-Log4j 2实现日志输出-上篇(详解教程)

    1.简介 Apache Log4j 是一个非常古老的日志框架,并且是多年来最受欢迎的日志框架. 它引入了现代日志框架仍在使用的基本概念,如分层日志级别和记录器. 2015 年 8 月 5 日,该项目管 ...

  7. log4net 控制台和文件和数据库输出三种方式

    1.新建console应用项目SendEvaluateDataToProvinceConsole 2.选择SendEvaluateDataToProvinceConsole项目右键 选择 管理NuGe ...

  8. Log4j 输出的日志中时间比系统时间少了8小时的解决方法,log4j日志文件重复输出

    1. 第一个问题:时间少了8小时 Log4j 输出的日志中,时间比系统时间少了8小时,但是 eclipse 控制台输出的日志的时间却是对的. log4j配置如下: #all logger output ...

  9. log4net:保存自定义参数到数据库

    log4net:保存日志到数据库 自定义参数 新建一个类,继承于PatternLayoutConverter public class CustomerPatternConverter : Patte ...

随机推荐

  1. SpringCloud IDEA 教学 番外篇 后台运行Eureka服务注册中心

    写在开头 研发过程中经常要做的事就是启动Eureka服务注册中心,每每都要启动一个IDEA,很是困扰.现在分享一个后台启动服务注册中心的方法. 准备工作 1打包一个eureka服务注册中心jar包(注 ...

  2. Eclipse安装颜色主题,个性化你的IDE,让你的IDE焕然一新

    我们都知道eclipse默认的颜色主题是白色的背景,但是如果想改变代码编辑区的背景颜色,需要怎么办呢? 今天给大家介绍一个非常赞的eclipse,可以很方便的根据自己的需求选择喜欢的颜色主题,其他的不 ...

  3. js学习之正则表达式

    js学习之正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模式 一:语法 ...

  4. Python中的Numeric

    整型Integer 在Python2.X中,Integer有两种类型,一种是32bit的普通类型,一种是精度无限制的long类型,在数字后面标识l或者L来标识long类型,并且,当32bit发生ove ...

  5. LintCode-53.翻转字符串

    翻转字符串 给定一个字符串,逐个翻转字符串中的每个单词. 说明 单词的构成:无空格字母构成一个单词 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括 如何处理两个单词间的多个空格 ...

  6. Personal summary 个人总结

    一.请回望开学时的第一次作业,你对于软件工程课程的想象 对比开篇博客你对课程目标和期待,"希望通过实践锻炼,增强计算机专业的能力和就业竞争力",对比目前的所学所练所得,在哪些方面达 ...

  7. KeyPress 和KeyDown 、KeyPress之间的区别

    虽然从字面理解, KeyDown是按下一个键的意思, 但实际上二者的根本区别是, 系统由KeyDown返回键盘的代码, 然后由TranslateMessage函数翻译成成字符, 由KeyPress返回 ...

  8. C#中整型数据类型

    C#中整型数据类型byte是8位的无符号整数,可是它表示的值的范围是0-255才3位啊怎么说是8位啊?谁能帮我解答 全部答案   八位二进制.0000 0000到1111 1111相当于十进制0-25 ...

  9. Android开发中如何解析Json

    解析Json 有了请求,自然会有响应,那我们该如何解析服务端响应返回给我们的Json数据呢? 了解什么是Json JSON(JavaScript object notation)是一种轻量级的数据交换 ...

  10. html的body内标签之input系列2

    一,input系列:name属性用于让后台拿数据.value 只是在屏幕上的显示. 1. input type='text' name='query' value="张三"(相当于 ...