需要在雄猫的标准输出日志文件中打印日期



我们有一个 Web 应用程序,现在我们想在日志文件stdout打印日期,实际上我们在这么多 java 文件中使用 System.out.println() 打印输出。因此,我们希望日期和时间位于stdout/stderr日志文件中,我们获取输出的位置(无需更改java文件)。请帮助我。

在程序的开头,您可以覆盖System.outprintln()并添加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 服务器,我把它放在哪里,以什么格式?

最新更新