Log4j 2.0在开发中的高级使用详解—读取配置文件(六)

简介: <h3 class="t" style="margin:0px 0px 1px; padding:0px; list-style:none; font-weight:normal; font-size:14px; line-height:1.54; color:rgb(51,51,51); font-family:arial"> log4j中配置日志文件存放的位置不一定在src下面,即根

log4j中配置日志文件存放的位置不一定在src下面,即根目录下。这个时候我们需要解决如何加载配置文件的问题。在log4j1.x中解决的方法就比较多了。如:PropertyConfigurator.configure();和DOMConfigurator.configure ();这两种方法读取。而在log4j2.x当中,这两个类都已经不存在了。这个时候我们该如何去加载配置文件呢?

答案也很简单,就是log4j2.x的版本给我提供了ConfigurationSource和Configurator这两个类。我们可以使用它们进行手动的加载任意位置的配置文件信息。

我就主要介绍三种方法:log4j 2读取配置文件的三种方法。

log4j 2读取的配置文件可以分为三类:src下的配置文件、绝对路径的配置文件、相对路径的配置文件。我们一一给例子。直接看代码:

package com.herman.test;

import java.io.File;
import java.io.FileInputStream;
import java.net.URL;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.apache.logging.log4j.core.config.Configurator;

public class ConfigTest {
	
	private static Logger logger = LogManager.getLogger(ConfigTest.class);
	/**
	 * log4j 2读取配置文件
	 * log4j 2读取的配置文件可以分为三类:src下的配置文件、绝对路径的配置文件、相对路径的配置文件
	 */
	
	//第一类  加载src下的配置文件
	public static void test0(){
		//src下的配置文件会默认的被log4j的框架加载,我们就不显示的加载了
		//直接测试
		logger.info("我打印了.......");
		//输出内容
		//2014-09-01 15:49:30,229 INFO  [main] test.ConfigTest (ConfigTest.java:18) - 我打印了.......
	}
	
	//第二类  绝对路径的配置文件
	public static void test1(){
		//我们将log4j2.xml放在D盘下
		//这是需要手动的加载
		//绝对路径配置文件		
		ConfigurationSource source;
		try {
			//方法1  使用  public ConfigurationSource(InputStream stream) throws IOException 构造函数
			source = new ConfigurationSource(new FileInputStream("D:\\log4j2.xml"));
			
			//方法2 使用 public ConfigurationSource(InputStream stream, File file)构造函数
			File config=new File("D:\\log4j2.xml");
			source = new ConfigurationSource(new FileInputStream(config),config);
			
			//方法3 使用 public ConfigurationSource(InputStream stream, URL url) 构造函数
			String path="D:\\log4j2.xml";
			source = new ConfigurationSource(new FileInputStream(path),new File(path).toURL());
			
			//source.setFile(new File("D:\log4j2.xml"));		
			//source.setInputStream(new FileInputStream("D:\log4j2.xml"));		
			Configurator.initialize(null, source);				
			Logger logger = LogManager.getLogger(ConfigTest.class.getName()); 		
			logger.trace("trace...");		
			logger.debug("debug...");		
			logger.info("info...");		
			logger.warn("warn...");		
			logger.error("error...");		
			logger.fatal("fatal...");
			//一下是运行效果
			/*2014-09-01 16:03:07,331 DEBUG [main] test.ConfigTest (ConfigTest.java:42) - debug...
			2014-09-01 16:03:07,331 INFO  [main] test.ConfigTest (ConfigTest.java:43) - info...
			2014-09-01 16:03:07,331 WARN  [main] test.ConfigTest (ConfigTest.java:44) - warn...
			2014-09-01 16:03:07,331 ERROR [main] test.ConfigTest (ConfigTest.java:45) - error...
			2014-09-01 16:03:07,331 FATAL [main] test.ConfigTest (ConfigTest.java:46) - fatal...*/
		} catch (Exception e) {
			e.printStackTrace();
		}		
	}
	
	//第三类  相对路径的配置文件加载
	public static void test2(){
		//这里需要注意路径中不要出现中文和空格,如果存在中文,请使用url转码
		ConfigurationSource source;
		try {
			//方法1  使用getResource()
			String path="/com/herman/config/log4j2.xml";
			URL url=ConfigTest.class.getResource(path);
			source = new ConfigurationSource(new FileInputStream(new File(url.getPath())),url);
			Configurator.initialize(null, source);	
			
			//方法2 使用System.getProperty
			String config=System.getProperty("user.dir");
			source = new ConfigurationSource(new FileInputStream(config+"\\src\\com\\herman\\config\\log4j2.xml"));
			Configurator.initialize(null, source);
			
			//输出内容
			/*2014-09-01 16:32:19,746 DEBUG [main] test.ConfigTest (ConfigTest.java:53) - debug...
			2014-09-01 16:32:19,746 INFO  [main] test.ConfigTest (ConfigTest.java:54) - info...
			2014-09-01 16:32:19,746 WARN  [main] test.ConfigTest (ConfigTest.java:55) - warn...
			2014-09-01 16:32:19,746 ERROR [main] test.ConfigTest (ConfigTest.java:56) - error...
			2014-09-01 16:32:19,746 FATAL [main] test.ConfigTest (ConfigTest.java:57) - fatal...*/
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		//test0();
		//test1();
		test2();
	}
}

很简单吧!欢迎大家关注我的个人博客!!!!

如有不懂,疑问或者欠妥的地方,请加QQ群:135430763   进行反馈,共同学习!
目录
相关文章
|
15天前
|
存储 数据采集 JavaScript
深入理解数仓开发(一)数据技术篇之日志采集
深入理解数仓开发(一)数据技术篇之日志采集
|
1月前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
|
1月前
|
数据库
什么是计算机软件开发领域的 verbose 代码和日志
什么是计算机软件开发领域的 verbose 代码和日志
|
1月前
|
调度
kettle开发篇-写日志
kettle开发篇-写日志
146 0
|
9月前
|
Java
log4j.properties日志配置文件内容
log4j.properties日志配置文件内容
52 0
|
1月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
221 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
20天前
|
设计模式 Java 关系型数据库
Spring的配置文件,如何配置端口号,,properties,yml获取配置项等方法,外观模式及其优缺点,日志代表的信息
Spring的配置文件,如何配置端口号,,properties,yml获取配置项等方法,外观模式及其优缺点,日志代表的信息
|
6天前
|
开发框架 安全 Java
信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等
信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等
|
6天前
|
监控 Go
go语言并发实战——日志收集系统(十一)基于etcd来监视配置文件的变化
go语言并发实战——日志收集系统(十一)基于etcd来监视配置文件的变化
|
6天前
|
消息中间件 Kafka Go
go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件
go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件