[置顶] 通用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