jetty access.log不再记录日志

jetty access.log不再记录日志,jetty,Jetty,我在生产中启用了Jetty访问日志,直到今天一切都很顺利。今天,访问日志似乎不再接收数据,即使服务本身运行时没有发生任何事件。我怀疑我对“保留日”的财产有些不了解。下面是etc/jetty.xml的摘录,它设置了日志记录 <!-- Built-in Jetty AccessLog log --> <Ref id="AccessLog"> <Set name="requestLog"> <New id="RequestLogImpl" clas

我在生产中启用了Jetty访问日志,直到今天一切都很顺利。今天,访问日志似乎不再接收数据,即使服务本身运行时没有发生任何事件。我怀疑我对“保留日”的财产有些不了解。下面是etc/jetty.xml的摘录,它设置了日志记录

<!-- Built-in Jetty AccessLog log -->
<Ref id="AccessLog">
  <Set name="requestLog">
    <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
      <Arg><SystemProperty name="jetty.logs" default="/data/logs"/>/dm-app1_access.log</Arg>
      <Set name="retainDays">7</Set>
      <Set name="append">true</Set>
      <Set name="extended">false</Set>
      <Set name="logLatency">true</Set>
      <Set name="LogTimeZone">GMT</Set>
    </New>
  </Set>
</Ref>

/dm-app1_access.log
7.
真的
假的
真的
格林尼治标准时间

当这个孩子达到retainDays值时,为什么日志记录似乎停止了?我希望它只是截断并继续记录到/data/logs/dm-app1_access.log。

由于我的文件名不包含“yyyy\u mm\u dd”占位符,日志记录停止。我们发现,使用日志文件命名格式完成的配置类似于我们的logback RollingFileAppender的工作方式,如下所示

<!-- Built-in Jetty AccessLog log -->
<Ref id="AccessLog">
  <Set name="requestLog">
    <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
      <Set name="filename"><SystemProperty name="jetty.logs" default="./logs"/>/access.yyyy_mm_dd.log</Set>
      <Set name="filenameDateFormat">yyyyMMdd</Set>
      <Set name="retainDays">3</Set>
      <Set name="append">true</Set>
      <Set name="extended">false</Set>
      <Set name="logLatency">true</Set>
      <Set name="LogTimeZone">GMT</Set>
    </New>
  </Set>
</Ref>

/access.yyy\u mm\u dd.log
yyyyMMdd
3.
真的
假的
真的
格林尼治标准时间

…这将获取创建的访问日志文件,如logs/access.20120718.log。当我发现“filename”属性中的“yyyy\u mm\u dd”只是“filenameDateFormat”属性中包含的实际SimpleDataFormat的占位符时,学习的重要时刻到来了。

日志记录停止了,因为我的文件名没有包含“yyy\u mm\u dd”占位符。我们发现,使用日志文件命名格式完成的配置类似于我们的logback RollingFileAppender的工作方式,如下所示

<!-- Built-in Jetty AccessLog log -->
<Ref id="AccessLog">
  <Set name="requestLog">
    <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
      <Set name="filename"><SystemProperty name="jetty.logs" default="./logs"/>/access.yyyy_mm_dd.log</Set>
      <Set name="filenameDateFormat">yyyyMMdd</Set>
      <Set name="retainDays">3</Set>
      <Set name="append">true</Set>
      <Set name="extended">false</Set>
      <Set name="logLatency">true</Set>
      <Set name="LogTimeZone">GMT</Set>
    </New>
  </Set>
</Ref>

/access.yyy\u mm\u dd.log
yyyyMMdd
3.
真的
假的
真的
格林尼治标准时间

…这将获取创建的访问日志文件,如logs/access.20120718.log。当我发现“filename”属性中的“yyyy\u mm\u dd”只是“filenameDateFormat”属性中包含的实际SimpleDataFormat的占位符时,我学到了很多东西。

这是一种Jetty文档失败。未明确保留日期与“yyyy\u mm\u dd”之间的关系。如果您阅读了NCSARequestLog.java的源代码和用于RolloverFileOutputStream的JavaDoc,您会了解到字符串“yyy\u mm\u dd”是获得类似于rollover的任何内容所必需的。看起来你根本无法改变这一点。我们接受了关于如何改进这两个方面的补丁和建议:)我的建议是,这个访问日志应该以与logback的RollingFileAppender完全相同的方式工作。这将允许我在一个固定的文件名后面加上-F,日志机制将处理滚动。花了4个小时和深入的源代码才意识到“yyyy_mm_dd”只是要在RolloverFileOutputStream.setFile()中应用的yyyyymmdd实际SimpleDataFormat值的一个占位符。最不意外的原则是,这次冒险并没有失败。这是一种突堤式的失败。未明确保留日期与“yyyy\u mm\u dd”之间的关系。如果您阅读了NCSARequestLog.java的源代码和用于RolloverFileOutputStream的JavaDoc,您会了解到字符串“yyy\u mm\u dd”是获得类似于rollover的任何内容所必需的。看起来你根本无法改变这一点。我们接受了关于如何改进这两个方面的补丁和建议:)我的建议是,这个访问日志应该以与logback的RollingFileAppender完全相同的方式工作。这将允许我在一个固定的文件名后面加上-F,日志机制将处理滚动。花了4个小时和深入的源代码才意识到“yyyy_mm_dd”只是要在RolloverFileOutputStream.setFile()中应用的yyyyymmdd实际SimpleDataFormat值的一个占位符。最不意外的原则是,这次冒险不是。为自我回答欢呼三声,尽管它对我没有帮助:)为自我回答欢呼三声,尽管它对我没有帮助:)