Log4j.properties配置

log4j.rootLogger = info,stdout,D,E,A3

log4j.appender.Threshold=info

### 控制台输出###

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target = System.out

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern = %d{yyyy MMM dd HH\:mm\:ss,SSS}%m%n

### DEBUG 文件保存至D://PDFPolling/Log/error.log ###

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.File = D\://PDFPolling/Log/log.log

log4j.appender.D.Append = true

log4j.appender.D.Threshold = DEBUG

log4j.appender.D.layout = org.apache.log4j.PatternLayout

log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### ERROR 文件保存至 D://PDFPollingLog/error.log ###

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.File =D://PDFPolling/Log/error.log

log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}  [ %t\:%r ] - [ %p ]

###保存至数据库###2017.12.18注释掉  rootCategory 旧;rootLogger 新=rootCategory的子类

##定义输出sql语句到控制台,文件,数据库(仅供样式参考,实际由于输出info级别的,此处定义debug无法输出)

##log4j.rootCategory=ERROR,A3

log4j.logger.Java.sql.Connection=debug

log4j.logger.java.sql.Statement=debug

log4j.logger.java.sql.PreparedStatement=debug,stdout,D,E,A3

##定义sql语句输入到stdout控制台,DE文件,A3数据库,sql语句是debug级别的,而一开始定义的rootlogger是info级别的,所以这里其实定义不起什么作用;如果要sql语句输出到控制台,可以将rootlogger设置为debug级别输出

#定义A3输出到数据库

log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.A3.URL=jdbc\:sqlserver\://127.0.0.1\:53565;DatabaseName\=PDFP

log4j.appender.A3.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

log4j.appender.A3.user=sa

log4j.appender.A3.password=000000

#定义A3的布局和执行的SQL语句

log4j.appender.A3.Append = true

log4j.appender.A3.Threshold = WARN

log4j.appender.A3.layout=org.apache.log4j.PatternLayout

log4j.appender.A3.layout.ConversionPattern=INSERT INTO

TPDFLOG(CREATEDATE,THREAD,GRADE,CLASS,MESSAGE,PID,CURRENTSTATE) values('%d','%t','%-5p','%c','%m','%X{pid}',%X{currentstate})

输出日志到数据库

注意,开头log4j.rootLogger = info,stdout,D,E,A3定义了输出info级别到stdout控制台,D,E日志文本,A3数据库,但是在定义输出到A3数据库时,又定义了:log4j.appender.A3.Threshold = WARN表示最低输出级别;

也就是说:开头一句定义了info级别以上的输出到A3,后来又特定对A3定义了最低输出级别为WARN,实际上只有WARN以上级别的日志才会输出给A3;可以理解为,rootlogger是一般性定义,而threshold是特定性定义,实际级别是输出2者重叠的部分!

在异常表里面自定义字段

如果想异常表与业务表关联起来,必须在异常表类添加与业务表关联的自定义字段;

INSERT INTO

TPDFLOG(CREATEDATE,THREAD,GRADE,CLASS,MESSAGE,PID,CURRENTSTATE) values('%d','%t','%-5p','%c','%m','%X{pid}',%X{currentstate})

注意,pid,和currentstate是要在日志在输入给数据库之前,必须先设置好,在logger.ERROR(“…”)之前:

MDC.put("pid", pid);

MDC.put("currentstate", 1);//1准备  2生成PDF 3上传 4归档

这里用到了MDC,一开始在MDC里面存入这2个自定义字段的值,之后当捕获到异常时,log4j根据级别准备执行上述sql语句以存储信息到数据库中对应的数据表,PID,CURRENTSTATE就是自定义的字段,sql语句中从MDC取值为'%X{pid}',%X{currentstate},前者string,后者Integer;

Ps:MESSAGE是当你在java中执行logger.ERROR(“相关信息”)时,ERROR括号中的部分,也就是’%m’, 其他的

'%d','%t','%-5p','%c'同理,log4j会自动取值;

