昨天公司说要在系统中添加日志查询统计功能,刚开始第一个念头就是用IO流读
取日志文件,然后持久化,最后在系统中查询。结果看了一些LOG4J的说明文档后发现,原来LOG4J本身就有将日志信息存入数据库功能,这样就大大节省
了开发的时间,半天搞定。现在把方法记录下来,希望对有需要的朋友有所帮助。
一、前提条件
系统必须是使用LOG4J进行日志管理,否则方法无效。
系统必须包含commons-logging-xxx.jar,log4j-xxx.jar这两个JAR包,XXX为版本号。
二、操作步骤
1、创建日志表
要把日志持久化,必须在数据库中创建一张用来存储日志信息的表,表内字段为日志
的一个主要属性包括:操作类,执行方法,打印时间,日志级别,日志内容。
CREATE TABLE RESLOG (LOGID VARCHAR2(20) NOT NULL,
CLASS VARCHAR2(200),
METHOD VARCHAR2(100),
CREATETIME DATE,
LOGLEVEL VARCHAR2(50),
MSG VARCHAR2(4000))
因为存储的类为类的全部路径,所以CLASS字段长度需要比较大。
2、日志管理配置
LOG4J主要有两种配置文件.properties和.xml,这里以properties文件为基础来讲
述,关于XML文件的配置,相信大家看完下面的介绍也一样能轻松完成。
通常在LOG4J.PROPERTIES文件的第一行是:
log4j.rootLogger= XXX,这句是控制日志的输出,如果想吧日志输出到数据库,
则需要在XXX中添加“DB”,如log4j.rootLogger=INFO,stdout,Platform,db。上面
这句就是把日志中级别为INFO的信息输出到STDOUT,PLATFORM和DB
(DATABASE)中。
配置好如上的信息,LOG4J就知道用户是想把信息存入数据库,接下来我们就要来
配置数据库的相关信息(包括缓存,数据库连接信息,和执行SQL),配置信息如下:
###JDBCAppender
log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender
//这个配置是选择使用JDBCAppender方法,将日志信息存储到数据库。当然,如果你还要做其他操作,可以自己写个类,继承JDBCAppender就OK了。
log4j.appender.db.BufferSize=1
//这个配置是告诉LOG4J,有多少条日志信息后才存入数据库,我这里是1,就是说有一条就查一条,显然这样在生产环境下是很影响系统性能的。
log4j.appender.db.driver=oracle.jdbc.driver.OracleDriver
//这个配置是告诉LOG4J,做数据库存储所用的驱动。
log4j.appender.db.URL=jdbc:oracle:thin:@<ip>:<port>:<sid>
//这个配置数据库连接的URL,不用说也都知道。
log4j.appender.db.user=XXX
log4j.appender.db.password=XXX
//上面两个是数据库连接时的用户名和密码
log4j.appender.db.sql=insert into RESLOG
(LogId,Class,Method,createTime,LogLevel,MSG)
values (SQ_RESLOG_LOGID.Nextval,'%C','%M',
to_date('%d{yyyy-MM-dd HH:mm:ss}','yyyy-MM-dd
HH24:mi:ss'),'%p','%m')
//这个配置是告诉当LOG4J吧日志存储数据库时用的SQL语句。SQ_RESLOG_LOGID.Nextval是我建的一个
SEQUENCE;‘%C’是日志中的CLASS;‘%M’是打印日志是执行到类里的方法;‘%d’是打印的时间,它支持格式化;‘%P’是日志级别,包
括INFO、DEBUG、ERROR等;‘%m’是MSG,日志内容。注意这里的参数区分大小写。
log4j.appender.db.layout=org.apache.log4j.PatternLayout
通过上面的配置,现在再启动服务,LOG4J就会自动把原来存储在.LOG文件中的信息,同时存储到数据库了。
当然,LOG4J还支持自定义参数,如打印日志时当前的用户信息等,这个以后以机会再说。
分享到:
相关推荐
log4j 日志信息存储到数据库的相关配置与使用
使用log4net进行日志记录在项目中使用的示例。 本示例中包含常用的写日志到文件(按日期自动生成文件名称)及写日志到SQLite数据库两种方式。 示例资源中包含源码及演示作品两部分,使用前请先修改SQLite数据库的...
1、创建日志表 要把日志持久化,必须在数据库中创建一张用来存储日志信息的表,表内字段为日志 的一个主要属性包括:操作类,执行方法,打印时间,日志级别,日志内容。 CREATE TABLE RESLOG (LOGID VARCHAR2(20)...
log4netSimple普通文件、数据库等日志存储.日志存储,log4net
包含普通文件日志分类存储,以及数据库日志存储 日志详解:https://segmentfault.com/a/1190000010866959
利用log4net记录日志,将数据库异常和系统异常存储到记事本中。
当前日志放在log4j.appender.File.File=${user.dir}/logs/hmiservice.log对应的命名文件中, 过了时间将原日志文件命名为原文件名后加上log4j.appender.File.DatePattern='.'yyyy-MM-dd-HH对应格式的日期, 注意不能...
主要介绍了SpringBoot Logback日志记录到数据库的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
HyperLog Android概述日志格式下载初始化使用情况获取文件中的日志使用RequestBin示例测试端点将文件推送到远程服务器示例测试端点...这是一个简单的库,它将允许Android应用程序或库将日志存储到数据库中,以便开发
AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。 ConsoleAppender 将日志输出到应用程序控制台。 EventLogAppender 将日志写到Windows Event Log。 FileAppender 将日志输出到文件。 ...
express框架写的nodejs项目,用到了mysql数据库(使用连接池)、redis缓存、log4js打印日志、简单根据cookie验证登陆、调用mysql存储过程......
本文实例讲述了Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法。分享给大家供大家参考,具体如下: Laravel中使用monolog_mysql将系统日志信息保存到mysql数据库 源码参考: ...
Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架,它的功能很强大,可以将日志分为不同的等级,以不同的格式输出到不同的存储介质中,比如:数据库、txt文件、内存缓冲区、邮件、控制台、ANSI终端、...
这是一个简单的库,将允许Android应用程序或库将log存储到database以便开发人员可以将数据库中的日志提取到“ File或将日志推送到remote server以进行debugging 。 想要更多地了解这一点,并想知道为什么您比自己...
Laravel登录到数据库 自定义Laravel 5.6+日志通道处理程序,可以将日志事件存储到SQL或MongoDB数据库。 使用Laravel本机日志记录功能。 :warning_selector: 这个项目应该向下兼容,包括Laravel 5.6和PHP 7.1。 但是...
* 封装了日志输出的的各种方法,本类模仿了log4j的输出格式,定义 * 了1、日志输出到控制台,2、日志输出到文件,3、日志发送邮件, * 4、日志存入数据库,5、 日志发送邮件并存入库,6、日志发送邮件和输出到...
应用开发时的常规做法,是调用日志系统的API进行日志的记录,日志的具体记录方式,通过日志系统实现库对应的配置文件进行配置,比如使用log4j2的话,可能就是log4j2.xml文件,日志通常是记录到文件中的,如果要查看...
SQLServer的每个数据库都包含事物日志,它以文件的形式存储,可以记录数据库的任何变化。发生故障时SQLServer就是通过它来保证数据的完整性。 操作(Operation) 操作是数据库中定义的"原子行为",每个操作都在...
数据库的日志文件逻辑名称为employees_log,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。存放路径为D:\DATA\,其他均采用默认设置。 (2) 利用SQL Server Management Studio添加次要数据文件employee2和事物日志...
文档里是关于log4net配置文件及写入数据库的表结构,这里产生日的日志是按不同的日志类型分类存储的,精确到每一个日志文件。