【问题标题】:Saving extra values in log4j JDBCAppender在 log4j JDBCAppender 中保存额外的值
【发布时间】:2012-03-29 10:21:26
【问题描述】:

我想在我的日志表中存储额外的值,例如将用户 ID 存储在单独的列中。有人知道我该怎么做吗?

这是我的配置:

<appender name="jdbcAppender" class="org.apache.log4j.jdbc.JDBCAppender">
        <param name="URL" value="jdbc:sqlite:D:/download/mapLogic/sf_log.db" />
        <param name="user" value="" />
        <param name="password" value="" />
        <param name="driver" value="org.sqlite.JDBC" />
        <param name="sql"
            value="INSERT INTO sf_log(Message,Priority,Logger,Date) VALUES ('%m','%p','%c','%d{ABSOLUTE}')" />
    </appender>

谢谢

【问题讨论】:

  • 您可以将用户添加到%m指定的用户定义消息中
  • 是的,我知道我可以在列中显示,有没有可能

标签: java jdbc jboss log4j appender


【解决方案1】:

您可以在MDC 中维护用户,然后在您的插入语句中使用它。

MDC.put("user", userid);
try {
  doTheActualWorkWhichWillUseLogger();
} finally {
  // need to remove this to avoid causing leaks
  MDC.remove("user");
}

注意,您不必为每个logger 调用执行一次,但我输入remove 以说明如果要在Servlet 中使用它,您必须清除通话结束后再次MDC

然后为您的插入语句:

INSERT INTO sf_log (Message,Priority,Logger,Date, user) 
     VALUES ('%m','%p','%c','%d{ABSOLUTE}', '%X{user}')

【讨论】:

  • 我认为将当前用户放在 MDC 中总是好的,因为它是按线程维护的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 2016-10-21
相关资源
最近更新 更多