扫码一下
查看教程更方便
log4j api 提供了 org.apache.logging.log4j.jdbc.jdbcappender
对象,它可以将日志信息放在指定的数据库中。
属性 | 描述 |
---|---|
buffersize | 设置缓冲区大小。 默认大小为 1。 |
driver | 将驱动程序类设置为指定的字符串。 如果未指定驱动程序类,则默认为 sun.jdbc.odbc.jdbcodbcdriver 。 |
layout | 设置要使用的布局。 默认布局是 org.apache.logging.log4j.patternlayout 。 |
password | 设置数据库密码。 |
sql | 指定每次发生日志记录事件时要执行的 sql 语句。 这可以是 insert、update 或 delete。 |
url | 设置 jdbc url。 |
user | 设置数据库用户名。 |
在开始使用基于 jdbc 的日志记录之前,我们应该创建一个表来维护所有日志信息。 以下是创建 logs 表的 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
);
对于 mysql 数据库,我们必须使用创建 logs 表的实际 dbname、用户 id 和密码。 sql 语句是执行一个 insert 语句,表名 logs 和要输入到表中的值。
jdbcappender 不需要显式定义布局。 相反,传递给它的 sql 语句使用 patternlayout。
如果我们希望拥有与 log4j2.properties 文件等效的 xml 配置文件,那么这里是内容
下面的 java 类是一个非常简单的示例,它初始化并使用用于 java 应用程序的 log4j 日志库。
import org.apache.logging.log4j.logmanager;
import org.apache.logging.log4j.logger;
import java.sql.*;
import java.io.*;
import java.util.*;
public class log4jexample{
static logger logger = logmanager.getlogger(log4jexample.class.getname());
public static void main(string[] args)throws ioexception,sqlexception{
logger.debug("debug");
logger.info("info");
}
}
以下是编译和运行上述程序的步骤。 在继续编译和执行之前,请确保你已正确设置 path 和 classpath。
所有库都应该在 classpath 中可用,并且我们的 log4j2.xml 文件应该在 path 中可用。 按照给定的步骤
mysql > select * from logs;
--------- ------------ -------------- ------- ---------
| user_id | dated | logger | level | message |
--------- ------------ -------------- ------- ---------
| | 2022-05-29 | log4jexample | debug | debug |
| | 2022-05-29 | log4jexample | info | info |
--------- ------------ -------------- ------- ---------
2 rows in set (0.00 sec)
注意
- 这里 x 用于输出与生成日志事件的线程关联的嵌套诊断上下文 (ndc)。 我们使用 ndc 来区分处理多个客户端的服务器端组件中的客户端。 查看 log4j 手册以获取更多信息。