java中程序动态配置log4j日志

上一篇讲了如何配置log4j,但是都是固定的输出方式,如果我们想要动态的改变输入方式该怎么办呢?

比如我们有一个网络游戏在测试阶段,而这个游戏中玩家是以房间的形式组合在一起,这时我们如果想要测试房间内的逻辑是否正常,输出log的话都会存放在同一个日志文件内,如果遇到bug想要找起来非常困难,所以我们需要对每一个房间生成一个独立的log文件来进行保存。

代码:

    public static Logger getLoggerByName(String name,String type) {  
        // 创建logger,如果已存在则返回现有的
        Logger logger = Logger.getLogger(name);  
        // 清空Appender。
        logger.removeAllAppenders();  
        // log级别。  
        logger.setLevel(Level.DEBUG);  
        
        // 生成新的Appender  
        FileAppender appender = new RollingFileAppender();  
        PatternLayout layout = new PatternLayout();  
        // log的输出形式  
		//        %c - the category 类
		//        %d - the date 日期
		//        Date format: The date format character may be followed by a date format specifier enclosed between braces. For example, %d{%H:%M:%S,%l} or %d{%d %m %Y %H:%M:%S,%l}. If no date format specifier is given then the following format is used: "Wed Jan 02 02:03:55 1980". The date format specifier admits the same syntax as the ANSI C function strftime, with 1 addition. The addition is the specifier %l for milliseconds, padded with zeros to make 3 digits.
		//        %m - the message 消息
		//        %n - the platform specific line separator 换行
		//        %p - the priority 优先级
		//        %r - milliseconds since this layout was created. 从创建到现在的毫秒数
		//        %R - seconds since Jan 1, 1970 时间戳
		//        %u - clock ticks since process start 进程开始到现在的时间
		//        %x - the NDC
        String conversionPattern = "%m%n";  
        
        layout.setConversionPattern(conversionPattern);  
        appender.setLayout(layout);  
        // log输出路径  

        appender.setFile( "./log/" + type + "/" + name + ".log");  
        // log的文字码  
        appender.setEncoding("UTF-8");  
        // true:在已存在log文件后面追加 false:新log覆盖以前的log  
        appender.setAppend(true);  
        // 适用当前配置  
        appender.activateOptions();  
        // 将新的Appender加到Logger中  
        logger.addAppender(appender);  
        return logger;  
    } 

该方法2个参数:name 为文件名,type为log下的文件夹名。

测试一下:

	 public static void main( String[] args )
	 {
		 Logger test1 = getLoggerByName("test1", "room");
		 test1.info("test1 msg1");
		 test1.info("test1 msg2");
		 test1.info("test1 msg3");

		 Logger test2 = getLoggerByName("test2", "room");
		 test2.info("test2 msg1");
		 test2.info("test2 msg2");
		 test2.info("test2 msg3");
	 }
运行程序后,我们可以在控制台看到输出:


并且可以在log文件夹中看到日志文件:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值