在上一讲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. 插入排序java

    插入排序简述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据.   第一个元素是有序队列,从第二个元素开始向有序队列中插入,插入完成后将第三个元素向 ...

  2. 【原创】UVAOJ水题10025解题报告

    首先是原题,转自UVAOJ  The ? 1 ? 2 ? ... ? n = k problem  The problem Given the following formula, one can s ...

  3. 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)

    原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...

  4. JNI 可变印刷

    1.包log.h #ifndef __MULTI_TRACE_H__ #define __MULTI_TRACE_H__ #ifdef ANDROID_NDK_BUILD #define LOG_TA ...

  5. Idea开发环境

    Idea开发环境中搭建Maven 1.配置Maven的环境变量 a.首先我们去maven官网下载Maven程序,解压到安装目录,如图所示: b.配置M2_HOME的环境变量,然后将该变量添加到Path ...

  6. LatinIME输入法分析

    输入法的设置在res/xml/method.xml的<input-method>标签中,主要设置两个属性: android:settingsActivity,输入法的设置程序入口. and ...

  7. UVa 353 - Pesky Palindromes

    称号:字符串统计回文子的数量. 分析:dp,暴力.因为数据是小,直接暴力可以解决. 说明:(UVa最终评出800该). #include <iostream> #include <c ...

  8. mysql常见操作汇总

    1.Mysql服务突然启不来了,报错: 在分析时发现MySQL Server 5.0\data下面有个名称为用户名,扩展名为.err的文件: 150725 20:01:19 [Note] 自己的安装目 ...

  9. 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头

    摄像机切换镜头 在游戏中常常会切换摄像机来观察某一个游戏对象,能够说.在3D游戏开发中,摄像头的切换是不可或缺的. 这次我们学习总结下摄像机怎么切换镜头. 代码: private var Camera ...

  10. 用python做自己主动化測试--对server端的自己主动化測试(3)-很多其它http client实例

    上一篇中仅仅是实现了一个非常easy的http client功能,request还提供了keep alive, SSL, 多文件上传,cookie 管理功能,http requests头管理等丰富的功 ...