räp*_*äph 16 logging tomcat log4j tomcat7
我根据http://tomcat.apache.org/tomcat-7.0-doc/logging.html使用tomcat 7.0.40和log4j配置
除了创建了一些日志文件之外,所有内容都按预期工作,这些日志文件实际上没有在我的log4j.properties中配置:
log4j.rootLogger=INFO, CATALINA
# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.RollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.log
log4j.appender.CATALINA.MaxFileSize=3MB
log4j.appender.CATALINA.MaxBackupIndex=10
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.LOCALHOST=org.apache.log4j.RollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.log
log4j.appender.LOCALHOST.MaxFileSize=3MB
log4j.appender.LOCALHOST.MaxBackupIndex=10
log4j.appender.LOCALHOST.Append=true
log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.MANAGER=org.apache.log4j.RollingFileAppender
log4j.appender.MANAGER.File=${catalina.base}/logs/manager.log
log4j.appender.MANAGER.MaxFileSize=3MB
log4j.appender.MANAGER.MaxBackupIndex=10
log4j.appender.MANAGER.Append=true
log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.HOST-MANAGER=org.apache.log4j.RollingFileAppender
log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.log
log4j.appender.HOST-MANAGER.MaxFileSize=3MB
log4j.appender.HOST-MANAGER.MaxBackupIndex=10
log4j.appender.HOST-MANAGER.Append=true
log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=\
INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=\
INFO, HOST-MANAGER
Run Code Online (Sandbox Code Playgroud)
创建的文件虽然不在我的配置中,但是:
如你所见,他们使用每日滚动文件appender,这是不需要的,因为我需要一个免维护系统,所以我更喜欢使用maxBackupIndex的scrollfileappender来防止日志的无限增长.
那么我在哪里可以配置stdout,stderr和commons-daemon日志?是否有某些配置或我可以用我自己的log4j配置覆盖配置?谢谢
M..*_*M.. 18
我预见到我们的某个系统将来会有一些类似的要求/面临同样的问题.所以热衷于自己找到一些解决方案/解决方法.
首先查看commons-daemon,看看是否有任何配置可以在日志上实现maxbackupindex; 但搜索没有多大帮助.
然而,我发现人们采取两种处理"tomcat日志越过限制"的方法.
context.xml在路径中找到Tomcat: -
YourTomcatInstallDir\conf\context.xml
Run Code Online (Sandbox Code Playgroud)编辑上下文标记以添加swallowOutput="true"如下: -
<Context swallowOutput="true">
Run Code Online (Sandbox Code Playgroud)
(这会吞下所有stdout/stderr并重定向到您的基础日志系统.)
在你的log4j.properties中; 添加配置以将org.apache.catalina日志重定向到您自己的日志文件.
您的记录器将如下所示: -
log4j.logger.org.apache.catalina=INFO, YourAppender
Run Code Online (Sandbox Code Playgroud)
(YourAppender现在您可以设置MaxBackupIndex并MaxFileSize实现定义的翻转次数和日志大小限制.)
如果上述方法不起作用; 您可以尝试使用第二种方法中提到的外部实用程序
有一个简单的工具logrotate可用于实现对您无法控制的日志所需的效果.这里有一些链接可以帮助您入门.
使用此工具非常简单,快速浏览这些链接可以满足您的需求.
小智 13
我有同样的问题,最后偶然发现了解决方案.Tomcat 7 for Windows有一个名为Monitor Tomcat的tomcat属性应用程序.在日志选项卡上,您需要删除重定向标准输出和标准输入框中的"自动"值.只需将其留空即可创建这些文件.然后,您可以使用log4j为这些关键文件创建滚动日志文件,以便将来进行调试.
希望有所帮助.
简洁版本:
那么我在哪里可以配置 stdout、stderr 和 commons-daemon 日志呢?
Procrun GUI 内部。
某处是否有一些配置,或者我可以使用自己的 Log4j 配置覆盖该配置吗?
不,我希望,但我不这么认为。但这里有一个肮脏的技巧可以完全阻止 Procrun 进行日志记录:设置Log Path:为NOTADRIVE:(包括尾随的:)。那么三个日志文件(commons-daemon、stderr、stdout)都不会被创建。
中等版本:我对这个解决方案不太满意,但对于我必须管理的 Tomcats,我设置了几件事:
copytruncate(即使是应该执行此操作的目录也不行。)也许我将来会再试一次。swallowOutput属性 ** 更新:2022-03-30,我已经尝试过,但它对我的 webapps 根本不起作用。而且关于 Apache 的描述听起来很可怕。所以我决定不使用swallowOutput.长版本见下文。(这是一个漫无目的的深入探讨。请考虑一下自己受到的警告。)
默认的 Windows 安装程序会将 Tomcat 注册为服务。
其内部机制称为Commons Daemon Service Manager。
有 Unix 和 Windows 版本。Win32版本称为“Procrun”。
Procrun 有一个 GUI,严格来说这个 GUI 称为“ Prunmgr ”。——但我会掩盖这一点并假装这一切都被称为“Procrun”。
Procrun 不使用标准的 Windows 事件日志框架。相反,Procrun 将创建一些日志文件。让我们启动 GUI 看看它们是什么。
Windows 图标刚刚标记为Monitor Tomcat。
在默认安装中,这是启动的快捷方式"C:\Program Files\Apache Software Foundation\Tomcat 7.0\bin\Tomcat7w.exe" //MS//Tomcat7
启动此操作将直接进入 Procrun 的Logging选项卡。
这是全新安装后使用所有默认值的 Procrun 的“日志记录”选项卡的屏幕截图:

