Log4j动态参数

时间:2010-03-23 05:36:05

标签: java dynamic log4j parameters mdc

我有一个在spring框架上运行的j2ee web应用程序,并使用log4j进行日志记录。我在log4j.properties文件中有这一行。这会将日志插入我的数据库中。如何在消息部分中设置动态值,以便我可以以某种方式附加当前登录的用户。包含当前用户信息的bean对象位于应用程序上下文中。

  

log4j.appender.dbLog.sql = INSERT INTO   记录(log_date,log_level,   位置,消息)价值观   ('%d {yyyy / MM / dd HH:mm:ss}','%-5p',   '%C-%L','%m')

2 个答案:

答案 0 :(得分:2)

您想使用MDC(映射的诊断上下文)。这是关于将它与servlet一起使用的link

答案 1 :(得分:1)

我不完全确定“应用程序上下文”与我的“用户信息”的位置,但我的Web应用程序使用的是Struts和log4j,我有一个类似(但可能更简单)的要求,我用代码解决了它像这样:

public class LogoutAction extends org.apache.struts.action.Action {

private Log log_db = LogFactory.getLog("mysql");

public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    log_db.debug("User: "+request.getRemoteUser()+" logged off");
    request.getSession().invalidate();
    your
}

}

然后在我的log4j属性文件中,我有一个这样的条目:

log4j.logger.mysql=DEBUG, mysql
log4j.appender.mysql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.mysql.layout=org.apache.log4j.PatternLayout
log4j.appender.mysql.URL=jdbc:mysql://localhost:3306/dbname?autoReconnect=true
log4j.appender.mysql.driver=com.mysql.jdbc.Driver
log4j.appender.mysql.user=user
log4j.appender.mysql.password=password
log4j.appender.mysql.sql=INSERT INTO log (Date, Logger, Priority, Message) VALUES ("%d","%c","%p","%m")
enter code here

然后结果是我的表行会有这样的数据:

'2010-03-15 21:49:46,514','mysql','DEBUG','用户:ben已经注销'

我希望这会有所帮助