用log4j输出system.out的日志

对于一些老项目,用的都是system.out输出日志,并且用的都是tomcat自带的logging.properties配置文件,但是这样有一个弊端,对于最关键的错误日志和输出日志tomcat记录日志的方式为每次启动服务才会检查是否生成新的文件,这样就会导致stdout.log和stderr.log只有一个,随着时间越来越大,毕竟生产服务器不会每天启动停止。这样我们就需要用log4j去把system.out的日志记录下来,具体步骤如下:

1,引入log4j的jar包,这个就不需要说了,直接附配置文件:

log4j.rootLogger=INFO,Stdout,R
log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n


log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/pboc.log
log4j.appender.R.datePattern='.'yyyy-MM-dd'.txt'
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n


2,增加转化类,放置位置随便:

public class LogSystem implements ServletContextListener {
    public void contextDestroyed(ServletContextEvent event) {
    }
    private void log(Object info) {
        LogFactoryImpl.getLog(getClass()).info(info);
    }
    public void contextInitialized(ServletContextEvent event) {
        PrintStream printStream = new PrintStream(System.out) {
            public void println(boolean x) {
                log(Boolean.valueOf(x));
            }
            public void println(char x) {
                log(Character.valueOf(x));
            }
            public void println(char[] x) {
                log(x == null ? null : new String(x));
            }
            public void println(double x) {
                log(Double.valueOf(x));
            }
            public void println(float x) {
                log(Float.valueOf(x));
            }
            public void println(int x) {
                log(Integer.valueOf(x));
            }
            public void println(long x) {
                log(x);
            }
            public void println(Object x) {
                log(x);
            }
            public void println(String x) {
                log(x);
            }
        };
        System.setOut(printStream);
        System.setErr(printStream);
    }

}

3,修改web.xml,增加一个监听,指向转化类的路径:

<listener>
    <listener-class>com.sinosoft.log4j.LogSystem</listener-class>
 </listener>

4,这样就配置完毕,但是还需要把tomcat自带的stdout.log关掉(本地需要用服务启动才会有这个日志生成):

双击bin/tomcat7w.exe-——>选logging----->将redirect stdout置为空(原来为auto)



  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用 Log4j 来获取 System.out.println() 打印的信息,你可以通过以下步骤进行操作: 1. 首先,确保你的项目已经引入了 Log4j 的相关依赖。你可以在 Maven 或 Gradle 的配置文件添加 Log4j 的依赖项,或者手动将 Log4j 的 JAR 文件添加到项目的类路径。 2. 创建一个 Log4j 的配置文件,比如 `log4j.properties` 或 `log4j.xml`,用于配置 Log4j日志输出方式和级别。在配置文件,你可以指定日志输出的目标(如控制台、文件等)、日志级别等。 3. 在你的 Java 代码,使用 Log4jLogger 对象来代替 System.out.println() 打印日志。你可以在需要打印日志的地方获取 Logger 对象,并使用其提供的方法打印不同级别的日志信息。 下面是一个示例代码: ```java import org.apache.log4j.Logger; public class MyClass { private static final Logger logger = Logger.getLogger(MyClass.class); public static void main(String[] args) { logger.debug("Debug message"); // 打印 Debug 级别的日志 logger.info("Info message"); // 打印 Info 级别的日志 logger.error("Error message"); // 打印 Error 级别的日志 } } ``` 在上述示例代码,我们通过 `Logger.getLogger(MyClass.class)` 获取了一个 Logger 对象,并使用其提供的方法打印不同级别的日志信息。你可以根据需要选择打印不同级别的日志信息。 需要注意的是,你需要根据实际情况修改 Log4j 的配置文件,将日志输出到控制台或其他目标,并设置相应的日志级别。具体的配置方式可以参考 Log4j 的文档或相关资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值