(安装详细信息:apache-tomcat-7.0.40.exe在 Win10 x64 上。)
Procrun可以生成几个文件:
commons-daemon文件。Pid file。我们现在不关心这个。Redirect Stdout文件。Redirect Stderror文件。所以有3个日志文件。并且Procrun只会在您重新启动Tomcat时启动一个新的Procrun。
因此,如果旧日志文件变得太大,Procrun 将不会创建新文件。此外,Procrun 不会对日志目录中的旧日志文件执行任何操作,并使日志目录本身太大。
让我们看看各个日志文件以及它们的作用:commons-daemon日志文件、Redirect Stdout日志文件和Redirect Stderror日志文件。
commons-daemon日志档案该文件包含有关 Procrun 本身工作的信息。例子:
PS C:\> Get-Content -Path "C:\Program Files\Apache Software Foundation\Tomcat 7.0\logs\commons-daemon.2020-09-08.log"
[2020-09-08 16:06:28] [info] [ 4276] Commons Daemon procrun (1.0.15.0 64-bit) started
[2020-09-08 16:06:28] [info] [ 4276] Running 'Tomcat7' Service...
[2020-09-08 16:06:28] [info] [17304] Starting service...
[2020-09-08 16:06:29] [info] [17304] Service started in 1135 ms.
[2020-09-08 16:09:24] [info] [11520] Stopping service...
[2020-09-08 16:09:25] [info] [11520] Service stop thread completed.
[2020-09-08 16:09:25] [info] [ 4276] Run service finished.
[2020-09-08 16:09:25] [info] [ 4276] Commons Daemon procrun finished
Run Code Online (Sandbox Code Playgroud)
默认日志级别为info.
所以路径和文件名的构造是这样的:日志路径+“\”+日志前缀+“.” + 日期格式为 YYYY-MM-DD +“.log”。
如果将Log 前缀留空,则它将默认为commons-daemon. 如果关闭 Procrun 并重新打开它,则Log 前缀将设置为commons-daemon。换句话说:你不能将其留空。如果你尝试,Procrun 会默默地把它改回来。
如果您将Log 路径指向一个不存在的目录,则 ProcRun 将尝试创建该目录。
如果你输入IDONTCARE,那么就会发生这种情况:
PS C:\> handle.exe commons-daemon
Nthandle v4.22 - Handle viewer
Copyright (C) 1997-2019 Mark Russinovich
Sysinternals - www.sysinternals.com
Tomcat7.exe pid: 4880 type: File 1B8: C:\Windows\System32\IDONTCARE\commons-daemon.2020-09-08.log
PS C:\> handle -nobanner IDONTCARE
Tomcat7.exe pid: 4880 type: File 1B8: C:\Windows\System32\IDONTCARE\commons-daemon.2020-09-08.log
Tomcat7.exe pid: 4880 type: File 1BC: C:\Windows\System32\IDONTCARE\tomcat7-stdout.2020-09-08.log
Tomcat7.exe pid: 4880 type: File 1D4: C:\Windows\System32\IDONTCARE\tomcat7-stdout.2020-09-08.log
Tomcat7.exe pid: 4880 type: File 1D8: C:\Windows\System32\IDONTCARE\tomcat7-stderr.2020-09-08.log
Tomcat7.exe pid: 4880 type: File 1DC: C:\Windows\System32\IDONTCARE\tomcat7-stderr.2020-09-08.log
Run Code Online (Sandbox Code Playgroud)
是的。IDONTCARE它创建了一个名为inside的目录C:\Windows\System32。这不是一个好主意。
但如果您输入I\DONT\CARE,则不会创建任何文件。那么这三个日志文件都不会被创建。
PS C:\> handle -nobanner commons-daemon
No matching handles found.
Run Code Online (Sandbox Code Playgroud)
对于输入带有冒号的内容(例如“NOTADRIVE:”)也是如此。
如果将日志路径留空,则 Procrun 将默认默认为%SYSTEMROOT%\System32\LogFiles\Apache. (见下文。)我对此感到惊讶。(但这实际上是记录的默认行为。)
PS C:\> handle.exe commons-daemon
Nthandle v4.22 - Handle viewer
Copyright (C) 1997-2019 Mark Russinovich
Sysinternals - www.sysinternals.com
Tomcat7.exe pid: 7504 type: File 88: C:\Windows\System32\LogFiles\Apache\commons-daemon.2020-08-31.log
Run Code Online (Sandbox Code Playgroud)
我在这里只描述 Stdout。Stderr 的行为是相同的。
auto重定向标准输出的默认设置是auto。然后路径和文件名的构造如下:日志路径+ "" + your-service-name-here + "-stdout"。+ 日期格式为 YYYY-MM-DD +“.log”。
“auto”的大小写似乎并不重要。所有小写的“auto”与所有大写的“AUTO”的工作方式相同。
示例:默认安装时,您的服务名称将为“Tomcat7”。如果您于 2020 年 9 月 8 日启动 Tomcat,则全名将是:C:\Program Files\Apache Software Foundation\Tomcat 7.0\logs\tomcat7-stdout.2020-09-08.log
如果将重定向标准输出留空,则不会创建标准输出日志文件。(我仔细检查了handle.exe。)此行为与日志文件的行为不同commons-daemon。
如果将Redirect Stdout设置为绝对路径,则日志文件将在那里创建。
如果该目录不存在,则不会创建该目录。此行为与日志文件的行为不同commons-daemon。
如果绝对路径的文件名部分是“auto”,那么这没有特殊含义。它不会创建带有时间戳的文件。它只会创建一个名为“auto”的文件。
如果将“重定向标准输出”设置为“mystdout”,则将创建一个具有完整路径的文件:“C:\Program Files\Apache Software Foundation\Tomcat 7.0\mystdout”。请注意,这是在日志路径目录之外。此行为不同于commons-daemon。
这里Procrun使用的路径来自Procrun | “启动” | “工作路径:”
(默认为C:\Program Files\Apache Software Foundation\Tomcat 7.0)
(此路径存储在 Windows 注册表中:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Apache Software Foundation\Procrun 2.0\Tomcat7\Parameters\Start =>workingPath - 这是在我的 Win10 x64 计算机上。不确定为什么使用 WOW6432Node。)
我想到了几种解决方法:
采取一个巧妙的解决方法:将 Procrun 设置Log Path:为NOTADRIVE:. 那么这三个日志文件都不会被创建。
采取一个不那么麻烦的解决方法:禁用 stdout/stderr 文件的创建(见下文)。您仍然需要一种方法来清理旧的“commons-daemon”文件。(我知道没有办法禁用这些文件的创建。仅清空文本字段不会解决问题。)但至少这些文件的大小应该很小。
设置 Tomcat 和/或整个机器的自动重启。这将创建一个带有重启日期时间戳的文件。您仍然需要一种方法来清理旧的 commons-daemon/stdout/stderr 文件。但至少它们不会被锁定为“正在使用”,您可以删除它们,也许可以使用DelAge.
使用外部 Logrotate-for-Windows 实用程序(例如LogRotateWin)来旋转当前文件并清理旧的旋转文件。有关示例,请参阅此答案: https: //serverfault.com/questions/358172/equivalent-of- logrotate-for-windows/1032685#1032685
不要使用 Procrun 并以其他方式启动 Windows Tomcat。这不会创建任何 commons-daemon/stdout/stderr 文件。--“Procrun”只是几个现有的(据称)通用 java 服务包装器之一。我在这里写“据说”,因为“通用”似乎是“commons daemon”的设计目标,但实际上我从未见过它在 Tomcat 以外的任何地方使用。-- 在谷歌搜索“java servicewrapper”时,我发现了几个项目,但我还没有尝试过其中任何一个。
我认为官方立场可以粗略地概括为“什么?你的 catalina/stdout/stderr 文件变得太大了?好吧,无论如何你都不应该向这些文件记录任何内容。” 换句话说:如果您完全使用 Procrun,那么唯一官方支持的选项似乎是数字 2(和 4)。
官方 Apache Tomcat Windows 服务操作方法。适用于:Tomcat 7.0、Tomcat 8.0、Tomcat 8.5、Tomcat 9.0
阿帕奇门票。有几个“请添加对数旋转!” 官方 Apache Jira 问题跟踪器中的票证。他们已经在那里坐了十多年了。所以不要屏住呼吸。
| 归档时间: |
|
| 查看次数: |
46327 次 |
| 最近记录: |