开源项目
知识点
相关文章
更多最近更新
更多log4j配置日志输出到数据库
2019-04-27 18:43|来源: 网路
log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库。
JDBCAppender 配置:
Property | 描述 |
---|---|
bufferSize | 设置缓冲区的大小。默认大小为1 |
driver | 设置驱动程序类为指定的字符串。如果没有指定驱动程序类,默认为sun.jdbc.odbc.JdbcOdbcDriver |
layout | 设置要使用的布局。默认布局是org.apache.log4j.PatternLayout |
password | Sets the database password. |
sql | 指定SQL语句在每次记录事件发生的时间执行。这可能是INSERT,UPDATE或DELETE |
URL | 设置JDBC URL |
user | 设置数据库用户名 |
日志表配置:
开始使用基于JDBC日志,要创建在哪里保存日志信息的表。下面是创建日志表的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
# 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://localhost/DBNAME # Set Database Driver log4j.appender.DB.driver=com.mysql.jdbc.Driver # Set database user name and password log4j.appender.DB.user=user_name log4j.appender.DB.password=password # Set the SQL statement to be executed. log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m') # Define the layout for file appender log4j.appender.DB.layout=org.apache.log4j.PatternLayout
这里使用的是MySQL数据库,必须要使用实际DBNAME,用户ID和在其中创建的日志表的数据库密码。SQL语句是使用日志表名和输入值到表,需要执行INSERT语句。
JDBCAppender不需要明确定义的布局。相反,使用PatternLayout 传递给它 SQL语句
如果想拥有相当于上述log4j.properties文件的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/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 class="org.apache.log4j.PatternLayout"> </layout> </appender> <logger name="log4j.rootLogger" additivity="false"> <level value="DEBUG"/> <appender-ref ref="DB"/> </logger> </log4j:configuration>
示例程序:
下面的Java类是一个非常简单的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"); } }
编译和运行:
下面是步骤编译并运行上述程序。确保进行编译和执行之前,适当地设置PATH和CLASSPATH。
所有的库应该在CLASSPATH以及log4j.properties文件应该在PATH可用。所以有以下几点:
创建log4j.properties如上图所示。
创建log4jExample.java如上图所示,并对其进行编译。
执行log4jExample二进制运行程序。
现在检查DBNAME数据库里面日志表,发现下面的条目(记录):
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)
注:此处X被用于产生该记录事件的线程相关联输出的NDC(嵌套诊断上下文)。使用NDC来区分客户的服务器端组件处理多个客户端。检查Log4J的手册以获取更多信息。
相关问答
更多-
Java开发 log4j简单问题!我用log4j,写一个简单的测试程序,想把日志存到数据库中。[2023-04-21]
jdbc驱动没有 -
如何使用log4j把完善的日志信息保存进数据库?[2023-08-31]
try { VisitedCountAction a = null; a.equals(null); } catch (Exception e) { System.out.println(e.toString()); StackTraceElement[] t = e.getStackTrace(); for (int i = 0; i < t.length; i++) { System.out.println(t[i].toString()); } } -
求教spring aop 与 log4j 配合 完成系统日志功能,同时输出到文件与数据库的实例.[2024-01-31]
您所提到的这个问题,我之前也遇到过,推荐您去参考一下这的 教程,他们的 java教程中基本都有这样的讲解 参考资料 http://android.ixueku.com 希望对你有帮助哦 -
spring aop + log4j如何实现详细的后台操作日志,并输出的数据库[2023-08-04]
你可以采用logback 这个插件,可以任意切入哪个类,可以控制日志的级别。如果是业务操作日志最好是定义在Service层,DAO层就不要写业务了。 logback相比较log4j的优势 slf4j支持参数化的logger.error("帐号ID:{}不存在", userId); 告别了if(logger.isDebugEnable()) 时代。 另外logback的整体性能比log4j也较佳,hibernate等项目已经采用了slf4j。 -
如何使用Log4j,然后把记录存入数据库[2022-06-13]
我觉得你在使用log4j的时候,可以同时进行写 日志文件和录入数据库两个操作。因为你写日志文件的时候,格式都是统一的。按照这个格式设计对应的数据库表 结构即可。然后执行插入 语句。免得你去读日志文件,还得用","去分解你的 记录,虽然能实现,但麻烦一些。 -
tomcat 自己有个日志包,它会有个日志输出,在tomcat根目录下; 你自己写的这个,看看是不是Level设置上的问题(级别的设置)。 这个是Tomcat安装目录下有自己的日志配置文件;我的是D:\tomcat\conf\logging.properties 这个文件定义了Tomcat自己的日志输出配置,级别是INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO 希望这个对你有点用哈!!
-
如何配置log4j只保留最近7天的日志文件?(How to configure log4j to only keep log files for the last seven days?)[2022-03-17]
您可以在单独的脚本中执行您的内务管理,该脚本可以每天运行。 这样的东西 find /path/to/logs -type f -mtime +7 -exec rm -f {} \; You can perform your housekeeping in a separate script which can be cronned to run daily. Something like this: find /path/to/logs -type f -mtime +7 -exec rm -f {} \ ... -
如何清理Log4j中的日志消息以将其保存在数据库中(How to sanitize log messages in Log4j to save them in database)[2022-02-11]
看看这个非官方的Log4J JDBCAppender ,它解决了这个问题,并且在Apache 2.0许可下分发。 与org.apache.log4j.jdbc.JDBCAppender比较引用其功能: 登录到(关系数据库) 灵活的连接处理(尚不支持DataSource) 灵活的sql命令来执行实际日志记录 已准备好的语句和存储过程(J2SDK 1.4+)支持 启用特殊字符(例如'(单引号)和(逗号))的消息记录 灵活的桌子和柱子结构 灵活的ID生成 允许多个PatternLayout应用程序; 在一列或多列 ... -
您将在控制台上看到日志消息,因为您已将所有日志消息发送到控制台,但只有logging.simple.jdbcLogger层次结构下的记录器才会发送到jdbcAppender 。 你在控制台上看到logging.simple.jdbcLogger消息吗? You'll see log messages on the console because you've sent all log messages to the console, but only loggers under the hierarchy ...
-
如何使用log4j将日志写入Jmeter上的mysql数据库?(How to use log4j write logs into a mysql database on Jmeter?)[2023-07-03]
请检查conf # JMeter does not use log4j as logging system # This configuration will only be used by libraries that do use log4j # or your custom code if it uses it # For logging configuration of JMeter, it needs to be done in user.properties 怎么运行的。 如果你有一个特殊的采 ...