Log4j2:如何将日志写入每个用户的单独文件?

这是我面临的挑战:

我有一个servlet程序。 我需要将每个用户的日志写入以该用户命名的文件夹。 像这样的东西:

// stores message to David folder // /root_path/David/logfile.log logger.error(MarkerManager.getMarker("David"), "Error happened"); // stores message to Mark folder // /root_path/Mark/logfile.log logger.error(MarkerManager.getMarker("Mark"), "Something is broken"); 

在我的例子中,我使用了标记。 但我真的不知道标记是否适合这项任务。

一般来说,我的appender应该像RollingRandomAccessFile appender一样。 我想apppen for appender必须看起来像这样:

          

有任何想法吗?

感谢@Remko Popma回答我弄清楚了。 这是解决方案示例:

 package com.bondarenko.tmp; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.ThreadContext; public class TestRouting { private final static Logger log = LogManager.getLogger(TestRouting.class); public static void main(String[] args) { ThreadContext.put("logFileName", "David"); log.info("Error happened"); ThreadContext.put("logFileName", "Mark"); log.info("Something is broken"); ThreadContext.remove("logFileName"); } } 

和log4j.xml:

                           

Log4j2 FAQ页面有一个使用RoutingAppender实现此目的的示例。