`

自定义log4j 加载器

 
阅读更多

package com.ericsson.ma.jbl.midwsv.midwsv.internal.action;

 

import java.io.ByteArrayOutputStream;

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 javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

 

import org.w3c.dom.Document;

 

public class CustomLogger {

 

static CustomLogger logger;

Object logger_object;

 

public static  CustomLogger getLogger(Class clazz){

File file = new File("/var/sog/logs/pm/log4j/");

if(file.exists()){

File[] files = file.listFiles();

if(files!=null && files.length>0){

try {

URLClassLoader loader = loadJar(files,clazz);

Class c = loader.loadClass("org.apache.log4j.Logger");

Object logger_object = c.getMethod("getLogger", Class.class).invoke(null, clazz);

Class c1 = loader.loadClass("org.apache.log4j.xml.DOMConfigurator");

File log4j_xml = new File("/var/sog/logs/pm/log4j/log4j.xml");

 

if(log4j_xml.exists()){

c1.getMethod("configure", String.class).invoke(null, "/var/sog/logs/pm/log4j/log4j.xml");

}

 

logger = new CustomLogger();

logger.logger_object = logger_object;

return logger;

} catch (Exception e) {

e.printStackTrace();

}

}

}

return new CustomLogger();

 

}

 

public void debug(String message){

if(logger_object!=null){

try{

logger_object.getClass().getMethod("debug", Object.class).invoke(logger_object, message);

} catch (Exception e) {

e.printStackTrace();

}

 

}           

}

 

public void debug(Document doc){

if(logger_object!=null){

try{

String xml = tranferFromDom2String(doc);

logger_object.getClass().getMethod("debug", Object.class).invoke(logger_object, xml);

} catch (Exception e) {

e.printStackTrace();

}

 

}           

}

 

 

private String tranferFromDom2String(Document doc) throws Exception{

TransformerFactory transformerFactory = TransformerFactory.newInstance();

Transformer transformer = transformerFactory.newTransformer();

 

ByteArrayOutputStream  bos  =  new  ByteArrayOutputStream();

StreamResult result = new StreamResult(bos);

transformer.transform(new DOMSource(doc), result);

String xml = bos.toString();

bos.close();

 

return xml;

}

public void info(Object message){

if(logger_object!=null){

try{

logger_object.getClass().getMethod("info", Object.class).invoke(logger_object, message);

} catch (Exception e) {

e.printStackTrace();

}

 

}

}

 

public void warn(Object message){

if(logger_object!=null){

try{

logger_object.getClass().getMethod("warn", Object.class).invoke(logger_object, message);

} catch (Exception e) {

e.printStackTrace();

}

 

}

 

}

 

public void error(Object message){

if(logger_object!=null){

try{

logger_object.getClass().getMethod("error", Object.class).invoke(logger_object, message);

} catch (Exception e) {

e.printStackTrace();

}

 

}

}

 

public static URLClassLoader loadJar(File[] fileArray,Class clazz) 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, clazz.getClassLoader());

//loader.loadClass("org.apache.log4j.net.JMSSink");

for(File f : fileArray){

if(f.getName().equals(".jar")){

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);

 

}

}

}else{

//loader.getResource(name)

}

 

 

}

 

return loader;

 

}

 

/**

* @param args

*/

 

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

 

}

 

}

 

分享到:
评论

相关推荐

    log4j自定义

    4. **自定义日志过滤器**:Log4j的过滤器功能允许我们根据条件决定哪些日志应该被记录。例如,我们可以创建一个过滤器,只让日志级别高于WARN的消息通过。 5. **自定义日志事件处理器**:通过实现`Filter`接口,...

    log4j详细配置说明

    - **配置 web.xml**:在应用的 `web.xml` 文件中添加以下配置,以便在启动时加载 Log4j: ```xml &lt;listener-class&gt;com.apache.jakarta.log4j.Log4jInit&lt;/listener-class&gt; ``` 其中 `&lt;init-param&gt;` 用于指定...

    tomcat8更换log4j记录日志

    3. 在Tomcat的`web.xml`配置文件中,可能需要配置一个`ContextLoaderListener`,以确保在应用程序启动时加载Log4j配置。 压缩包中的"**lib**"目录可能包含Log4j的必要依赖库,比如`log4j.jar`,这是运行Log4j的日志...

    log4j与web.xml的配置

    - 接着,使用`&lt;listener&gt;`标签启动Log4j配置加载器: ```xml &lt;listener-class&gt;org.springframework.web.util.Log4jConfigListener ``` - 或者,如果使用的是Servlet 3.0及以上版本,可以使用以下配置: ``...

    Log4j配置文件解析以及加载自己的配置文件.doc

    总结起来,Log4j配置文件的解析和加载是通过定义根日志器、Appender、Layout以及它们各自的属性来实现的。理解这些配置项的含义和用法,可以帮助我们更好地管理和定制日志输出,提高日志的可读性和分析效率。在实际...

    log4j2用户指南

    - **Separate ClassLoaders**:使用不同的类加载器隔离日志配置。 - **Separate Contexts**:每个配置使用独立的 LoggerContext。 #### 15. Extending Log4j Log4j2 支持通过扩展机制增加新功能: - **Custom ...

    示范如何在android工程中使用log4j记录日志

    Log4j是一个广泛使用的Java日志框架,它提供了强大的日志处理功能,包括日志级别控制、自定义日志格式、多路复用等。然而,由于Android系统对第三方库的限制,直接在Android工程中使用Log4j需要一些额外的步骤。本文...

    log4j 加载日志所用到的包

    本文将深入探讨Log4j加载日志所用到的包及其在程序中的作用。 一、Log4j基础 Log4j提供了灵活的日志记录功能,允许开发者自定义日志级别(如DEBUG, INFO, WARN, ERROR, FATAL)和输出格式。它包括三个主要组件:...

    log4j 源码包 日志包 2.11.0

    Log4j 2.11.0引入了自动重加载配置的特性,使得在运行时修改配置文件无需重启应用即可生效。 4. **日志器与日志事件** 日志器是用户与Log4j交互的主要接口,通过Logger接口创建并管理日志事件。日志事件则封装了...

    log4j 介绍

    如果需要自定义配置文件的路径,可以使用DOMConfigurator.configure()来加载log4j.xml文件,或者使用PropertyConfigurator.configure()来加载log4j.properties文件。不过,需要注意的是,目前Log4j 1.x版本的开发者...

    log4j案例代码

    在上面的代码中,首先通过`PropertyConfigurator.configure()`加载了Log4j的配置文件,然后通过`Logger.getLogger()`创建了一个日志记录器,最后使用不同级别的方法记录日志。 **5. 配置文件详解** `log4j....

    如何在Java工程中使用Log4j

    要在Java工程中使用Log4j,首先需要下载Log4j的jar包,例如log4j-1.2.16.jar,然后将其加载到工程中去。在src源程序包中添加一个log4j.properties文件,用于配置Log4j的日志记录规则。以下是一个简单的log4j....

    log4j2 -2.11.1.zip

    Log4j2是Java日志记录框架的著名组件,它为开发者提供了强大的日志管理和分析功能。这个"Log4j2-2.11.1.zip"压缩包包含了该框架的2.11.1版本,这是一个稳定且广泛使用的版本。在本篇中,我们将深入探讨Log4j2的核心...

    log4j2必需jar包

    例如,`log4j2.xml`或`log4j2.json`文件可以放置在类路径中,Log4j2会自动加载并应用这些配置。 4. **性能优化**: 与log4j 1.x相比,Log4j2引入了异步日志记录,大大提升了性能。它利用Java的并发特性,将日志...

    log4j与spring的详细配置。

    2. **自动加载配置**:可以通过`PropertyConfigurator`类自动加载`log4j.properties`文件: ```java PropertyConfigurator.configure("classpath:log4j.properties"); ``` 3. **在代码中使用**:Spring自动注入`...

    slf4j+log4j2配置使用

    Log4j2是Log4j的升级版,提供了更加灵活和强大的日志处理能力,包括异步日志、延迟加载、日志脱敏等功能。接下来,将详细介绍SLF4J和Log4j2的配置使用。 ### SLF4J与Log4j2的配合使用 在Spring Boot项目中,可以...

    Log4j WebSphere V7 配置说明

    总结来说,配置Log4j在WebSphere V7上运行,需要解决的是WebSphere内置日志系统与Log4j之间的冲突,通过自定义`commons-logging.properties`文件以及调整WebSphere的应用程序类加载策略,可以有效地让Log4j在...

    tomcat下用Log4j 按文件大小,生成catalina.out日志文件

    Log4j主要包括三个核心组件:Logger(日志器)、Appender(输出器)和Layout(布局)。Logger负责创建和管理日志记录,Appender决定日志信息输出到哪里,而Layout则控制日志信息的格式。 要实现按文件大小生成日志...

    log4j 1.2.15

    1. **Logger**:日志记录器,它是Log4j的核心组件,负责生成日志事件。每个类都可以拥有自己的logger,通常建议以类名为logger的名称,以便于跟踪和定位问题。 2. **Appender**:输出目的地,Log4j可以将日志事件...

Global site tag (gtag.js) - Google Analytics