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. 剑指offer55 字符流中第一个不重复的字符(最典型错误)

    典型并且基础的错误: class Solution { public: //Insert one char from stringstream void Insert(char ch) { ) res ...

  2. javaweb基础(12)_session详解

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  3. 远程连接 mySql数据库

    远程连接 mySql数据库 一.安装并配置MySQL1.安装MySQL:运行mysql-essential-6.0.11-alpha-win32,按“MySQL+6.0+Windows下安装图解”完成 ...

  4. iOS开发中的Self-Manager 模式

    Self-Manager 源于我们团队内部的黑话,“诶?你刚去的创业公司有几个 iOS 开发啊?” “就我一个” “靠,你这是 Self-Manager 啊” 最近,这个思路被我们当做了一种设计模式, ...

  5. 配置基于Vim的Python开发环境

    配置基于Vim的Python开发环境插件 Vundle YouCompleteMe NERDTree Vim-Jinja2-Syntax set nocompatible " be iMpr ...

  6. linux关于yum

    yum仓库设置:1.cd /etc/yum.repos.d yum仓库 2.CentOS-Base.repo 网络源 CentOS-Media.repo 光盘源 设置 vi CentOS-Media. ...

  7. html5音频audio对象封装成vue组件的方式调用以及setTimeout如何在vue2生效 (vue2正在熟悉中,ajax还是用jQuery来写舒服些,里面含有一些php写法可略过) 此网页应用在PC不考虑手机端

    // vue2 组件封装如下: <template> <div> <div><!--vue element 组件的引用 Switch 开关 不懂请自行百度(重 ...

  8. LeetCode(122) Best Time to Buy and Sell Stock II

    题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...

  9. POJ2594拐点弯的二分

    开始读题没理解题意,以为就是覆盖,可是怎么交都不对... 我就气愤了,结果去百度了一下发现奶奶的这题的机器人是可以隔点瞭望的,例如1->2->3.2->4.5->2  这个图 ...

  10. meteor 检测运行环境,手机或者桌面

    meteor add mystor:device-detection Meteor.Device.isPhone() https://atmospherejs.com/mystor/device-de ...