我工作的Web应用程序偶尔会为某些用户开发数据完整性问题.我想打开跟踪级别日志记录,但由于我们每秒处理100个请求跟踪日志记录,因此每个请求都是不可能的.
有没有办法让log4j能够有条件地记录?换句话说,我希望只有在特定用户发出请求时才能获取跟踪日志.由于我事先不知道哪些用户会受到影响,我不能简单地暂时硬编码用户名.
编辑:
我想我需要更清楚一些.我可以轻松地为日志语句添加条件.例如
Logger logger = Logger.getLogger("foo");
String usernameFilter = "piglet";
String username = request.getParameter("username");
logger.setLevel(usernameFilter.equals(username) ? Level.TRACE : Level.INFO);
if (logger.isTraceEnabled()) {
logger.trace("blah blah blah");
}
Run Code Online (Sandbox Code Playgroud)
困难在于动态地改变设置日志级别的条件.换句话说,在上面的示例中,我如何设置usernameFilter的值,而不是硬编码.
我们只有极少数的客户(少于50个),我们希望每个客户都有自己独立的日志文件,其所有服务器端日志信息都会记录在其中.我知道您可以使用NDC和过滤器使用Log4j中的标准appender将日志语句定向到不同的文件,但这需要更多的设置(为所有现有客户创建记录器)并且它不会自动适应添加的新客户进入系统.
你有没有见过一个appender会根据Log4j NDC值将日志语句拆分成单独的文件?我想我可以建立一个新的appender来做它但我不能说如果我能得到一些已经构建好的东西我想要.