【问题标题】:tomcat 9 windows redirect stdout stderr in log file and the consoletomcat 9 windows在日志文件和控制台中重定向stdout stderr
【发布时间】:2021-07-04 20:40:05
【问题描述】:

我在windows环境下使用apache-tomcat-9.0.48

我使用 startup.bat 来启动它

stdout 标准错误显示在控制台中,但不显示在日志文件中。

在日志文件夹中我有 5 个文件

localhost.2021-07-4.log manager.2021-07-4.log 主机管理器.2021-07-4.log catalina.2021-07-4.log localhost_access_log.2021-07-4.txt

我想打印这个文件 catalina.2021-07-4.log 中的所有 stdout stderr 同时在控制台中。

我试试这个解决方案:

startup.bat 中 将call "%EXECUTABLE%" start %CMD_LINE_ARGS% 更改为

call "%EXECUTABLE%" run %CMD_LINE_ARGS%  >>%CATALINA_HOME%\logs\catalina.%date:~0,4%-%date:~5,2%-%date:~8,2%.out 2>&1

我在 catalina.bat 中制作:

if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
%CATALINA_HOME%/logs/catalina.%date:~0,4%-%date:~5,2%-%date :~8,2%.out
goto end
:doSecurity
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
%CATALINA_HOME%/logs/catalina.%date:~0,4%-%date:~5,2%-%date :~8,2%.out
goto end
:doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
%CATALINA_HOME%/logs/catalina.%date:~0,4%-%date:~5,2%-%date :~8,2%.out
goto end
:doSecurityJpda
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
%CATALINA_HOME%/logs/catalina.%date:~0,4%-%date:~5,2%-%date :~8,2%.out
goto end

这是 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.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.maxDays = 90
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

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.
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8


############################################################
# 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

# To see debug messages for HTTP/2 handling, uncomment the following line:
#org.apache.coyote.http2.level = FINE

# To see debug messages for WebSocket handling, uncomment the following line:
#org.apache.tomcat.websocket.level = FINE

使用此解决方案,错误仅显示在这种文件 catalina.Sun

并且不显示在控制台中

更新:

我有一个使用 jhipster angular 的 web 应用程序,它被部署在 C:\apache-tomcat-9.0.48\webapps

现在我已经删除了我在 startap.bat 和 catalina.bat 中的配置

我在 startap.bat 中创建call "%EXECUTABLE%" start %CMD_LINE_ARGS%

我在 context.xml 中做这个配置

<Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Context swallowOutput="true" />
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
</Context>

但我仍然在控制台中出现应用程序错误,而不是在日志文件中

【问题讨论】:

    标签: tomcat9


    【解决方案1】:

    备注:打印到System.out/System.err 不是正确的记录方式。如果您想在您自己的应用程序中记录某些内容,请使用适当的记录系统。

    如果您想将 stdout/stderr 重定向到 Tomcat 自己的日志系统,请使用上下文配置的 swallowOutput 属性(参见 documentation)。如果您在webapps/appwebapps/app.war 中有一个应用程序,这总结起来(假设您没有更改引擎和主机名)创建一个包含内容的文件conf/Catalina/localhost/app.xml

    <?xml version="1.1" encoding="UTF-8"?>
    <Context swallowOutput="true" />
    

    【讨论】:

    • 感谢您的回复,我已经更新了我的问题,但是使用 在日志文件中找不到错误,也是linux环境下所有应用程序错误的问题在 catalina.out 中找到。但是在windows环境下我没有找到catalina.out
    • 您向conf/context.xml 添加了另一个&lt;Context&gt; 元素,而不是修改现有元素。将外部&lt;Context&gt; 更改为&lt;Context swallowOutput="true"&gt;。顺便说一句:阅读日志有助于解决配置错误。在另一个&lt;Context&gt; 元素中插入&lt;Context&gt; 元素会导致打印警告“No rules found matching [Context/Context]”
    猜你喜欢
    • 1970-01-01
    • 2011-10-15
    • 2021-09-08
    • 1970-01-01
    • 2014-07-22
    • 2020-03-04
    • 1970-01-01
    • 2019-04-12
    • 2015-09-02
    相关资源
    最近更新 更多