我的日志模型

package com.zzq.logging;

/**
 * 公共日志模型接口
 * @author zzq
 *
 */
public interface Log {

	public void warn(String msg);
	
	public void error(String msg);
	
	public void error(String msg, Throwable t);
	
	public void debug(String msg);
	
	public void info(String msg);
	
	public boolean isDebugEnabled();
}


package com.zzq.logging;

import java.lang.reflect.Constructor;

public class LogFactory {

	private static Constructor currentLogConstructor;
	
	static {
		registerLog("org.apache.commons.logging.LogFactory", "com.zzq.logging.jakarta.JakartaCommonsLoggingImpl");
		registerLog("org.apache.log4j.Logger", "com.zzq.logging.log4j.Log4jImpl");
		registerLog("java.util.logging.Logger", "com.zzq.logging.jdk14.JDK14LoggerImpl");
		registerLog("java.lang.Object", "com.zzq.logging.mylog.MyLogImpl");
	}
	
	protected static void registerLog(String interfaceClass, String implClass) {
		if(null == currentLogConstructor) {
			try {
				Class.forName(interfaceClass);
				currentLogConstructor = Class.forName(implClass).getConstructor(new Class[] {Class.class});
			} catch (Throwable e) {
			}
		}
	}
	
	public static Log getLog(Class clazz) {
		try {
			return (Log)currentLogConstructor.newInstance(new Object[] {clazz});
		} catch (Throwable e) {
			throw new RuntimeException("创建Log实例时失败!", e);
		} 
	}
}


package com.zzq.logging.jakarta;

import org.apache.commons.logging.LogFactory;

import com.zzq.logging.Log;

/**
 * Commons-Logging实现
 * @author zzq
 *
 */
public class JakartaCommonsLoggingImpl implements Log {

	private org.apache.commons.logging.Log log;
	
	public JakartaCommonsLoggingImpl(Class clazz) {
		log = LogFactory.getLog(clazz);
	}
	
	public void debug(String msg) {
		log.debug(msg);
	}

	public void error(String msg) {
		log.error(msg);
	}

	public void error(String msg, Throwable t) {
		log.error(msg, t);
	}

	public void info(String msg) {
		log.info(msg);
	}

	public boolean isDebugEnabled() {
		return log.isDebugEnabled();
	}

	public void warn(String msg) {
		log.warn(msg);
	}

}


import java.util.logging.Level;
import java.util.logging.Logger;

import com.zzq.logging.Log;

/**
 * JDK1.4 Logger实现
 * @author zzq
 *
 */
public class JDK14LoggerImpl implements Log {

	private Logger log;
	
	public JDK14LoggerImpl(Class clazz) {
		log = Logger.getLogger(clazz.getName());
	}
	
	public void debug(String msg) {
		log.log(Level.FINE, msg);
	}

	public void error(String msg) {
		log.log(Level.SEVERE, msg);
	}

	public void error(String msg, Throwable t) {
		log.log(Level.SEVERE, msg, t);
	}

	public void info(String msg) {
		log.log(Level.INFO, msg);
	}

	public boolean isDebugEnabled() {
		return log.isLoggable(Level.FINE);
	}

	public void warn(String msg) {
		log.log(Level.WARNING, msg);
	}

}


import org.apache.log4j.Logger;

import com.zzq.logging.Log;

/**
 * Log4j实现
 * @author zzq
 *
 */
public class Log4jImpl implements Log {

	private Logger log;
	
	public Log4jImpl(Class clazz) {
		log = Logger.getLogger(clazz);
	}
	
	public void debug(String msg) {
		log.debug(msg);
	}

	public void error(String msg) {
		log.error(msg);
	}

	public void error(String msg, Throwable t) {
		log.error(msg, t);
	}

	public void info(String msg) {
		log.info(msg);
	}

	public boolean isDebugEnabled() {
		return log.isDebugEnabled();
	}

	public void warn(String msg) {
		log.warn(msg);
	}

}


package com.zzq.logging.mylog;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.zzq.logging.Log;

/**
 * 没有Commons-logger、log4j并且JDK版本在1.4一下会使用此类
 * @author zzq
 *
 */
public class MyLogImpl implements Log {

	private Class clazz;
	
	private SimpleDateFormat sdf;
	
	public MyLogImpl(Class clazz) {
		this.clazz = clazz;
		sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	}
	
	public void debug(String msg) {
		System.out.println("Debug=[" + sdf.format(new Date()) + "]" + msg + " : " + clazz.getName());
	}

	public void error(String msg) {
		System.out.println("Error=[" + sdf.format(new Date()) + "]" + msg + " : " + clazz.getName());
	}

	public void error(String msg, Throwable t) {
		System.out.println("Error=[" + sdf.format(new Date()) + "]" + msg + " : " + clazz.getName());
		t.printStackTrace();
	}

	public void info(String msg) {
		System.out.println("Info=[" + sdf.format(new Date()) + "]" + msg + " : " + clazz.getName());
	}

	public boolean isDebugEnabled() {
		return false;
	}

	public void warn(String msg) {
		System.out.println("Warn=[" + sdf.format(new Date()) + "]" + msg + " : " + clazz.getName());
	}

}

你可能感兴趣的:(java,apache,jdk,log4j)