【问题标题】:Tomcat Logging while running as a windows service作为 Windows 服务运行时的 Tomcat 日志记录
【发布时间】:2010-12-03 06:47:14
【问题描述】:

我有一个在 Tomcat 下运行的 Web 应用程序。

使用 java.util.logging 实现各种功能的日志记录。

通过 startup.bat 运行 tomcat 时,会创建日志文件并按预期记录日志。

当使用相同的 war 文件作为 Windows 服务运行时,日志记录的输出几乎不存在。 stdout.log 和 stderr.log 中有一些(几乎没有)日志输出,但不是预期的。

这听起来对任何人来说都很熟悉吗?你采取了哪些措施来纠正它?

问候

【问题讨论】:

  • 检查服务的属性 -- Windows 正在运行什么命令来启动 Tomcat?
  • 服务开始调用 org.apache.catalina.startup.Bootstrap 参数 start 在 JVM 模式

标签: java windows tomcat logging service


【解决方案1】:

这可能是在 Windows 上使用 Tomcat 9 时的权限问题。

tomcat bin 文件夹中的service.bat install 工具正在将tomcat 注册为本地服务帐户。

此帐户类型没有足够的权限(其中包括写入其日志文件和编译 jsps)。 要解决此问题,您可以更改服务帐户类型并使用本地用户帐户来运行服务。

或者,可以将帐户更改为本地系统帐户(服务安装程序曾经是这种情况),但出于安全原因,不再建议这样做。

另见Tomcat Service gets installed with “Local Service” account

【讨论】:

    【解决方案2】:

    stdout 和 stderr 日志文件应该已在 Tomcat 安装的日志目录中创建。

    要配置日志记录,请使用“配置 Tomcat”应用程序。您可以在那里设置错误级别和日志文件的位置。

    【讨论】:

      【解决方案3】:

      当 tomcat 作为服务启动时,它的默认日志配置实际上会覆盖任何特定于应用程序的日志配置。正如 Aaron 建议的那样,设置配置的最佳方法是使用 tomcatw //ES//tomcat_service_name,例如tomcat_service_name 可以是 Tomcat5,具体取决于您的安装偏好(另外,使用 tomcatw,而不是 tomcat - 两个可执行文件都可以在 C:\Program Files\Apache Software Foundation\Tomcat 5.0\bin 中找到)。这个post 解释了如何确保使用正确的服务名称(如果对话框中没有值,则名称可能不正确)。

      我会发布一张图片,但我没有足够的代表。在 Java VM 选项卡上,在 Java 选项中输入配置,例如-Dlog4j.configuration=service.log4j.properties

      然后可以将包含您的日志记录配置的文件放在 tomcat 服务器类目录中,例如C:\Program Files\Apache Software Foundation\Tomcat 5.0\server\classes。

      有几个地方可以放置日志记录配置文件。我最初尝试为日志配置文件指定完整路径,但 log4j 似乎只检查某些路径。正如post 所述,将 -Dlog4j.debug 作为 Java 选项中的第一行,您可以调试 log4j 正在执行的操作。服务器类目录被列为一种可能的搜索路径。

      创建 log4j.properties 文件时,请将其命名为 log4j.properties 以外的名称,例如服务.log4j.properties。将其命名为 log4j.properties 存在可能找到特定于应用程序的 log4j.properties 文件的风险,该文件会覆盖您的配置,但随后会被 tomcat 服务忽略。

      【讨论】:

        【解决方案4】:

        确保两种情况下的 Tomcat 环境相同。检查 Tomcat 服务编辑器中的路径和设置。不要对服务使用标准的 Windows 属性对话框,而是使用 //ES//name 启动 tomcat.exe,其中 name 是服务的名称。

        【讨论】:

          【解决方案5】:

          事实证明这是一个配置问题。

          当从 startup.bat 启动时,tomcat 会引用 conf 目录中的 logging.properties。

          当作为服务启动时,jdk/jre/lib logging.properties 开始发挥作用。

          当作为 Windows 服务运行时,所有控制台输出都重定向到 tomcat 日志目录中的 stdout.log。

          到目前为止,使用自定义 logging.properties 文件在自定义文件中捕获日志记录的尝试都失败了。

          【讨论】:

          • -1 表示“当作为服务启动时,jdk/jre/lib logging.properties 开始发挥作用。”将 Tomcat 作为 Windows 服务运行时,使用“Monitor Tomcat”应用程序配置日志记录。
          • 那么有没有办法将日志配置为使用 log4j 代替?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-21
          • 1970-01-01
          • 2015-01-17
          相关资源
          最近更新 更多