在上一讲Apache log4j简明教程(一)中介绍了log4j的基本概念,配置文件,以及将日志写入文件的方法,并给出了一个详细的示例。这一讲,我在继续谈一谈如何使用log4j将日志写入MySQL数据库。

  将日志写入数据库需要经历(1)建立MySQL数据库日志记录表,(2)配置log4j配置文件,(3)编写Java执行程序三大步骤,下面将详细阐述三个步骤的具体内容。

  建立MySQL数据库日志记录表

  由于每个人想记录在MySQL数据库中的日志信息的不同,创建的表也各不相同,下面给出一个实用的示例:

USE `logs`
CREATE TABLE log4j(
logId INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
logDate VARCHAR(10),
logClientIP VARCHAR(15),
logName VARCHAR(255),
logLevel VARCHAR(5),
logMsg VARCHAR(255)
);

  配置log4j.properties

  由上一讲知道将日志写入MySQL时,数据源是DB,详细的实现类是JDBCAppender。JDBCAppender中与连接MySQL相关的配置参数如下表:

driver 设置连接数据库的驱动程序,如MySQL的驱动字符串为:com.mysql.jdbc.Driver;
URL 设置数据库的连接字符串;
user 设置数据库的用户名;
password 设置数据库的密码;
sql 设置操作数据库的SQL语句;

  详细的配置参见下面的示例:  

# Define the root logger with appender file
log4j.rootLogger = DEBUG, DB # Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender # Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://192.168.31.221/logs # Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver # Set database user name and password
log4j.appender.DB.user=test
log4j.appender.DB.password=test # Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO log (logDate, logClientIP, logName, logLevel, logMsg) VALUES('%d','%X{clientIP}','%C','%p','%m') # Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

  配置文件如何配置的问题在上一讲已经讲解过了,此处不再冗述,XML格式配置文件参考如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration> <appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="url" value="jdbc:mysql://localhost/logs"/>
<param name="driver" value="com.mysql.jdbc.Driver"/>
<param name="user" value="test"/>
<param name="password" value="test"/>
<param name="sql" value="INSERT INTO log (logDate, logClientIP, logName, logLevel, logMsg) VALUES('%d','%X{clientIP}','%C','%p','%m')"/> <layout class="org.apache.log4j.PatternLayout">
</layout>
</appender> <logger name="log4j.rootLogger" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="DB"/>
</logger> </log4j:configuration>

  编写Java执行程序

 package org.warnier.zhang.demo;

 import java.net.InetAddress;
import java.net.UnknownHostException; import org.apache.log4j.Logger;
import org.apache.log4j.MDC; public class Test { private static Logger logger = Logger.getLogger(Test.class); public static void main(String[] args) throws UnknownHostException {
/**
* 获取客户端的IP;
*/
InetAddress inetAddress = InetAddress.getLocalHost();
String clientIP = inetAddress.getHostAddress();
MDC.put("clientIP", clientIP); logger.trace("TRACE > start logging...");
logger.debug("DEBUG > start logging...");
logger.info("INFO > start logging...");
logger.warn("WARN > start logging...");
logger.error("ERROR > start logging...");
logger.fatal("FATAL > start logging...");
} }

  到此是不是就结束了?读者可能会问:“Java程序中并没有涉及到JDBC的操作,是怎么将日志写到MySQL数据的?”其实,在上一讲就谈到,log4j采用了一种机制,能够将日志直接写到数据库,换言之,对数据库的操作已经由log4j框架本身承包了。细心的读者可以看到在上一讲中将日志写进文件时也没有涉及到文件操作,原因同上。还需要提及的是,虽然这篇博客是采用MySQL数据库来讲述的,但是不要误认为log4j不兼容其他数据库,实际上只要是关系型数据库,对上述的配置文件进行相应的配置后,log4j都能够很好支持。

  下面贴上自己的处理结果:

