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
}
}
相关推荐
4. **自定义日志过滤器**:Log4j的过滤器功能允许我们根据条件决定哪些日志应该被记录。例如,我们可以创建一个过滤器,只让日志级别高于WARN的消息通过。 5. **自定义日志事件处理器**:通过实现`Filter`接口,...
3. 在Tomcat的`web.xml`配置文件中,可能需要配置一个`ContextLoaderListener`,以确保在应用程序启动时加载Log4j配置。 压缩包中的"**lib**"目录可能包含Log4j的必要依赖库,比如`log4j.jar`,这是运行Log4j的日志...
- 接着,使用`<listener>`标签启动Log4j配置加载器: ```xml <listener-class>org.springframework.web.util.Log4jConfigListener ``` - 或者,如果使用的是Servlet 3.0及以上版本,可以使用以下配置: ``...
总结起来,Log4j配置文件的解析和加载是通过定义根日志器、Appender、Layout以及它们各自的属性来实现的。理解这些配置项的含义和用法,可以帮助我们更好地管理和定制日志输出,提高日志的可读性和分析效率。在实际...
- **Separate ClassLoaders**:使用不同的类加载器隔离日志配置。 - **Separate Contexts**:每个配置使用独立的 LoggerContext。 #### 15. Extending Log4j Log4j2 支持通过扩展机制增加新功能: - **Custom ...
Log4j是一个广泛使用的Java日志框架,它提供了强大的日志处理功能,包括日志级别控制、自定义日志格式、多路复用等。然而,由于Android系统对第三方库的限制,直接在Android工程中使用Log4j需要一些额外的步骤。本文...
本文将深入探讨Log4j加载日志所用到的包及其在程序中的作用。 一、Log4j基础 Log4j提供了灵活的日志记录功能,允许开发者自定义日志级别(如DEBUG, INFO, WARN, ERROR, FATAL)和输出格式。它包括三个主要组件:...
Log4j 2.11.0引入了自动重加载配置的特性,使得在运行时修改配置文件无需重启应用即可生效。 4. **日志器与日志事件** 日志器是用户与Log4j交互的主要接口,通过Logger接口创建并管理日志事件。日志事件则封装了...
如果需要自定义配置文件的路径,可以使用DOMConfigurator.configure()来加载log4j.xml文件,或者使用PropertyConfigurator.configure()来加载log4j.properties文件。不过,需要注意的是,目前Log4j 1.x版本的开发者...
在上面的代码中,首先通过`PropertyConfigurator.configure()`加载了Log4j的配置文件,然后通过`Logger.getLogger()`创建了一个日志记录器,最后使用不同级别的方法记录日志。 **5. 配置文件详解** `log4j....
要在Java工程中使用Log4j,首先需要下载Log4j的jar包,例如log4j-1.2.16.jar,然后将其加载到工程中去。在src源程序包中添加一个log4j.properties文件,用于配置Log4j的日志记录规则。以下是一个简单的log4j....
例如,`log4j2.xml`或`log4j2.json`文件可以放置在类路径中,Log4j2会自动加载并应用这些配置。 4. **性能优化**: 与log4j 1.x相比,Log4j2引入了异步日志记录,大大提升了性能。它利用Java的并发特性,将日志...
2. **自动加载配置**:可以通过`PropertyConfigurator`类自动加载`log4j.properties`文件: ```java PropertyConfigurator.configure("classpath:log4j.properties"); ``` 3. **在代码中使用**:Spring自动注入`...
Log4j主要包括三个核心组件:Logger(日志器)、Appender(输出器)和Layout(布局)。Logger负责创建和管理日志记录,Appender决定日志信息输出到哪里,而Layout则控制日志信息的格式。 要实现按文件大小生成日志...
Log4j2是Log4j的升级版,提供了更加灵活和强大的日志处理能力,包括异步日志、延迟加载、日志脱敏等功能。接下来,将详细介绍SLF4J和Log4j2的配置使用。 ### SLF4J与Log4j2的配合使用 在Spring Boot项目中,可以...
总结来说,配置Log4j在WebSphere V7上运行,需要解决的是WebSphere内置日志系统与Log4j之间的冲突,通过自定义`commons-logging.properties`文件以及调整WebSphere的应用程序类加载策略,可以有效地让Log4j在...
1. **高度灵活**:Log4j 允许用户自定义日志级别、输出格式和输出目标。 2. **易于配置**:Log4j 支持多种配置方式,包括 XML 和 properties 文件等。 3. **性能高效**:即使不使用日志功能,Log4j 对应用程序的影响...
1. **Logger**:日志记录器,它是Log4j的核心组件,负责生成日志事件。每个类都可以拥有自己的logger,通常建议以类名为logger的名称,以便于跟踪和定位问题。 2. **Appender**:输出目的地,Log4j可以将日志事件...
- 为了提高性能,Log4j允许延迟初始化,即只有在第一个日志请求时才加载配置。 - 使用`%throwable`转换词可以包含堆栈跟踪,这对于调试很有帮助,但会增加日志大小,应谨慎使用。 6. **使用Log4jTest** - `Log4...