通用Log4J配置文件

#### Use two appenders, one to log to console, another to log to a file
log4j.rootCategory=DEBUG, stdout, debugout, R, R2
#log4j.rootCategory=DEBUG, debugout, R, R2


log4j.logger.org=INFO



#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5.5p:%d [ %c - %L ] - %m%n


#### Second appender writes to a file
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=./LOG/INFO.log
log4j.appender.R.Append=true
log4j.appender.R.Threshold=INFO
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%5p:%d - %m%n


#### Third appender writes to a file
log4j.appender.R2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R2.File=./LOG/ERROR.log
log4j.appender.R2.Append=true
log4j.appender.R2.Threshold=WARN
log4j.appender.R2.DatePattern='.'yyyy-MM-dd
log4j.appender.R2.layout=org.apache.log4j.PatternLayout
log4j.appender.R2.layout.ConversionPattern=%5p:%d - %m%n


log4j.appender.debugout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debugout.File=./LOG/DEBUG.log
log4j.appender.debugout.Append=true
log4j.appender.debugout.Threshold=DEBUG
log4j.appender.debugout.DatePattern='.'yyyy-MM-dd
log4j.appender.debugout.layout=org.apache.log4j.PatternLayout
log4j.appender.debugout.layout.ConversionPattern=%5p:%d - %m%n

解析文件

package examples;
 
import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Properties;

import org.apache.log4j.Logger;


/**
 * 动态读取配置文件类
 * 
 * @author liubing
 */
public class ConfigReadUtil {
	private static Logger log = Logger.getLogger(ConfigReadUtil.class);

	/**
	 * 属性文件全名
	 */
	private static final String PFILE = "config.properties";

	/**
	 * 配置文件路径
	 */
	//private URI uri = null;

	/**
	 * 属性文件所对应的属性对象变量
	 */
	private long m_lastModifiedTime = 0;

	/**
	 * 对应于属性文件的文件对象变量
	 */
	private File m_file = null;

	/**
	 * 属性文件所对应的属性对象变量
	 */
	private Properties m_props = null;

	/**
	 * 唯一实例
	 */
	private static ConfigReadUtil m_instance = new ConfigReadUtil();

	/**
	 * 私有构造函数
	 * 
	 * @throws URISyntaxException
	 */
	private ConfigReadUtil() {
		try {
			m_lastModifiedTime = getFile().lastModified();
			if (m_lastModifiedTime == 0) {
				log.info(PFILE + "file does not exist!");
			}
			m_props = new Properties();
			m_props.load(new FileInputStream(getFile()));

		} catch (URISyntaxException e) {
			System.err.println("文件路径不正确");
			e.printStackTrace();
		} catch (Exception e) {
			System.err.println("文件读取异常");
			e.printStackTrace();
		}
	}

	/**
	 * 查找ClassPath路径获取文件
	 * 
	 * @return File对象
	 * @throws URISyntaxException
	 */

	private File getFile() throws URISyntaxException {
		URI fileUri = this.getClass().getClassLoader().getResource(PFILE)
				.toURI();
		m_file = new File(fileUri);
		return m_file;
	}

	/**
	 * 静态工厂方法
	 * 
	 * @return 返回ConfigurationRead的单一实例
	 */
	public synchronized static ConfigReadUtil getInstance() {
		return m_instance;
	}

	/**
	 * 读取一特定的属性项
	 */
	public String getConfigItem(String name, String defaultVal) {
		long newTime = m_file.lastModified();
		// 检查属性文件是否被修改
		if (newTime == 0) {
			// 属性文件不存在
			if (m_lastModifiedTime == 0) {
				System.err.println(PFILE + " file does not exist!");
			} else {
				System.err.println(PFILE + " file was deleted!!");
			}
			return defaultVal;
		} else if (newTime > m_lastModifiedTime) {
			m_props.clear();
			try {
				m_props.load(new FileInputStream(getFile()));
			} catch (Exception e) {
				System.err.println("文件重新读取异常");
				e.printStackTrace();
			}
		}
		m_lastModifiedTime = newTime;
		String val = m_props.getProperty(name);
		if (val == null) {
			return defaultVal;
		} else {
			return val;
		}
	}

	/**
	 * 读取一特定的属性项
	 * 
	 * @param name
	 *            属性项的项名
	 * @return 属性项的值(如此项存在), 空(如此项不存在)
	 */
	public String getConfigItem(String name) {
		return getConfigItem(name, "");
	}

}

-----------------------------------程序员 闫帆原创---------------------------------------

转载请注明原创人信息 程序员 闫帆yanfanvip



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值