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`接口,...
- **配置 web.xml**:在应用的 `web.xml` 文件中添加以下配置,以便在启动时加载 Log4j: ```xml <listener-class>com.apache.jakarta.log4j.Log4jInit</listener-class> ``` 其中 `<init-param>` 用于指定...
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是Java日志记录框架的著名组件,它为开发者提供了强大的日志管理和分析功能。这个"Log4j2-2.11.1.zip"压缩包包含了该框架的2.11.1版本,这是一个稳定且广泛使用的版本。在本篇中,我们将深入探讨Log4j2的核心...
例如,`log4j2.xml`或`log4j2.json`文件可以放置在类路径中,Log4j2会自动加载并应用这些配置。 4. **性能优化**: 与log4j 1.x相比,Log4j2引入了异步日志记录,大大提升了性能。它利用Java的并发特性,将日志...
2. **自动加载配置**:可以通过`PropertyConfigurator`类自动加载`log4j.properties`文件: ```java PropertyConfigurator.configure("classpath:log4j.properties"); ``` 3. **在代码中使用**:Spring自动注入`...
Log4j2是Log4j的升级版,提供了更加灵活和强大的日志处理能力,包括异步日志、延迟加载、日志脱敏等功能。接下来,将详细介绍SLF4J和Log4j2的配置使用。 ### SLF4J与Log4j2的配合使用 在Spring Boot项目中,可以...
总结来说,配置Log4j在WebSphere V7上运行,需要解决的是WebSphere内置日志系统与Log4j之间的冲突,通过自定义`commons-logging.properties`文件以及调整WebSphere的应用程序类加载策略,可以有效地让Log4j在...
Log4j主要包括三个核心组件:Logger(日志器)、Appender(输出器)和Layout(布局)。Logger负责创建和管理日志记录,Appender决定日志信息输出到哪里,而Layout则控制日志信息的格式。 要实现按文件大小生成日志...
1. **Logger**:日志记录器,它是Log4j的核心组件,负责生成日志事件。每个类都可以拥有自己的logger,通常建议以类名为logger的名称,以便于跟踪和定位问题。 2. **Appender**:输出目的地,Log4j可以将日志事件...