Java多线程 独立日志

在Lab6中,我们同时执行多个Monkey线程,并需要为每一个Monkey生成独立的日志文件

但是在实验过程中虽然生成了对应的日志文件,但是文件的内容并不是独立关于一只猴子的,而是许多内容基本相同的文件

想要实现独立的日志,要进行如下操作:

在一个项目里,我使用Log4j生成日志,我不希望任务线程组各个线程都记录在同一个日志里,那样太乱了,而是单独生成日志记录。这样的话,需要针对每个线程创建Logger实例,实例名应对应线程名,而每个Logger实例的文件名应分别对应于实例名或者线程名。

自定义Appender

package threadlogger.appender;  
  
import java.io.File;  
import java.io.IOException;  
  
import org.apache.log4j.DailyRollingFileAppender;  
import org.apache.log4j.Layout;  
  
  
public class ThreadSeperateDailyRollingFileAppender extends  
        DailyRollingFileAppender  
{  
    public ThreadSeperateDailyRollingFileAppender() {}  
      
    public ThreadSeperateDailyRollingFileAppender(Layout layout, String datePattern) throws IOException  
    {  
        super(layout,  
                "log" + File.separator + Thread.currentThread().getName(),  
                datePattern);  
    }  
} 

封装获得线程独立日志的Logger实例的类:


import java.io.IOException;  
  
import org.apache.log4j.ConsoleAppender;  
import org.apache.log4j.Level;  
import org.apache.log4j.Logger;  
import org.apache.log4j.PatternLayout;  
  
import threadlogger.appender.ThreadSeperateDailyRollingFileAppender;  
  
  
public class ThreadLogger  
{  
    ThreadLogger() {};  
  
    public static Logger getLogger()  
    {  
        Logger logger = null;  
        // 创建一个Logger实例, 就以线程名命名  
        logger = Logger.getLogger(Thread.currentThread().getName());  
          
        PatternLayout layout = new PatternLayout("%-4r %-5p [%d{yyyy-MM-dd HH:mm:ss,SSS}] %l%t: %m%n");  
  
        // 控制台输出  
        ConsoleAppender concoleAppender = new ConsoleAppender(layout, "System.out");  
  
        // 文件输出  
        ThreadSeperateDailyRollingFileAppender R = null;  
        try  
        {  
            R = new ThreadSeperateDailyRollingFileAppender(layout, "'.'yyyy-MM-dd'.log'");  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
        // 参数配置, 因为没有找到仅靠配置文件的办法, 只好放在这里设  
        R.setAppend(false);  
        R.setImmediateFlush(true);  
        R.setThreshold(Level.WARN);  
  
        // 绑定到Logger  
        logger.setLevel(Level.DEBUG);  
        logger.addAppender(concoleAppender);  
        logger.addAppender(R);  
          
        return logger;  
    }  
  
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值