重定向标准输出到Log

【Log】 专栏收录该内容
7 篇文章 0 订阅

思路是 重定向PrintStream到Log,代码如下:

package com.zero.log4j2;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.PrintStream;

public class Log4jPrintStream {
    private static Logger LOGGER = LoggerFactory.getLogger(Log4jPrintStream.class);

    public static void redirectSystemPrint() {
        PrintStream printStreamOut = createLoggingWrapper(System.out, false);
        System.setOut(printStreamOut);

        PrintStream printStreamErr = createLoggingWrapper(System.out, true);
        System.setErr(printStreamErr);
    }

    private static PrintStream createLoggingWrapper(final PrintStream printStream, final boolean isErr) {
        return new PrintStream(printStream) {
            private void printToLog(Object message) {
                if (isErr) {
                    LOGGER.error("{}", message);
                }
                else {
                    LOGGER.info("{}", message);
                }
            }

            @Override
            public void print(final String string) {
                printToLog(string);
            }

            @Override
            public void print(boolean b) {
                printToLog(b);
            }

            @Override
            public void print(char c) {
                printToLog(c);
            }

            @Override
            public void print(int i) {
                printToLog(i);
            }

            @Override
            public void print(long l) {
                printToLog(l);
            }

            @Override
            public void print(float f) {
                printToLog(f);
            }

            @Override
            public void print(double d) {
                printToLog(d);
            }

            @Override
            public void print(char[] x) {
                printToLog(x);

            }

            @Override
            public void print(Object obj) {
                printToLog(obj);
            }
        };
    }
}

注意,要在主类中添加如下代码:

	static {
		Log4jPrintStream.redirectSystemPrint();
	}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值