Tips & Tricks:Apache log4j简明教程(二)
在上一讲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简明教程(二)的更多相关文章
- Tips & Tricks:Apache log4j简明教程(一)
Apache log4j的官方介绍是“log4j is a reliable, fast and flexible logging framework (APIs) written in Java, ...
- Git简明教程二、开始进行版本管理
上一篇介绍了Git中的一些基本概念.本篇来实际看一看如何通过几个常用命令来快速上手Git,完成版本管理的日常操作(核心操作). 0. 准备工作 安装Git后,请先在你的电脑上新建或选择一个目录作为测试 ...
- HTML简明教程(二)
HTML简明教程(二) 一.HTML 图像 二.HTML 表格 三.HTML 列表 四.HTML div和 span 五.HTML 布局 六.HTML 表单和输入 七.HTML 框架 八.HTML内联 ...
- Log4J入门教程(二) 参数讲解
继续接着Log4J入门教程(一)中的例子进行讲解,其中log4j.properties中的内容为 Log4j的三个重要组件—— Loggers, Appenders, Layouts ,这三个组 ...
- 简明log4j配置教程
先准备好log4j需要对应的开发包: apache-log4j-extras-1.2.17.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar 然后就是在项 ...
- HTML简明教程(一)
HTML简明教程(一) 内容主体来自:W3School 一.HTML 简介 二.HTML 基础 三.HTML 元素 四.HTML 属性 五.HTML 标题 六.HTML 段落 七.HTML 文本格式化 ...
- [转]LOG4J汇编教程edit Z10
摘自:http://wucuixia.blog.sohu.com/12057602.html LOG背景 我们在编程时经常不可避免地要使用到一些日志操作,比如开发阶段的调试信息.运行时的日志记录及审计 ...
- appium简明教程
appium简明教程 什么是appium? 下面这段介绍来自于appium的官网. Appium is an open-source tool you can use to automate mobi ...
- SaltStack简明教程
第1章 SaltStack简明教程 1.1 SaltStack简介 SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWS E ...
随机推荐
- "UBUNTU: SAUCE: apparmor: 3.0 backport of apparmor3"
下面提供的commit是为了让nexus 4g的内核支持ubunt touch的一些功能. 链接地址如下: "UBUNTU: SAUCE: apparmor: 3.0 backport of ...
- jvm调音
jvm性能调优的目地:1)控制jvm的堆栈大小.比方当你的程序年轻代对象在某个时间段产生的比較多的时候,就须要控制年轻代的堆大小. 同一时候还要控制总的JVM大小避免内存溢出 2)控制GC的行为. G ...
- windows下搭建Apache+Mysql+PHP开发环境
原文:windows下搭建Apache+Mysql+PHP开发环境 要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Apache2.2;MySQL Server 5. ...
- 【转】c++继承:公有、私有、保护
原文链接:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html 公有继承(public).私有继承(private).保护继承(pro ...
- WTL安装
1.在AppWiz文件夹下有多个JScript文件,依据自己的编辑器选择对应的文件执行. 假设双击无法执行的话,则执行wscript //e:jscript (文件路径) 如wscript //e:j ...
- Robotium调用getActivity()导致程序挂起的方法
1. 问题背景的叙述性说明 需要直接用在工作中没有项目的源代码robotium测试目标android平台launcher,该平台的基础上,当前日期的版本号android 4.4.2.之前我用来验证的可 ...
- oracle 打开trace,并分析trace
SQL> oradebug event 10046 trace name context forever,level 8 ORA-00072: process "Unix proces ...
- jquery声明
$("[id^=total_item]")代表 id随着total_item开始XX..必须jquery支持 版权声明:本文博主原创文章,博客,未经同意,不得转载.
- (hdu step 6.3.7)Cat vs. Dog(当施工方规则:建边当观众和其他观众最喜爱的东西冲突,求最大独立集)
称号: Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- sgu128snack
按我的理解大概说下题意: 有非常多个点,最多一万个,告诉你它们的坐标.如今须要构造一条闭合线.这个闭合线满足下面六点: 1必须是闭合的. 2必须用到全部的点. 3构造的线段之间若成角,则必须是90度. ...