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