わかりました。セッションごとに管理者用に異なるログ ファイルを作成する場合は、次のようなことを試してください。ロガー プロバイダーからメイン コードで常にロガーを取得します。
Logger auditLogger = AuditLogger.getLogger(username,sessionID);
//you can get the audit logger instance in any class using the above code.
//use this logger to write the change-log.
これは、Audit Logger 実装のスケルトンです。より多くの条件付きチェックを使用して、セッションの個別のロガーを返すように拡張できます。
public AuditLogger {
public static Logger getLogger(String username,String sessionID)
{
//get a logger from Log4j using name+sessionID, this may return a new logger if none found
Logger userLogger = Logger.getLogger(name+sessionID);
Appender appender = userLogger.getAppender(name+sessionID);
If(appender != null)
{
//not a first call
return userLogger;
}
else
{
//first call for the name+sessionID combination
RollingFileAppender app = new RollingFileAppender();
app.setName(name+sessionID);
app.setFile(LOG_FOLDER +"/"+name+sessionID+".log";
//.......(set all other options..)
// set an html layout for better formatting.
// write your own enhanced html layout which writes more details in formatted way.
userLogger.addAppender(app);
app.activateOptions();
return userlogger;
}
}
これにより、セッションごとに 1 つの個別のログが作成されます。このログを使用して、1 つのセッションで変更ログを特定し、それを監査人にメールで送信できます。
セッションが破棄されたときに、アペンダーをクリーンアップすることをお勧めします (アペンダーを閉じると思います)。また、使用が終了したら、ロガーを無効にする可能性も確認できます。