如何在 Windows 下的 Java 服务中添加时间戳 GC 日志文件名?
How can I add timestamps GC log file names in a Java Service under Windows?
我在 Windows 下有一个针对 Apache Tomcat 运行的 Java 应用程序。有两种运行此应用程序的方法 - 作为 Windows 服务,或从批处理文件中手动调用 Tomcat。
当我通过批处理文件启动应用程序时,我使用以下内容将 GC 日志添加到 JVM 参数中:
-Xloggc=%~dp0..\logs\gc-%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%_%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.log
这会导致 GC 日志在文件名中输出日期 - 但是当作为服务运行时,DATE
和 TIME
变量无法正确解析。
使用 Windows 服务时,我必须在 JVM 参数中使用哪些变量以确保日期和时间附加到 GC 日志?
我已尝试对其进行简化 - gc-%DATE%.log, gc-${DATE}.log
,在所有情况下该变量都不会解析。
感谢任何帮助!
编辑: 请注意,当应用程序作为 Windows 服务运行时,任何解决方案 必须 有效。单独使用很好,我们已经涵盖了。仅当使用 Windows 服务时。
编辑 - 使用 Tomcat 作为 Windows 服务
我已经使用 documentation.
作为 Windows 服务安装了 Tomcat
然后我 运行 来自 Tomcat bin 目录的命令行:
"tomcat7.exe" //US//Tomcat7 ++JvmOptions=-Xloggc:gc-%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%_%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.log
注意://US
是更新服务命令。 Tomcat7
是服务的名称。
然后重启服务,现在日志路径已经正确解析了。
假设您有现有目录,它应该可以工作。您的日期表达式需要一个名为 gc-2015.1
的目录并创建一个名为 .01_13.43.35.log
的文件(如果我们是 2015 年 1 月 15 日 13 时 43 分 35 秒)
如果您正在使用 catalina.bat
为什么它不起作用?因为您遇到了延迟扩展的问题。
您必须在 catalina.bat
中使用 setlocal ENABLEDELAYEDEXPANSION
启用延迟扩展
然后将%
替换为!
。你最终会得到 -Xloggc="!~dp0..\logs\gc-!DATE:~-4!.!DATE:~4,2!.!DATE:~7,2!_!TIME:~0,2!.!TIME:~3,2!.!TIME:~6,2!.log"
.
希望这篇link能帮到你解决问题
http://tomcat.10.x6.nabble.com/gc-log-filename-variables-in-windows-td4987672.html
连我的观察结果都是一样的。
当我们使用 startup.bat 启动 tomcat 并在 catalina.bat
中为 JAVA_OPTS 变量设置与 gc 日志记录相关的值时它起作用。
为什么它起作用是有道理的,因为批处理解释器
会解决这个
-Xloggc=%~dp0..\logs\gc-%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%_%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.log
像这样
-Xloggc:C:\logs\gc-2015.01.17_17.14.09.log
并将其作为参数传递给 jvm。
我最接近的是使用位于 bin 目录下的 tomcat7w.exe
进行以下配置。
日志文件将在达到指定大小时开始滚动。
您可以在日志文件中找到时间戳。
也曾尝试配置 setenv.bat
,但 tomcat7.exe
似乎没有使用它。
希望对您有所帮助。
您是否尝试过通过 this one 这样的包装器调用批处理文件?
编辑:还请记住,如有必要,必须按照@alain-janinm 的建议使用延迟扩展。
使用 java 8 您可以访问两个非常有用的新替换。添加了 %t 和 %p,其中 %t 是时间戳,%p 是进程 ID。
-Xloggc:C:\logs\gc_%t_%p.log 将在 C:\logs.
中产生一个类似这样的文件
gc_2016-08-12_10-12-29_pid7320.log
此功能没有很好的记录。我在这里发现了它:
OpenJDK Bug JDK-6950794
因为我也希望它在 windows 服务中工作,所以我已通过以下方式将此功能的使用添加到 tomcat service.bat 脚本中。
--JvmOptions "...;-Xloggc:%CATALINA_BASE%\logs\gc-%%t.log;..."
记下 %%t。需要额外的 % 作为转义字符。
我在 Windows 下有一个针对 Apache Tomcat 运行的 Java 应用程序。有两种运行此应用程序的方法 - 作为 Windows 服务,或从批处理文件中手动调用 Tomcat。
当我通过批处理文件启动应用程序时,我使用以下内容将 GC 日志添加到 JVM 参数中:
-Xloggc=%~dp0..\logs\gc-%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%_%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.log
这会导致 GC 日志在文件名中输出日期 - 但是当作为服务运行时,DATE
和 TIME
变量无法正确解析。
使用 Windows 服务时,我必须在 JVM 参数中使用哪些变量以确保日期和时间附加到 GC 日志?
我已尝试对其进行简化 - gc-%DATE%.log, gc-${DATE}.log
,在所有情况下该变量都不会解析。
感谢任何帮助!
编辑: 请注意,当应用程序作为 Windows 服务运行时,任何解决方案 必须 有效。单独使用很好,我们已经涵盖了。仅当使用 Windows 服务时。
编辑 - 使用 Tomcat 作为 Windows 服务
我已经使用 documentation.
作为 Windows 服务安装了 Tomcat然后我 运行 来自 Tomcat bin 目录的命令行:
"tomcat7.exe" //US//Tomcat7 ++JvmOptions=-Xloggc:gc-%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%_%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.log
注意://US
是更新服务命令。 Tomcat7
是服务的名称。
然后重启服务,现在日志路径已经正确解析了。
假设您有现有目录,它应该可以工作。您的日期表达式需要一个名为 gc-2015.1
的目录并创建一个名为 .01_13.43.35.log
的文件(如果我们是 2015 年 1 月 15 日 13 时 43 分 35 秒)
如果您正在使用 catalina.bat
为什么它不起作用?因为您遇到了延迟扩展的问题。
您必须在 catalina.bat
setlocal ENABLEDELAYEDEXPANSION
启用延迟扩展
然后将%
替换为!
。你最终会得到 -Xloggc="!~dp0..\logs\gc-!DATE:~-4!.!DATE:~4,2!.!DATE:~7,2!_!TIME:~0,2!.!TIME:~3,2!.!TIME:~6,2!.log"
.
希望这篇link能帮到你解决问题
http://tomcat.10.x6.nabble.com/gc-log-filename-variables-in-windows-td4987672.html
连我的观察结果都是一样的。
当我们使用 startup.bat 启动 tomcat 并在 catalina.bat
中为 JAVA_OPTS 变量设置与 gc 日志记录相关的值时它起作用。
为什么它起作用是有道理的,因为批处理解释器 会解决这个
-Xloggc=%~dp0..\logs\gc-%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%_%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.log
像这样
-Xloggc:C:\logs\gc-2015.01.17_17.14.09.log
并将其作为参数传递给 jvm。
我最接近的是使用位于 bin 目录下的 tomcat7w.exe
进行以下配置。
日志文件将在达到指定大小时开始滚动。 您可以在日志文件中找到时间戳。
也曾尝试配置 setenv.bat
,但 tomcat7.exe
似乎没有使用它。
希望对您有所帮助。
您是否尝试过通过 this one 这样的包装器调用批处理文件?
编辑:还请记住,如有必要,必须按照@alain-janinm 的建议使用延迟扩展。
使用 java 8 您可以访问两个非常有用的新替换。添加了 %t 和 %p,其中 %t 是时间戳,%p 是进程 ID。
-Xloggc:C:\logs\gc_%t_%p.log 将在 C:\logs.
中产生一个类似这样的文件gc_2016-08-12_10-12-29_pid7320.log
此功能没有很好的记录。我在这里发现了它: OpenJDK Bug JDK-6950794
因为我也希望它在 windows 服务中工作,所以我已通过以下方式将此功能的使用添加到 tomcat service.bat 脚本中。
--JvmOptions "...;-Xloggc:%CATALINA_BASE%\logs\gc-%%t.log;..."
记下 %%t。需要额外的 % 作为转义字符。