如何清理Log4j中的日志消息以将其保存在数据库中

Raf*_*ael 4 java log4j jdbc

我正在尝试将日志消息保存到中央数据库.为了做到这一点,我在log4j的xml配置中配置了以下Appender:

<appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender">
            <param name="URL" value="jdbc:postgresql://localhost/logging_test" />
            <param name="user" value="test_user" />
            <param name="password" value="test_password" />
            <param name="sql" value="INSERT INTO log_messages ( log_level, message, log_date ) VALUES ( '%p', '%m', '%d{yyyy-MM-dd HH:mm:ss}' )" />
</appender>
Run Code Online (Sandbox Code Playgroud)

这工作正常,除了一些消息包含',然后appender失败.

是否有捷径可寻?

Boz*_*zho 6

我建议创建一个自定义appender并覆盖你可以转义字符串或使用的方法flushBufferexecute方法PreparedStatement:

public class MyJDBCAppender extends JDBCAppender {

}
Run Code Online (Sandbox Code Playgroud)

要解释为什么需要覆盖flushBuffer- appender将LogEvent对象放入缓冲区,稍后将其刷回目标(在本例中为数据库).这里,该flushBuffer方法使用getLogStatement和(通过execute)法线Statement.您可以完全替换该行为.看看当前的源代码

然后注册你的appender JDBCAppender.