需要在tomcat的stdout logfile中打印日期

时间:2016-01-28 04:35:20

标签: java

我们有一个Web应用程序,现在我们要在stdout日志文件上打印日期,实际上我们在许多java文件中使用System.out.println()打印输出。所以,我们想要约会和时间我们获取输出的stdout / stderr日志文件中的时间(不更改java文件)。 请帮帮我。

1 个答案:

答案 0 :(得分:0)

在程序开头,您可以覆盖println()的{​​{1}}并添加System.out

new Date()

System.setOut(new PrintStream(System.out) { @Override public void println(String s) { Date date = new Date(); super.println(String.format("[%s] %s"), date, s); } })

相同

如果您允许使用 Java Instrumentation ,则可以使用代理

System.setErr()

使用package com.test.agent; import java.io.PrintStream; import java.lang.instrument.Instrumentation; import java.util.Date; public class AgentOutRewrite { public static void premain(String agentArgument, Instrumentation instrumentation) { System.out.println("Agent VM replacement"); System.setOut(new PrintStream(System.out) { @Override public void println(String str) { super.println(new Date() + ": " + str); } }); } }

MANIFEST.MF

如果您使用此类创建jar,例如Agent.jar 您可以将代理注入您的程序

Manifest-Version: 1.0 Premain-Class: com.test.agent.AgentOutRewrite

要将代理添加到Tomcat,您应该更改CATALINA_OPTS

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/YourAgentJar.jar"

就像在这篇文章中一样 Adding -javaagent to Tomcat 6 server, where do I put it and in what format?