`

自定义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

 

}

 

}

 

分享到:
评论

相关推荐

    mep4j:数学表达式解析器4 Java-开源

    数学表达式解析器4 Java MEP4J是用于Java的高性能数学表达式字符串解析器(J2SE&gt; = 5)。 将其与同类库的性能进行比较,并让我知道您的经验。 该库管理5个运算符(+,-,/,%,*)以及以下功能:-“ abs”-“ cos”...

    example-spring-boot-embedded-felix:测试如何将Apache Felix嵌入到Spring Boot应用程序中

    将Spring默认日志记录配置为在资源中使用log4j2.xml 为Felix框架添加一种在内部环境中使用Spring引导属性的方法 费利克斯 创建FelixService作为Spring Service Component和ApplicationReadyEvent事件侦听器以对其...

    springboot-ng:springboot+angular -- 17年5月停更

    4.log4j 5.junit 6.token权限验证 7.session超时处理和httpsession监听器 8.bootstarp-Admin框架 9.记录登录者信息,存储在mongodb中.(使用到百度地图api中的IP精确定位) 已包含工具类: 1.ID生成器 2.日期处理 3....

    springboot参考指南

    使用YAML或JSON配置Log4j2 vi. 67. 数据访问 i. 67.1. 配置一个数据源 ii. 67.2. 配置两个数据源 iii. 67.3. 使用Spring Data仓库 iv. 67.4. 从Spring配置分离@Entity定义 v. 67.5. 配置JPA属性 vi. 67.6. 使用...

    互联网创意产品众筹平台

    问题一箩筐-关于打印日志log4j问题5 y: }- e: Z$ p6 X9 d0 A9 @ │ 7.问题一箩筐-生产环境模拟, y; v4 Z% p0 }& I+ X* B) t# j │ 8.问题一箩筐-相对路径和绝对路径 │ 9.问题一箩筐-自定义监听器,解决上下文路径...

    java项目之oa办公管理系统(java毕业设计)

     2、后台:SpringMvc、Spring、Hibernate(持久层框架)、JPA、MD5加密、Spring Boot、 log4J日志框架、jstl、jstl自定义分页标签等 3、项目管理工具:Maven 4、数据库:Mysql 5、服务器:Tomcat 项目开发涉及功能: ...

    mybatis学习笔记

    1.6.4 第三步:log4j.properties 6 1.6.5 第四步:SqlMapConfig.xml 6 1.6.6 第五步:po类 7 1.6.7 第六步:程序编写 8 1.6.8 Mybatis解决jdbc编程的问题 15 1.6.9 与hibernate不同 16 2 Dao开发方法 16 2.1 需求 16...

    MySQL 5.1参考手册

    5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL...

    ssh(structs,spring,hibernate)框架中的上传下载

    这是Hibernate3引入的新特性,对于包含重量级大数据的表字段,这种抽取方式提高了对大字段操作的灵活性,否则加载Tfile对象的结果集时如果总是返回fileContent,这种批量的数据抽取将可以引起数据库的"洪泛效应"。...

    MySQL 5.1官方简体中文参考手册

    5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL...

    MySQL 5.1中文手冊

    5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL...

    MySQL 5.1参考手册 (中文版)

    5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL...

    mysql官方中文参考手册

    5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL...

    MYSQL中文手册

    5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. ...

    MySQL 5.1参考手册中文版

    5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. ...

    MySQL5.1参考手册官方简体中文版

    5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL...

    软件病毒特征码定位软件multiCCL

    使进程或线程创建时处于挂起状态(类似于被调试器加载,因为 据网友反馈说部分杀毒软件的内存扫描对于OLLYDBG加载的程序 起作用,而对于MYCCL、multiCCL、CCL等的加载不起作用)。 dll的加载没改(因为目前还没...

    multiCCL_f

    因为现在杀毒软件针对特征码定位器设置了某些干扰,最终决定把文件定位和  内存定位做成两个独立的部分。 其实代码基本一样的,只为方便日后的维护和升级。 ----------------------------------- ......内存定位....

    mysql5.1中文手册

    用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10...

Global site tag (gtag.js) - Google Analytics