【问题标题】:How to remove the date pattern from tomcat logs如何从 tomcat 日志中删除日期模式
【发布时间】:2025-11-26 22:15:02
【问题描述】:

默认情况下,Tomcat 会将日期附加到日志文件中,例如 localhost.2010-12-22.log,与 catalina 日志相同。我不想要日志文件中的日期,而且我似乎找不到如何删除它。日志记录文档没有说明日期模式。任何想法都非常感谢。

http://tomcat.apache.org/tomcat-6.0-doc/logging.html

【问题讨论】:

标签: tomcat logging


【解决方案1】:

其他答案对我没有多大帮助,尽管 Thomas 的答案最接近。我找到的文档是:

所以我将以下内容添加到 Tomcat 的 logging.properties 文件中。这会从 localhost 日志中删除日期,以及 Tomcat 默认日期的其他三种日志类型:

    1catalina.org.apache.juli.FileHandler.rotatable = false
   2localhost.org.apache.juli.FileHandler.rotatable = false
     3manager.org.apache.juli.FileHandler.rotatable = false
4host-manager.org.apache.juli.FileHandler.rotatable = false
   #
   # default is true, which causes a date to be added to the filename

    1catalina.org.apache.juli.FileHandler.suffix = log
   2localhost.org.apache.juli.FileHandler.suffix = log
     3manager.org.apache.juli.FileHandler.suffix = log
4host-manager.org.apache.juli.FileHandler.suffix = log
   #
   # default is .log, but without date, the extra dot is not needed

【讨论】:

  • Tomcat 8.5 中的 AsyncFileHandler 也支持这些属性。
【解决方案2】:

de_simakov's answer 在大多数情况下是正确的 - 但它有一个字母拼写错误。在conf/server.xml中找到类似这样的配置

<Valve className="org.apache.catalina.valves.AccessLogValve"
      directory="logs"  prefix="http_access" suffix="log"  pattern="common" 
      rotatable="false" resolveHosts="false" />

注意 rotatable="false" 属性。

