log4j提供了org.apache.log4j.JDBCAppender对象,可以把日志输出到特定的数据库。

常用的属性:

  • bufferSize 设置buffer的大小,默认是1
  • driver 设置数据库的驱动字符串,比如sun.jdbc.odbc.OdbcDriver
  • layout 设置使用的layout,默认是org.apache.log4j.PatternLayout
  • password 设置数据的密码
  • sql 设置每次日志产生的时候执行的sql语句,可以是INSERT,UPDATE,DELETE
  • URL 设置JDBC URL
  • user 设置数据库的用户名

在输出日志之前,还应该创建数据库中的表,执行下面的SQL语句


CREATE TABLE LOGS
(USER_ID VARCHAR(20) NOT NULL,
DATED
DATE NOT NULL,
LOGGER VARCHAR(50) NOT NULL,
LEVEL
VARCHAR(10) NOT NULL,
MESSAGE VARCHAR(1000) NOT NULL
);

log4j.properties文件配置

下面是JDBCAppender的相关配置:


log4j.rootLogger = DEBUG, DB
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME
log4j.appender.DB.driver=com.mysql.jdbc.Driver
log4j.appender.DB.user=user_name
log4j.appender.DB.password=password
log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

对于MySQL数据库来说,当创建了LOGS表后你还需要使用dbname,user_name,password。

如果在xml中配置可以参考如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration> <appender name="DB" > <param name="url" value="jdbc:mysql://localhost/DBNAME"/> <param name="driver" value="com.mysql.jdbc.Driver"/> <param name="user" value="user_id"/> <param name="password" value="password"/> <param name="sql" value="INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')"/> <layout > </layout> </appender> <logger name="log4j.rootLogger" additivity="false"> <level value="DEBUG"/> <appender-ref ref="DB"/> </logger> </log4j:configuration>

代码样例

下面这个例子,在java代码中使用了Log4j输出:


import org.apache.log4j.Logger;
import java.sql.;
import java.io.;
import java.util.;
public class log4jExample{
/ Get actual class name to be printed on */
static Logger log = Logger.getLogger(log4jExample.class.getName());
public static void main(String[] args)throws IOException,SQLException{
log.debug("Debug");
log.info("Info");
}
}

编译和执行

执行后就可以查询结果了:


mysql > select * from LOGS;
+---------+------------+--------------+-------+---------+
| USER_ID | DATED
| LOGGER
| LEVEL | MESSAGE |
+---------+------------+--------------+-------+---------+
|
| 2010-05-13 | log4jExample | DEBUG | Debug
|
|
| 2010-05-13 | log4jExample | INFO | Info
|
+---------+------------+--------------+-------+---------+
2 rows in set (0.00 sec)

Log4j官方文档翻译(九、输出到数据库)相关推荐

  1. Log4j官方文档翻译(一、基本介绍)

    2019独角兽企业重金招聘Python工程师标准>>> 简介 log4j是使用java语言编写的可靠的.快速的.灵活的日志框架,它是基于Apache的license. log4j支持 ...

  2. django 1.8 官方文档翻译: 2-5-6 多数据库

    多数据库 这篇主题描述Django 对多个数据库的支持.大部分Django 文档假设你只和一个数据库打交道.如果你想与多个数据库打交道,你将需要一些额外的步骤. 定义你的数据库 在Django中使用多 ...

  3. Android官方文档翻译 九 2.2Adding Action Buttons

    Adding Action Buttons 增加动作按钮 This lesson teaches you to 这节课教给你 Specify the Actions in XML 在XML中指定动作 ...

  4. Injective Protocol官方文档翻译(九) -清盘、清算(Liquidation)

    文章目录 一.清盘.清算(Liquidation) 1. 用订单清算头寸(liquidatePositionWithOrders) 一.清盘.清算(Liquidation) liquidation 英 ...

  5. flume可以实时监控mysql嘛_flume使用(三):实时log4j日志通过flume输出到MySql数据库...

    本文在[flume使用(二):采集远程日志数据到MySql数据库]一文基础之上进行测试操作.本文使用到的: flume版本.jdk版本.mysql.数据库表.javaBean.自定义的mysqlSin ...

  6. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

  7. Log4j2官方文档翻译--欢迎使用Log4j2!

    官网原文标题<Welcome to Log4j 2!> 官网原文地址http://logging.apache.org/log4j/2.x/manual/index.html 译者:本文介 ...

  8. 【iOS官方文档翻译】iOS蓝牙的基本概念

    之前写了[iOS官方文档翻译]iOS的蓝牙连接.数据接收及发送一文,介绍了怎样进行蓝牙通讯,但是很多基本概念没有进行解释,看起来可能有点吃力,所以现在再翻译一篇苹果对官方蓝牙4.0一些基本概念介绍的文 ...

  9. fastapi官方文档翻译 -目录

    fastapi官方文档翻译 warmsirius 最新发布 最新评论 目录 fastapi教程翻译(前言):安装和运行 fastapi教程翻译(一):了解FastAPI结构 fastapi教程翻译(二 ...

最新文章

  1. 浏览器URL地址里一堆%或者6E616D6531之类的是啥?编码
  2. JSON WEB TOKEN(JWT)的分析
  3. Redis 字符串(String)
  4. 在 ubuntu 20.04 LTS 上安装 ROS2 执行 rosdep update 命令时出现的问题的解决办法
  5. mysql通过函数完成10的阶乘_请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!...
  6. QT学习笔记之MySql如何计算两个时间段相隔的天数
  7. PCA(主成分分析)和FA(因子分析)区别
  8. 华为根本没有鸿蒙系统,【图片】你看不明白的鸿蒙系统,才是华为缔造未来的“伟大”!华为并没有把系统划分为手机操作系统,我们就能知道华为想的并不是那么简单【手机吧】_百度贴吧...
  9. css学习笔记-黑马程序员前端视频
  10. 【序列推荐】KDD2018|STAMP---基于注意力的短期记忆优先的推荐
  11. echart渲染深圳地图
  12. python-selenium  自动化弹幕
  13. 步进电机、伺服电机、舵机的区别与控制(角度、转速)
  14. 核酸检测系统的潜在性能问题猜想
  15. Android AES加密解密 CTR 模式
  16. 加推科技领读:2019,深圳开荒牛的TO B拓荒路
  17. 【Win11共享打印机,win11家庭版中添加组策略】
  18. 周末参加“北京干部管理职业技术学院”关于高职课程改革的专家讨论会
  19. 大桥数据,国外大桥排行榜数据清单,Python爬虫120例第32例
  20. Function与函数

热门文章

  1. Lambda表达式入门,看这篇就够了!
  2. 这是我读过写得最好的【秒杀系统架构】分析与实战!
  3. ELK教程2:Kibana的安装
  4. 人工智能领域的经典著作!
  5. 有必要将所有机器学习算法都实现一遍吗?
  6. 读科研文献也能泄露隐私,用户发现爱思唯尔PDF阅读器收集用户信息
  7. 院士:科研工作者也得养家,非升即走压力下,不得不做短平快的研究
  8. Hinton团队CV新作:用语言建模做目标检测,性能媲美DETR
  9. PSS:更简单有效的End-to-End检测
  10. Kaggle金牌拿Offer有多简单?