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. nj09---util、inherits、inspect、events、error

    一.util全局变量 1.util.inherits(constructor,superConstructor) 此方法是一个实现对象间原型继承的函数.javaScript通过原型赋值来实现继承,细节 ...

  2. BZOJ 3110 线段树套线段树

    思路: 外围一个权值线段树 里面是个区间线段树 搞一个标记永久化 //By SiriusRen #include <cstdio> #include <cstring> #in ...

  3. manacherO(n)求最长回文子串 hihocoder1032

    原文地址:https://segmentfault.com/a/1190000003914228   http://blog.csdn.net/synapse7/article/details/189 ...

  4. session 存入 redis

    <?php header('content-type:text/html;charset=utf-8'); /* * 更改 session 存储位置及存储方式. */ ini_set('sess ...

  5. POJ 3539 Elevator(同余类BFS)

    题意 有一部电梯,最初停在1层. 电梯有4个按键,上升a,b,c层,回到一层. 求从一层出发.能到达1~h的哪些楼层. (h<=1018,a,b,c<=105) 题解 这种h能大的图论,一 ...

  6. websocket调试工具

    http://www.blue-zero.com/WebSocket/ wss://yy.xxx.com/video/websocket/client.ws

  7. git error: object file .git/objects/b9/e269f50db2a3415cc8ad5ba40b82b9b6a13d45 is empty

    错误现象: 解决方法: 1.  find .git/objects/ -type f -empty | xargs rm 2. git fetch -p 3. git fsck --full

  8. 洛谷 P1754 球迷购票问题

    P1754 球迷购票问题 题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的 ...

  9. 【翻译自mos文章】私有网络所用的协议 与 Oracle RAC

    说的太经典了,不敢翻译.直接上原文. 来源于: Network Protocols and Real Application Clusters (文档 ID 278132.1) PURPOSE --- ...

  10. [Poi] Build and Analyze Your JavaScript Bundles with Poi

    Ever wonder where those extra KB in your bundle are coming from? This lesson walks you through runni ...