我编写了一个服务器来接收 RMI 请求并执行一些操作。
对于每个请求,都会创建一个 Log4J Logger 实例。以下是用于创建 Logger 实例的代码片段。
Logger log = Logger.getLogger("log_" + requestID);
log.setAdditivity(false);
FileAppender appender = null;
try {
PatternLayout layout = new PatternLayout("%-5p %C{1} %d{yyyy-MM-dd HH:mm:ss} : %m%n");
appender = new FileAppender(layout, logFileName, false);
} catch(Exception e) {
logger.error("Error initializing logger", e);
}
log.addAppender(appender);
log.setLevel(level);
这里一切正常。问题是在收到大量请求后超时,该服务器进程的打开文件数量增加并且没有下降,从而导致进程崩溃并出现异常:打开的文件太多.
进一步检查发现问题是由于请求完成后文件描述符没有释放。我尝试查看 Log4J 文档,但找不到有关如何仅关闭一个记录器而不影响可能在不同线程中运行的其他记录器的任何内容。
这里有什么想法吗?
看看FileAppender.close() 文档 http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/WriterAppender.html#close%28%29,也许它会解决你的问题。
但我认为你应该重新考虑你的设计,并且只有一个 Logger 实例,不是吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)