动态生成Log

我们在项目中可能需要一些日志文件。是动态生成的(配置文件是静态的,打印全局的log)。比如我们按照类别来收集用户输入的内容。一个类别一天一个文件。 这时候就可以用代码调用Log4j来生成

 

package com.bj58.zhaoren.sou.utils;

import java.io.IOException;
import java.util.Map;

import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import java.util.concurrent.ConcurrentHashMap;

import com.bj58.spat.scf.server.contract.context.Global;

/**
 * 这个日志收集所有的query
 * @date 2015年12月29日  
 * @author shencl
 */
public class QueryLog {
	private static String skill_path = Global.getSingleton().getRootPath() + "logs/query/skill.log";
	private static String demand_path = Global.getSingleton().getRootPath() + "logs/query/demand.log";
	private static Map<String, Logger> map = new ConcurrentHashMap<String, Logger>();
	
	private static Logger skillLog = getInstance(skill_path);
	private static Logger demandLog = getInstance(demand_path);
	
	public synchronized static Logger getInstance(String logpath) {

		if (map.get(logpath) != null) {
			return map.get(logpath);
		}
		
		try {

			Logger log = Logger.getLogger(logpath);
			log.setLevel(Level.INFO);
			//Layout layout = new PatternLayout("%d{yyy-MM-dd HH:mm:ss} - %m%n");
			Layout layout = new PatternLayout("%m%n");
			DailyRollingFileAppender fileappender = new DailyRollingFileAppender(layout, logpath, "'.'yyyy-MM-dd");
			fileappender.setName(logpath);
			log.addAppender(fileappender);
			
			map.put(logpath, log);
		} catch (IOException e) {
			e.printStackTrace();
		}

		return map.get(logpath);
	}

	/**
	 * 收集skill所有的query
	 */
	public static void addSkillLog(String query) {
		skillLog.info(query);
	}

	/**
	 * 收集demand所有的query
	 */
	public static void addDemandLog(String query) {
		demandLog.info(query);
	}
}

 

你可能感兴趣的:(动态生成Log)