因为sql语句中要从MDC中的自定义字段取值,所以当你logger.error准备存储日志给数据库之前,必须保证MDC

有对应的自定义字段的key-value,如果没有设置,那么在log4j存储到数据库时,会执行sql异常导致存储到数据库失败;

log4j配置输出到数据库+自定义字段的更多相关文章

  1. log4net记录日志到数据库自定义字段

    假设数据库中有如下自定义字段:   1.根据自定义字段定义日志信息对象     public class MessageLog     {           /// <summary> ...

  2. log4j配置输出到多个日志文件

    通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那么我们log4j为我们提供了这种功能,以下我们来一步一步看是怎么做的.这里以property的配置方式写. ...

  3. log4j配置输出到多个日志文件(转)

    參考资料:http://logging.apache.org/log4j/1.2/manual.html 通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那 ...

  4. log4j配置输出日志文件

    在测试程序时,有时候运行一次可能需要很久,把日志文件保存下来是很有必要的,本文给出了scala程序输出日志文件的方式,同时使用本人的另一篇博客中介绍的将log4j.properties放到程序jar包 ...

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

    转载自:http://wallimn.iteye.com/blog/1525819 Log4J日志输出到数据库中,且保存些用户自定义的参数,如用户ID,且配置仅输出指定级别的日志.  配置文件如下:  ...

  6. log4j输出多个自定义日志文件,动态配置路径

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

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

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

  8. log4net自定义字段写入SqlServer数据库 ASP.net

    首先申明,本示例经过本作者亲自试验通过,可以运行 第一步 编写log4net配置文件 此处为Log.xml,该文件放在与Web.config平级的位置 <?xml version="1 ...

  9. log4j 配置日志输出(log4j.properties)

    轉: https://blog.csdn.net/qq_29166327/article/details/80467593 一.入门log4j实例 1.1 下载解压log4j.jar(地址:http: ...

随机推荐

  1. group - 用户组文件

    DESCRIPTION(描述) /etc/group 是一个ASCII码的文件,它定义了用户所属的组.文件中每行包括一条记录,其格式如下: group_name:passwd:GID:user_lis ...

  2. Python 进程 线程总结

    操作系统的底层是 进程 线程 实现的 进程 操作系统完成系统进程的切换,中间有状态的保存.进程有自己独立的空间,进程多,资源消耗大 进程是最小的资源管理单位 可以理解为盛放线程的容器 线程 线程是最小 ...

  3. C# 使用Epplus导出Excel [5]:样式

    C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...

  4. RabbitMQ学习(二):Java使用RabbitMQ要点知识

    转  https://blog.csdn.net/leixiaotao_java/article/details/78924863 1.maven依赖 <dependency> <g ...

  5. 使用Spring MVC后实现一个BaseController

    使用Spring MVC技术后,可以实现一个基类的Controller类来分装一些MVC常用的方法,其他的Controller都继承自这个BaseController,这样在使用常用的方法时将会变得非 ...

  6. Python PyAudio 安装使用

    Python PyAudio安装: Python3.7 无法安装pyaudio pip install pyaudio提示error: Microsoft Visual C++ 14.0 is req ...

  7. Head First Python (二)

    if...else... 1 movies = ["The Holy Grail",1975,"Terry Jones & Terry Gilliam" ...

  8. stm32L011F3使用开发小记——开发坏境

    今日,因工作需要,使用到了stm32L011F3芯片,此芯片基于CM0+内核,属于低功耗芯片 开发平台可以免费用于KEILMDK,keil公司用免费的许可证,网址:https://www2.keil. ...

  9. 【HIHOCODER 1420】 Bigint Multiplication

    描述 Given 2 nonnegative integers a and b, calculate a × b. 输入 One line with 2 integers a and b separa ...

  10. jmeter throughput controller

    工作方式:可以按规定次数执行,也可以选择按百分比执行,其中的百分比必须是10,20,30类似的整数. 使用场景:可以随机的去按百分比浏览网址. 以下是具体脚本: