Jboot输出Action日志到日志文件

正常情况下,Jboot的action日志只显示在控制台,查看JbootActionReporter源码:

image.png

原来如此。


如果需要将其同时输出到日志文件中,按如下步骤即可:

  • 创建自己的LogOutWriter;

    private static class LogOutWriter extends Writer {
        private Log LOG = Log.getLog(JbootActionReporter.class);

        @Override
        public void close() throws IOException {
        }

        @Override
        public void flush() throws IOException {
        }

        @Override
        public void write(char[] cbuf, int off, int len) throws IOException {
        }

        @Override
        public void write(String str) throws IOException {
            this.LOG.info(str);
        }
    }


  • 继承JbootAppListenerBase,自定义自己的Jboot启动类;

public class JbsaAppListener extends JbootAppListenerBase {
    private static class LogOutWriter extends Writer {
        // 上面的LogOutWriter放在此类中定义为static class就好。
    }
}

    

  • 启动类中覆盖onStartBefore()方法,设置JbootActionReporter输出日志的通道为LogOutWriter;

    @Override
    public void onStartBefore() {
        super.onStartBefore();
        JbootActionReporter.setWriter(new LogOutWriter());
    }


评论区

SuperEric

2022-03-15 11:00

貌似不需要这么麻烦,把他的这个SystemOutWriter控制台内容收起来就是你想要的了。看看海哥写的启动脚本。function start()
{
# 运行为后台进程,并在控制台输出信息
java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} &

# 运行为后台进程,并且不在控制台输出信息
# nohup java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} >/dev/null 2>&1 &

# 运行为后台进程,并且将信息输出到 output.log 文件
# nohup java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} > output.log &

# 运行为非后台进程,多用于开发阶段,快捷键 ctrl + c 可停止服务
# java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS}
}

糊搞

2022-03-18 17:44

@SuperEric 这样输出是可以的,但我是想在指定的log4j,logback等第3方的日志中输出。这时,海哥这方式就不适用了

热门分享

扫码入社