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实现此目的的示例。