0

spring フレームワークで実行され、ログに log4j を使用する j2ee Web アプリケーションがあります。log4j.properties ファイルにこの行があります。これにより、ログがデータベースに挿入されます。現在ログインしているユーザーを何らかの方法で追加できるように、メッセージ部分に動的な値を設定するにはどうすればよいですか。現在のユーザーの情報を含む Bean オブジェクトは、アプリケーション コンテキストにあります。

log4j.appender.dbLog.sql = INSERT INTO LOGGING (log_date, log_level, location, message) VALUES ('%d{yyyy/MM/dd HH:mm:ss}', '%-5p', '%C-% L', '%m')

4

2 に答える 2

2

MDC (マップされた診断コンテキスト)を使用したい。サーブレットでの使用に関するリンクを次に示します。

于 2010-03-23T08:43:22.873 に答える
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」、「ユーザー: ベンがログオフしました」

これが役立つことを願っています

于 2010-03-23T11:21:50.053 に答える