ehanmqi@CN00202245 /C/Ericsson/maworkspace_15/Hello/lib
$ pwd
/C/Ericsson/maworkspace_15/Hello/lib
ehanmqi@CN00202245 /C/Ericsson/maworkspace_15/Hello/lib
$ ls -l
total 265
-rw-r--r-- 1 ehanmqi Administ 489884 Jun 16 15:27 log4j-1.2.17.jar
-rw-r--r-- 1 ehanmqi Administ 41071 Jun 16 15:24 slf4j-api-1.7.21.jar
-rw-r--r-- 1 ehanmqi Administ 9988 Jun 16 15:24 slf4j-log4j12-1.7.21.jar
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import org.slf4j.Logger;
public class TestClassLoader2 {
private static Logger logger;
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(TestClassLoader2.class.getClassLoader());
//URL url = new File("C:/Users/ehanmqi/.m2/repository/org/slf4j/slf4j-log4j12/1.7.5/slf4j-log4j12-1.7.5.jar").toURI().toURL();
File file = new File("C:/Ericsson/maworkspace_15/Hello/lib");
URLClassLoader loader = loadJar(file.listFiles());
Class c = loader.loadClass("org.slf4j.LoggerFactory");
//c.getMethod("getLogger", Class.class).invoke(null, TestClassLoader2.class);
logger = (Logger) c.getMethod("getLogger", Class.class).invoke(null, TestClassLoader2.class);
logger.debug("sdfsf");
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static URLClassLoader loadJar(File[] fileArray) throws Exception{
URL[] urlarray = new URL[fileArray.length];
int i=0;
for(File f : fileArray){
URL url = f.toURI().toURL();
urlarray[i]=url;
i++;
}
URLClassLoader loader = new URLClassLoader(urlarray, TestClassLoader2.class.getClassLoader());
//loader.loadClass("org.apache.log4j.net.JMSSink");
for(File f : fileArray){
JarFile jarfile = new JarFile(f);
Enumeration<JarEntry> jarEntry = jarfile.entries();
while(jarEntry.hasMoreElements()){
JarEntry je = jarEntry.nextElement();
if(je.getName().endsWith(".class")){
//System.out.println(je.getName());
String classpath = je.getName().replaceAll("/", ".").replaceAll(".class", "");
if(!classpath.equals("org.apache.log4j.net.JMSSink")){
continue;
}else if(!classpath.equals("javax/mail/Authenticator".replace("/", "."))){
continue;
}
loader.loadClass(classpath);
}
}
}
return loader;
}
}
相关推荐
### Log4j配置与加载方法详解 Log4j是一款由Apache出品的日志记录工具,它提供了灵活的日志级别控制和多样化的日志输出方式,广泛应用于Java应用的开发中。本文将深入解析log4j的配置与加载机制,帮助开发者更好地...
Log4j想要生效,我们需要在web.xml中进行配置,以告诉工程去哪加载log4j的配置文件和定义一个扫描器。相比之下,Log4j2就比较简单,我们只需要把log4j2.xml文件放到工程的resource目录下就行了。 Log调用 Log4j和...
在 SSM 整合项目中,需要在 web.xml 文件中指定 Log4j 配置文件的位置,以便 Spring 可以加载 Log4j 配置文件。下面是一个基本的 web.xml 配置: ``` <listener-class>org.springframework.web.util.Log4...
3. 在Tomcat的`web.xml`配置文件中,可能需要配置一个`ContextLoaderListener`,以确保在应用程序启动时加载Log4j配置。 压缩包中的"**lib**"目录可能包含Log4j的必要依赖库,比如`log4j.jar`,这是运行Log4j的日志...
- **配置 web.xml**:在应用的 `web.xml` 文件中添加以下配置,以便在启动时加载 Log4j: ```xml <listener-class>com.apache.jakarta.log4j.Log4jInit</listener-class> ``` 其中 `<init-param>` 用于指定...
如果需要自定义配置文件的路径,可以使用DOMConfigurator.configure()来加载log4j.xml文件,或者使用PropertyConfigurator.configure()来加载log4j.properties文件。不过,需要注意的是,目前Log4j 1.x版本的开发者...
- 接着,使用`<listener>`标签启动Log4j配置加载器: ```xml <listener-class>org.springframework.web.util.Log4jConfigListener ``` - 或者,如果使用的是Servlet 3.0及以上版本,可以使用以下配置: ``...
在Web应用中,如使用的是Servlet环境,可以通过在`web.xml`中配置`ContextLoaderListener`来加载Log4j配置,同时,我们还可以创建一个Servlet,当接收到特定请求时,更新Log4j配置。 ```xml <!-- web.xml 示例 --> ...
3. **初始化Log4j**:在Application类的onCreate方法中初始化Log4j,确保在使用日志之前完成配置加载: ```java @Override public void onCreate() { super.onCreate(); Log4jConfig.init(this); } ``` 4. *...
1. **配置文件**:Log4j的配置文件通常是`log4j.properties`或`log4j.xml`,它定义了日志的级别(如DEBUG、INFO、WARN、ERROR、FATAL)、输出目的地(控制台、文件、数据库等)以及布局格式。 2. **日志类**:在...
总结起来,Log4j配置文件的解析和加载是通过定义根日志器、Appender、Layout以及它们各自的属性来实现的。理解这些配置项的含义和用法,可以帮助我们更好地管理和定制日志输出,提高日志的可读性和分析效率。在实际...
2. **删除潜在危险的类加载器**:2.15.0-rc2移除了可能导致恶意代码执行的类加载器,从而减少了攻击面。 3. **增强日志格式字符串验证**:加强了对日志格式字符串的检查,防止恶意输入绕过之前的防护措施。 4. **...
- **Separate ClassLoaders**:使用不同的类加载器隔离日志配置。 - **Separate Contexts**:每个配置使用独立的 LoggerContext。 #### 15. Extending Log4j Log4j2 支持通过扩展机制增加新功能: - **Custom ...
在上面的代码中,首先通过`PropertyConfigurator.configure()`加载了Log4j的配置文件,然后通过`Logger.getLogger()`创建了一个日志记录器,最后使用不同级别的方法记录日志。 **5. 配置文件详解** `log4j....
Log4j 2.11.0引入了自动重加载配置的特性,使得在运行时修改配置文件无需重启应用即可生效。 4. **日志器与日志事件** 日志器是用户与Log4j交互的主要接口,通过Logger接口创建并管理日志事件。日志事件则封装了...
Log4j 有三个主要的组件:Loggers(记录器),Appenders(输出源)和 Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在...
Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。Log4j 框架是用 Java 语言编写的标准日志记录框架。通过配置,可以创建出Log4J的...
Log4j2是Java日志记录框架的著名组件,它为开发者提供了强大的日志管理和分析功能。这个"Log4j2-2.11.1.zip"压缩包包含了该框架的2.11.1版本,这是一个稳定且广泛使用的版本。在本篇中,我们将深入探讨Log4j2的核心...
要在Java工程中使用Log4j,首先需要下载Log4j的jar包,例如log4j-1.2.16.jar,然后将其加载到工程中去。在src源程序包中添加一个log4j.properties文件,用于配置Log4j的日志记录规则。以下是一个简单的log4j....