【问题标题】:Tomcat - stdout file is very hugeTomcat - 标准输出文件非常大
【发布时间】:2021-06-15 13:16:12
【问题描述】:

我想限制 Tomcat 日志文件夹中的标准输出文件大小。

我的问题是:

  1. 我需要配置额外的日志配置,除了 -Djava.util.logging.FileHandler.limit=25000000?
  2. 是否需要重启 apache 服务才能使更改生效?

我想在 Java 选项卡下添加,在 Java 选项部分添加以下内容: -Djava.util.logging.FileHandler.limit=25000000

已经在 J​​ava 选项部分定义了以下参数:

-Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 8.0
-Dcatalina.base=C:\Program Files\Apache Software Foundation\Tomcat 8.0
-Djava.endorsed.dirs=C:\Program Files\Apache Software Foundation\Tomcat 8.0\endorsed
-Djava.io.tmpdir=C:\Program Files\Apache Software Foundation\Tomcat 8.0\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\logging.properties

日志属性:

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.

4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter


############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler

# For example, set the org.apache.catalina.util.LifecycleBase logger to log
# each component that extends LifecycleBase changing state:
#org.apache.catalina.util.LifecycleBase.level = FINE

# To see debug messages in TldLocationsCache, uncomment the following line:
#org.apache.jasper.compiler.TldLocationsCache.level = FINE

【问题讨论】:

    标签: tomcat logging


    【解决方案1】:

    Tomcat 使用java.util.logging.ConsoleHandler(不是java.util.logging.FileHandler)将所有内容发送到System.err 记录到错误文件描述符。因此无法限制日志的大小。

    但是你可以在prunsrv(通常重命名为tomcat8.exe):

    1. 通过将--StdOutput--StdError 设置为空字符串来禁用stdout/stderr 到任何文件的重定向。与 Tomcat 一起分发的默认 logging.properties 文件还将所有内容记录到 catalina.<date>.log,该文件每天轮换一次,因此 Tomcat 的日志不会丢失。

    2. --StdOutput--StdError 选项设置为auto,这应该每天轮换它们,尽管我没有测试它doesn't seem to be implemented yet[1]

    您也可以在图形界面 prunmgr 中更改此设置(通常重命名为 tomcat8w.exe)。

    备注:如果您禁用stdout/stderr 到文件的重定向,您还应该通过修改logging.properties 来禁用ConsoleHandler

    .handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
    

    到:

    .handlers = 1catalina.org.apache.juli.AsyncFileHandler
    

    还要检查您的 Web 应用程序是否不使用除 java.util.logging 之外的其他日志记录框架,并修改日志记录配置(log4j.properties 用于 Log4j 1.x 等),以便没有任何内容记录到标准输出/错误中。


    [1]这个问题有一个长期存在的bug report

    【讨论】:

    • 首先感谢您的回答。 tomcat8w.exe GUI 内的 Java 选项部分需要哪些参数?
    • 保留标准的(您在问题中列出的)。只更改 "Logging" 选项卡 $CATALINA_BASE/conf/logging.properties 并查看您的应用程序中是否使用了其他日志记录框架。
    • 我已经更新了我的问题。你可以看到我的日志属性。 .handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 够了吗?
    • 我会删除java.util.logging.ConsoleHandler,因为相同的内容被发送到另一个处理程序。正如java.util.logging.ConsoleHandler 所解释的那样,没有任何旋转或最大文件大小(因为它不知道它记录到文件中)。另一个处理程序更具可配置性。
    • 最后再次感谢,是否需要重启服务?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2010-11-19
    • 2018-05-22
    相关资源
    最近更新 更多