Tomcat - stdout file is very huge

Viewed 1108

I want to limit stdout file size inside Tomcat logs folder.

my questions are :

  1. I need to config extra logging configuration except -Djava.util.logging.FileHandler.limit=25000000 ?
  2. is it required apache service restart to take a effect changes ?

I want to add under the Java tab, in the Java Options section add the following: -Djava.util.logging.FileHandler.limit=25000000

Already , defined below parameters in the Java Options section:

-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

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
1 Answers

Tomcat logs to the error file descriptor using java.util.logging.ConsoleHandler (not java.util.logging.FileHandler) which sends everything to System.err. Therefore there is no way to limit the size of the logs.

However you can in prunsrv (usually renamed as tomcat8.exe):

  1. Disable the redirection of stdout/stderr to any file by setting --StdOutput and --StdError to the empty string. The default logging.properties file distributed with Tomcat logs everything also to catalina.<date>.log, which is rotated daily, so Tomcat's logs will not be lost.

  2. Set the --StdOutput and --StdError options to auto, which should rotate them daily, although I didn't test and it doesn't seem to be implemented yet[1].

You can change this setting also in the graphical interface prunmgr (usually renamed as tomcat8w.exe).

Remark: If you disable the redirection of stdout/stderr to a file, you should also disable the ConsoleHandler by modifying logging.properties from:

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

to:

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

Check also whether your web applications don't use other logging frameworks than java.util.logging and modify the logging configuration (log4j.properties for Log4j 1.x, etc.) so that nothing is logged to the standard output/error.


[1] There is a long standing bug report for this issue.

Related