Tips & Tricks:Apache log4j简明教程(二)的更多相关文章

  1. Tips & Tricks:Apache log4j简明教程(一)

    Apache log4j的官方介绍是“log4j is a reliable, fast and flexible logging framework (APIs) written in Java, ...

  2. Git简明教程二、开始进行版本管理

    上一篇介绍了Git中的一些基本概念.本篇来实际看一看如何通过几个常用命令来快速上手Git,完成版本管理的日常操作(核心操作). 0. 准备工作 安装Git后,请先在你的电脑上新建或选择一个目录作为测试 ...

  3. HTML简明教程(二)

    HTML简明教程(二) 一.HTML 图像 二.HTML 表格 三.HTML 列表 四.HTML div和 span 五.HTML 布局 六.HTML 表单和输入 七.HTML 框架 八.HTML内联 ...

  4. Log4J入门教程(二) 参数讲解

    继续接着Log4J入门教程(一)中的例子进行讲解,其中log4j.properties中的内容为    Log4j的三个重要组件—— Loggers, Appenders, Layouts ,这三个组 ...

  5. 简明log4j配置教程

    先准备好log4j需要对应的开发包: apache-log4j-extras-1.2.17.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar 然后就是在项 ...

  6. HTML简明教程(一)

    HTML简明教程(一) 内容主体来自:W3School 一.HTML 简介 二.HTML 基础 三.HTML 元素 四.HTML 属性 五.HTML 标题 六.HTML 段落 七.HTML 文本格式化 ...

  7. [转]LOG4J汇编教程edit Z10

    摘自:http://wucuixia.blog.sohu.com/12057602.html LOG背景 我们在编程时经常不可避免地要使用到一些日志操作,比如开发阶段的调试信息.运行时的日志记录及审计 ...

  8. appium简明教程

    appium简明教程 什么是appium? 下面这段介绍来自于appium的官网. Appium is an open-source tool you can use to automate mobi ...

  9. SaltStack简明教程

    第1章 SaltStack简明教程 1.1 SaltStack简介 SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWS E ...

随机推荐

  1. zoj 2874 &amp; poj 3308 Paratroopers (最小割)

    意甲冠军: 一m*n该网络的规模格.详细地点称为伞兵着陆(行和列). 现在,在一排(或列) 安装激光枪,激光枪可以杀死线(或塔)所有伞兵.在第一i安装一排 费用是Ri.在第i列安装的费用是Ci. 要安 ...

  2. sql分隔字符串数组

    declare @relation_code nvarchar(1024) set @relation_code = '#10000#10002' set @relation_code=substri ...

  3. linux挂载U盘,及乱码问题解决

    1. 首先使用切换到root用户. 2. 使用fdisk -l命令查看磁盘信息,找到u盘(能够依据显示的大小确定) 3. 在/mnt下创建挂载点,比如创建usb目录:mkdir /mnt/usb 4. ...

  4. 如何使用junit4写单元测试用例(转)

    JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写. 先 简单解释一下什么是Annotation,这个单词一般是翻译成元数据.元数 ...

  5. 得到View Frustum的6飞机

    笔者:i_dovelemon 资源:CSDN 日期:2014 / 9 / 30 主题:View Frustum, Plane, View Matrix, Perspective Projection ...

  6. [LeetCode258] Add Digits 非负整数各位相加

    题目: Given a non-negative integer num, repeatedly add all its digits until the result has only one di ...

  7. Adb shell得到root才干

    于Adb shell我们希望用一些文件系统文件夹时,经常有在没有痛苦Root才干,系统会提示su: Permission Denied. su不是每个手机有一个.能不能在这里下载: http://do ...

  8. all about AIX MPIO

    Multipath  I/O (多路径)   在计算机存储技术里,多路径提供了容错和性能提高,在计算机系统里CPU有多条物理路径通道,块存储设备通过总线,控制器,交换设备以及桥接设备来连接.     ...

  9. 《Javascript权威指南》13号学习笔记:使用日期和时间

    一.创Date示例 1.Date类的方法和属性是非常不静,故,申请书Date属性和方法之前.必须创建Date类的实例. var date = new Date();  //以当前日期和时间创建实例. ...

  10. net开发过程中Bin目录net开发过程中Bin目录下面几种文件

    .net开发过程中Bin目录下面几种文件格式的解释 在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb..xsd..vshost.exe..exe..exe.config..v ...