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. 将一个文件夹纳入library或者移除remove

    https://support.microsoft.com/en-us/help/4026298/windows-show-libraries-in-file-explorer To show lib ...

  2. LBP(Local Binary Patterns)局部二进制模式

    1. LBP 用于人脸识别 为了预测每个像素属于哪个脸部器官(眼睛.鼻子.嘴.头发),通常的作法是在该像素周围取一个小的区域,提取纹理特征(例如局部二值模式),再基于该特征利用支持向量机等浅层模型分类 ...

  3. POJ 2373 单调队列优化DP

    题意: 思路: f[i] = min(f[j]) + 1; 2 * a <= i - j <= 2 *b: i表示当前在第i个点.f[i]表示当前最少的线段个数 先是N^2的朴素DP(果断 ...

  4. 在Ubuntu下使用命令删除目录

    在Ubuntu命令行中用命令删除目录,现在在Linux系统中删除目录大致会用两个,rm和rmdir,rm命令删除目录很简单,不过很多人还是比较习惯用rmdir命令,如果操作的目录非空时就有点麻烦.这时 ...

  5. @synchronized 再考察

    核心是:将标示对象与锁建立关联. 线程 锁 标识: 异常: NSString *test = @"test"; @try {     // Allocates a lock for ...

  6. 重复执行shell脚本。

    while ((1)); do gclient runhooks; sleep 2; donewhile ((1)); do ifconfig; sleep 1; done

  7. include、require、include_once和require_once的区别

    /*** * 1.include 和 require 的文件可以有返回值 * 2.include 包含的文件不存在,会发出一个警告,但是不会停止执行代码. * require 在这种情况下会抛出错误并 ...

  8. Tp5 的 validate 自动验证

    tp5自带的验证功能: 用法之一: $validate = new \think\Validate([ ['name', 'require|alphaDash', '用户名不能为空|用户名格式只能是字 ...

  9. 单调队列&单调栈归纳

    单调队列 求长度为M的区间内的最大(小)值 单调队列的基本操作,也就是经典的滑动窗口问题. 求长度为M的区间内最大值和最小值的最大差值 两个单调队列,求出长度为M的区间最大最小值的数组,分别求最大最小 ...

  10. 转载 :Linux有问必答:如何在Debian或Ubuntu上安装完整的内核源码

    http://linux.cn/article-5015-1.html 问题:我需要为我的Debian或Ubuntu下载并安装完整树结构的内核源码以供编译一个定制的内核.那么在Debian或Ubunt ...