我们有一个 Web 应用程序,现在我们想在日志文件stdout
打印日期,实际上我们在这么多 java 文件中使用 System.out.println()
打印输出。因此,我们希望日期和时间位于stdout
/stderr
日志文件中,我们获取输出的位置(无需更改java文件)。请帮助我。
在程序的开头,您可以覆盖System.out
的println()
并添加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);
}
})
你可以用System.setErr()
做同样
如果允许使用 Java Instrumentation,则可以使用代理
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
Manifest-Version: 1.0
Premain-Class: com.test.agent.AgentOutRewrite
如果您使用此类创建 jar,例如代理.jar你可以像这样将代理注入到你的程序中
java -javaagent:Agent.jar YourProgram.jar
要将代理添加到Tomcat,您应该更改CATALINA_OPTS
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/YourAgentJar.jar"
就像在这篇文章中一样将 -javaagent 添加到 Tomcat 6 服务器,我把它放在哪里,以什么格式?