【讨论】:

    【解决方案3】:

    您链接到的文档用于在您的应用程序中进行日志记录,而不是用于 Tomcat 服务器本身的日志记录。正如另一个答案中提到的,相应的文档是here。在 Ubuntu Server 系统上,您需要更改 /etc/tomcat7/server.xml 中的设置。此文件可能位于您系统上的其他位置。

    与此类似的配置将阻止 Tomcat 将日期放在日志文件名中——但它也会阻止您的访问日志被 Tomcat 轮换,这可能是一个坏主意,除非您设置了适当的 logrotate 服务器的配置。

    <Valve className="org.apache.catalina.valves.AccessLogValve"
          directory="logs"  prefix="http_access" suffix="log"  pattern="common" 
          rotateable="false" resolveHosts="false" />
    

    【讨论】:

      【解决方案4】:

      这在 Tomcat 7 上应该很容易:see this docs

      renameOnRotate 属性

      默认情况下,对于可轮换日志,活动访问日志文件名将 包含 fileDateFormat 中的当前时间戳。在旋转过程中 文件已关闭,并且名称中具有下一个时间戳的新文件是 创建和使用。将 renameOnRotate 设置为 true 时,时间戳 不再是活动日志文件名的一部分。仅在旋转期间 该文件已关闭,然后重命名为包含时间戳。这是 类似于大多数日志框架在基于时间时的行为 回转。默认值:假

      【讨论】:

      • 在我的 Tomcat 7.0.64 中,fileDateFormatrenameOnRotate 文件中的 logging.properties 设置没有区别,就好像这些属性被忽略了一样。例如,如果我添加行 1catalina.org.apache.juli.FileHandler.renameOnRotate = true 日志文件的名称中仍然有日期。
      • @Dialecticus 在修改 logging.properties 时对我不起作用,但在修改 server.xml 中的 Valve 属性时确实起作用
      【解决方案5】:

      Tomcat 中默认的 JULI 日志记录的神奇属性是“可旋转的”。 通常在默认安装中定义日志记录的地方有两个:logging.properties 和服务器配置 (server.xml)。

      对于 logging.properties 你应该使用这个: 1catalina.org.apache.juli.FileHandler.rotatable = false

      对于服务器配置,它看起来像这样:

      详情请看这里:

      http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve

      【讨论】:

        【解决方案6】:

        对您的直接问题更合适的答案是布尔值“renameOnRotate”。假设您想要每日记录,但不想要时间戳。这将根据前缀/后缀命名文件,并在日志文件轮换后将时间戳附加到日志文件:

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access" suffix=".log" renameOnRotate="true"
                   pattern="%a %A %h %H %l %m %t %u %U &quot;%r&quot; %s %b " resolveHosts="false" />
        

        【讨论】:

          【解决方案7】:

          Tomcat 的日志记录由&lt;Valve&gt; 配置元素控制,通常在server.xmlcontext.xml 中。这些允许您控制数据后缀等内容。

          Here's the docs for the access log value,我认为这就是您所说的localhost.2010-12-22.log 的意思。不确定catalina.out,但它必须使用类似的机制。

          【讨论】:

          • 我看到了,但这不是访问日志。 localhost 日志包含 webapp 日志记录(例如 spring 加载失败)。 catalina 日志包含 tomcat 错误(例如 web.xml 格式错误)。
          【解决方案8】:

          我知道这是旧的,但是对于使用 logrotate.d 的完整示例,请记住替换为您的 tomcat 版本。您必须同时编辑 server.xml 和 logging.properties,然后编辑/创建 logrotate 配置。此外,您的配置文件路径可能不同。

          logrotate 配置:

          vi /etc/logrotate.d/tomcat<version>
          
          /var/log/tomcat<version>/catalina.out 
          {
              daily
              rotate 12
              compress
              copytruncate
              create 640 tomcat adm
          }
          /var/log/tomcat<version>/*.log
          {
              daily
              rotate 12
              compress
              copytruncate
              missingok
              sharedscripts
              postrotate
                if invoke-rc.d tomcat<version> status > /dev/null 2>&1; then \
                  invoke-rc.d tomcat<version> restart > /dev/null 2>&1; \
                fi;
              endscript
          }
          

          server.xml 配置:我还删除了 _log。从前缀,所以它变成 localhost_access.log

          vi /var/lib/tomcat<version>/conf/server.xml
          
          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            prefix="localhost_access" suffix=".log" rotatable="false"
            pattern="%h %l %u %t &quot;%r&quot; %s %b" />
          

          logging.properties 配置:

          vi /var/lib/tomcat<version>/conf/logging.properties
          
          1catalina.org.apache.juli.FileHandler.level = FINE
          1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
          1catalina.org.apache.juli.FileHandler.prefix = catalina.
          1catalina.org.apache.juli.FileHandler.suffix = log
          1catalina.org.apache.juli.FileHandler.rotatable = false
          
          2localhost.org.apache.juli.FileHandler.level = FINE
          2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
          2localhost.org.apache.juli.FileHandler.prefix = localhost.
          2localhost.org.apache.juli.FileHandler.suffix = log
          2localhost.org.apache.juli.FileHandler.rotatable = false
          
          3manager.org.apache.juli.FileHandler.level = FINE
          3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
          3manager.org.apache.juli.FileHandler.prefix = manager.
          3manager.org.apache.juli.FileHandler.suffix = log
          3manager.org.apache.juli.FileHandler.rotatable = false
          
          4host-manager.org.apache.juli.FileHandler.level = FINE
          4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
          4host-manager.org.apache.juli.FileHandler.prefix = host-manager.
          4host-manager.org.apache.juli.FileHandler.suffix = log
          4host-manager.org.apache.juli.FileHandler.rotatable = false
          

          【讨论】:

            【解决方案9】:

            引用“renameOnRotate”的答案是错误的。这仅适用于访问日志,而不适用于“主”日志(这是问题想要的,因为他引用了“本地主机”日志。

            如果您既需要日志轮换又不需要时间戳(通常是这种情况),那么坏消息是无法使用 tomcat 开箱即用 :(

            在这种情况下,最好的解决方案是将其配置为全局使用 log4j,这样更灵活,并且允许您以这种方式进行设置。

            【讨论】:

            • localhost 日志是访问日志,即那些日志是网络服务器日志(tomcat)。