log4j配置输出到数据库+自定义字段
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配置输出到数据库+自定义字段的更多相关文章
- log4net记录日志到数据库自定义字段
假设数据库中有如下自定义字段: 1.根据自定义字段定义日志信息对象 public class MessageLog { /// <summary> ...
- log4j配置输出到多个日志文件
通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那么我们log4j为我们提供了这种功能,以下我们来一步一步看是怎么做的.这里以property的配置方式写. ...
- log4j配置输出到多个日志文件(转)
參考资料:http://logging.apache.org/log4j/1.2/manual.html 通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那 ...
- log4j配置输出日志文件
在测试程序时,有时候运行一次可能需要很久,把日志文件保存下来是很有必要的,本文给出了scala程序输出日志文件的方式,同时使用本人的另一篇博客中介绍的将log4j.properties放到程序jar包 ...
- log4j输出到数据库(输出自定义参数、分级保存)
转载自:http://wallimn.iteye.com/blog/1525819 Log4J日志输出到数据库中,且保存些用户自定义的参数,如用户ID,且配置仅输出指定级别的日志. 配置文件如下: ...
- log4j输出多个自定义日志文件,动态配置路径
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...
- 使用log4j配置不同文件输出不同内容
敲代码中很不注意写日志,虽然明白很重要.今天碰到记录日志,需要根据内容分别输出到不同的文件. 参考几篇文章: 感觉最详细:http://blog.csdn.net/azheng270/article/ ...
- log4net自定义字段写入SqlServer数据库 ASP.net
首先申明,本示例经过本作者亲自试验通过,可以运行 第一步 编写log4net配置文件 此处为Log.xml,该文件放在与Web.config平级的位置 <?xml version="1 ...
- log4j 配置日志输出(log4j.properties)
轉: https://blog.csdn.net/qq_29166327/article/details/80467593 一.入门log4j实例 1.1 下载解压log4j.jar(地址:http: ...
随机推荐
- 使用EventLog组件向本机现有日志中添加条目
实现效果: 知识运用: EventLog组件的MachineName属性 //获取或设置在其上读取或写入事件的计算机名称 public string MachineName {get;set; } ...
- 约束Constraints
1.setNeedsUpdateConstraints:当想要调整子视图布局时,在主线程调用该方法标记constraint需要在未来的某个点更新(该方法不会立刻强制刷新constraint,而是等待下 ...
- java实现可安装的exe程序
java实现可安装的exe程序 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格式的ja ...
- 日志切割logrotate和定时任务crontab详解
1.关于日志切割 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处 ...
- Linux 用户管理(一)
一.基础知识介绍 用户 用户组的概念 每个文件和进程,都需要对应一个用户和用户组 linux 系统通过UID和 GID识别用户和组 用户名相当于人名(给人看) UID和GID相当于身份证(系统用的) ...
- [译]The Python Tutorial#5. Data Structures
[译]The Python Tutorial#Data Structures 5.1 Data Structures 本章节详细介绍之前介绍过的一些内容,并且也会介绍一些新的内容. 5.1 More ...
- stm32之PWM学习
下图是一个STM32普通PWM形成的图形原理说明 自动重装载寄存器(ARR)用于确定波形的频率(即周期).捕获比较寄存器(CCRx)(用于确定占空比的) PWM的工作过程如下:首先ARR寄存器里面的值 ...
- POJ:3228-Gold Transportation(要求最小生成树最大边最小)
Gold Transportation Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3079 Accepted: 1101 D ...
- UVa 10723 LCS变形 Cyborg Genes
题解转自: UVA 10723 Cyborg Genes - Staginner - 博客园 首先这个题目肯定是按最长公共子序列的形式进行dp的,因为只有保证消去的一部分是最长公共子序列才能保证最后生 ...
- Ubuntu首次登入与在线求助man page总结
1.为了避免瞬间断电造成的Linux系统的危害,建议做为服务器的Linux主机应该加上不断电系统来持续提供稳定的电力 2.默认的图形模式登入中,可以选择语系以及作业阶段.作业阶段为多种窗口管理员软件所 ...