log4j是一个优秀的开源日志记录项目。我们不仅能够对输出的日志的格式自定义,还能够自定义日志输出的目的地,比方:屏幕。文本文件,数据 库,甚至能通过socket输出。本节使用MySQL数据库主要讲述怎样将日志信息输入到数据库中。
        用log4j将日志写入数据库主要用到是log4j包下的JDBCAppender类。它提供了将日志信息异步写入数据的功能。我们能够直接使用这个类将我 们的日志信息写入数据库;也能够扩展JDBCAppender类,就是将JDBCAppender类作为基类进行二次开发获得一个新的具有全部JDBCAppender类属性和行为的子类。

以下能够直接使用log4j包下的JDBCAppender类,通过一个实例来解说log4j是怎样将日志信息写入数据库的:
        需求:我们在软件开发的过程中须要将调试信息、操作信息等记录下来,以便后面的审计,这些日志信息包含用户ID、用户姓名、操作类、路径、方法、操作时间、日志信息。

设计思想:我们採用JDBCAppender类直接将日志信息插入数据库。所以仅仅须要在配置文件里配置此类就能够;要获得用户信息须要用过滤器来实现(假如不须要用户的信息,就不须要设计过滤器。事实上大部分情况下都是须要这些用户信息。尤其是在web应用开发中)。

在日志信息中获得用户信息,就是通过过滤器的request或session对象来实现的,但是用户信息怎样传到log4j呢,log4j为我们提供MDC这一log4j中很实用的类。它用于存储应用程序的上下文信息(context Infomation)。从而便于在log中使用这些上下文信息。MDC内部使用了相似map的机制来存储信息,上下文信息也是每一个线程独立地储存。所不同的是信息都是以它们的key值存储在“map”中。

相相应的方法为:“MDC.put(key, value); MDC.remove(key); MDC.get(key); ”。

在配置PatternLayout的时候使用:%x{key}来输出相应的value)。有了MDC,我们能够在过滤器中先获得用户信息,再用MDC.Put(“key”)方法。log在运行sql语句时通过%x{key}来输出相应的value 。

下载JavaWeb项目

怎样借助log4j把日志写入数据库中的更多相关文章

  1. log4j输出日志到数据库中

    1.log4j配置 ###----------------- appender:DATABASE_LOG -----------------#指定输出日志的等级和日志输出范围log4j.logger. ...

  2. 用log4j将日志写入数据库

    以下为log4j中的配置参数: %m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %t 输出产 ...

  3. 使用log4j让日志写入数据库

    之前做的一个项目有这么个要求,在日志管理系统里,需要将某些日志信息存储到数据库里,供用户.管理员查看分析.因此我就花了点时间搞了一下这一功能,各位请看. 摘要:我们知道log4j能提供强大的可配置的记 ...

  4. 使用log4j将日志写入数据库并发送邮件

    参考: 快速了解Log4J 1.log4j的初始配置 参考该问的配置即可完整的实现写入数据库及发送邮件的功能 a.写入数据库需要配置相应的jar包,数据库类型不同,请使用指定的数据库配置,该文仅限于o ...

  5. logback日志写入数据库(mysql)配置

    如题  建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1  logback 配置文件(如下) <?xml version="1.0" encoding ...

  6. mySql---logback日志写入数据库(mysql)配置

    如题  建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1  logback 配置文件(如下) <?xml version="1.0" encoding ...

  7. 解决tomcat下面部署多个项目log4j的日志输出会集中输出到一个项目中的问题

    在一次项目上线后,发现了一个奇怪的问题,经过对源码的阅读调试终于解决,具体经过是这样的: 问题描述:tomcat7下面部署多个项目,log4j的日志输出会集中输出到一个项目中,就算配置了日志文件的绝对 ...

  8. Log4Net的应用教程之保存日志到数据库中

    关于Log4Net的应用,网上有很多教程,但大多数都是拷贝复制,有些按照他的代码来,运行起来发现也出不来效果,但是Log4net的作用实在是非常大的,或者这里说的不对,应该说系统的日志功能是很重要的也 ...

  9. 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中。需要对提交的信息进行修改,信息填入不能为空,为空则则有提示。

    jsp结合SQLSERVER向数据库中的表添加图书信息. 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中.需要对提交的信息进行修改,信息填入不 ...

随机推荐

  1. node03--http

    form.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. centos7 安装swftools Apache_OpenOffice

    centos7 yum -y install wget wget http://www.swftools.org/swftools-0.9.2.tar.gz tar -xf swftools-.tar ...

  3. C语言基础-第三章

    C语句和数据输入/输出(函数) 1.printf();输出函数 2.getch();输入函数 3.scanf();格式输入 4.puts();字符串输出 5.gets();字符串输入

  4. pandas学习系列(一):时间序列

    最近参加了天池的一个机场航空人流量预测大赛,需要用时间序列来预测,因此开始使用python的pandas库 发现pandas库功能的确很强大,因此在这记录我的pandas学习之路. # -*- cod ...

  5. 使用HANDLECOLLISIONS的几个场景

    使用HANDLECOLLISIONS的几个场景: 1.target丢失delete记录(missing delete),忽略该问题并不记录到discardfile 2.target丢失update记录 ...

  6. python(2) 图像通道,几何变换,裁剪

    一.图像通道 1.彩色图像转灰度图 from PIL import Image import matplotlib.pyplot as plt img=Image.open('d:/ex.jpg') ...

  7. [NOI2010]海拔 平面图转对偶图 最小割

    题解: 首先,我们不难猜到高度只有 $0$ 或 $1$ 两种可能,而且高度为 0 的地区组成一个联通块,高度为 1 的地区组成一个联通块.只有这样,人们所耗费的体力才是最小的.得出这个结论,题目就成了 ...

  8. Unity Shader实现各种进度条

    1.圆形进度条shader Shader "ProgressBar360" { Properties { _BGTex("Background Texture" ...

  9. java回调方法、钩子方法以及模板方法模式

    在面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象,其处理事件的方法叫做回调方法.(摘自百度百科) 那么通过上面那句话将百度百科中的&qu ...

  10. ArcGIS api for javascript——地理处理任务-服务区域任务

    描述 本例展示了如何发送一些输入值到ArcGIS Server上的GIS模型并获得结果反馈给web应用.本例中,模型计算自在地图上单击点起始的驱动时间多边形. 例如,这个分析类型可用于想要知道多少人生 ...