Jay*_*ard 5 tomcat stdout amazon-cloudwatch docker macos-catalina
首先我要说的是我不是 Tomee/TomCat 专家。
我有一个应用程序 (.war) 在 AWS 上的 ECS/Fargate 上基于 Tomee 的 Docker 容器中运行。我试图让 Tomee 将所有日志发送到,STDOUT以便应用程序中的日志将发送到 AWS 中的 CloudWatch。我已经尝试过这个问题中的建议/答案,但即使在本地测试时我仍然看不到应用程序日志:
docker logs -f myapp
Run Code Online (Sandbox Code Playgroud)
这是添加了以下内容的logging.properties文件 java.util.logging.ConsoleHandler:
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, org.apache.tomee.jul.formatter.AsyncConsoleHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler, org.apache.tomee.jul.formatter.AsyncConsoleHandler, 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
org.apache.tomee.jul.formatter.AsyncConsoleHandler.level = FINE
org.apache.tomee.jul.formatter.AsyncConsoleHandler.formatter = org.apache.juli.OneLineFormatter
org.apache.tomee.jul.formatter.AsyncConsoleHandler.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, java.util.logging.ConsoleHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
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, java.util.logging.ConsoleHandler
Run Code Online (Sandbox Code Playgroud)
我已经按照以下建议添加了一个环境变量/usr/local/tomee/bin/:
#!/bin/bash
CATALINA_OUT=/dev/stdout
Run Code Online (Sandbox Code Playgroud)
所有发送到的日志STDOUT都会自动发送到 AWS Cloudwatch(我可以在那里看到 Catalina 日志中的信息),但访问/错误日志不会。
我在这里错过了什么吗?或者是否有更简单的方法来确保在 CloudWatch 中看到应用程序的日志?
经过大量研究,我发现在 server.xml 中使用以下语句将使用以下命令将日志发送到 STDOUT AccessLogValve:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/dev/stdout"
prefix="" suffix="" rotatable="false"
pattern="%h %l %u %t "%r" %s %b" />
Run Code Online (Sandbox Code Playgroud)
或者
<Valve className="[...].AccessLogValve" directory="/dev"
prefix="stdout" suffix="" fileDateFormat=""
pattern="%h %l %u %t "%r" %s %b"
/>
Run Code Online (Sandbox Code Playgroud)
根据 Tomcat/Tomee 的版本,这两种方法都可以很好地工作,而不需要将实际日志软链接到/dev/stdout