【问题标题】:setRetainDays in embedded jetty not working嵌入式码头中的 setRetainDays 不起作用
【发布时间】:2018-04-06 10:17:32
【问题描述】:

我使用的是嵌入式 jetty 9.2.22,发现 http 访问日志没有被删除,即使我将 retaindays 设置为 0 或 1。在将 retaindays 设置为 0 或 1 后,我更改了系统时间启动了jetty,发现http访问日志没有被删除。

RequestLogHandler requestLogHandler = new RequestLogHandler();
NCSARequestLog requestLog = new NCSARequestLog();

String filename = System.getProperty("user.dir") "/logs/http-yyyy_mm_dd.log";
File file = new File(filename);
file.getParentFile().mkdirs();
requestLog.setFilename(filename);
requestLog.setAppend("true");
requestLog.setExtended("false");
requestLog.setLogCookies(false));
requestLog.setLogTimeZone("GMT");           
requestLog.setRetainDays(0);
requestLogHandler.setRequestLog(requestLog);
handlers.addHandler(requestLogHandler);

【问题讨论】:

  • 但是,我可以看到日志文件名转换为 zip 文件并在码头重新启动后更改其名称

标签: embedded-jetty jetty-9


【解决方案1】:

0 中的 retainDays 有效地禁用了整个 retainDays 逻辑,并且不会删除任何文件。

https://github.com/eclipse/jetty.project/blob/jetty-9.4.9.v20180320/jetty-util/src/main/java/org/eclipse/jetty/util/RolloverFileOutputStream.java#L333

最小的合法值是1

替代选项是使用org.eclipse.jetty.server.Slf4jRequestLog 而不是NCSARequestLog,并让您选择的日志库在您选择的任何配置上执行文件轮换、归档和保留。

【讨论】:

  • 但是,org.eclipse.jetty.server.Slf4jRequestLog 似乎没有retainLogs ..
  • 没错,它将日志事件发送到您选择的 slf4j 实现。该实现(无论是 logback,或 log4j 1.x,或 log4j 2.x,或 java.util.logging,或 commons-logging,或 android,或 nlog4j 等......)将具有所有控件和旋钮您选择的日志记录实现。
  • 谢谢...你有这方面的例子吗?
  • 实际上,我使用的是嵌入式码头。所以,我需要在码头启动之前设置 Slf4jRequestLog 和处理程序。不确定我是否可以在码头启动之前将日志事件传递给 log4j?
  • 阅读 slf4j 文档,了解如何选择正确的 jar 以将来自 slf4j 的事件发送到 log4j。请注意,slf4j 端没有配置,某些 jar 的存在(通常)决定了 slf4j 的操作方式。
猜你喜欢
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 2019-09-25
  • 1970-01-01
相关资源
最近更新 更多