eclips RCP 桌面系统加载log4j配置文件非常慢

richard14174 2016-08-12 05:22:29
eclipse RCP 桌面系统启动后,当运行到加载log4j的配置文件时,就非常慢,但可以成功。
即运行到:
String log4jConfigFileLocation ="d:\\log4j-trace.xml";
traceLoggerRepository = reNewLoggerRepository(traceLoggerRepository);
new DOMConfigurator().doConfigure(log4jConfigFileLocation, traceLoggerRepository);
这句时,就停很久,其中log4jConfigFileLocation为log4j的配置文件路径(xml方式的配置文件,曾试过
用.properties方式的配置文件,到对应读取方式的句子时依然很慢),查看log4j源码,即到:
BeanInfo bi = Introspector.getBeanInfo(obj.getClass()); 这句时是很慢的,调试时得到obj.getClass()
的值为xml配置文件中我们自定义的一个类,该类继承org.apache.log4j.RollingFileAppender.
我们服务端采用的是同样的方式(同样的代码),速度很快,只是服务端启动前加载了配置文件中自定
义的类所在的插件,而客户端(上面的问题就出现在客户端)集成进eclipse中,启动时无法将刚才的插件提
前加载。
现在希望客户端加载log4j配置文件的速度加快,即达到和服务端一样的速度,应该怎么解决?
或者eclipse启动时,如何像加载自己的org.eclipse.equinox.launcher _1.1.1.R36x_v20101122_1400.jar一样,
加载外部jar包,如何设置?
联系QQ:280500447
AppRollingFileAppender类:

package com.test.common.core.log;

import java.io.File;
import java.io.IOException;

import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;

import com.test.common.core.appl.system.AppSystemContext;

/**
* RollingFileAppender 继承Log4j的滚动日志输出地,以当前工作路径为当前目录。<p>
*
*
*
*/

public class AppRollingFileAppender extends org.apache.log4j.RollingFileAppender {

/**
* 构造方法
*/
public AppRollingFileAppender() {
super();
//默认编码格式设定为UTF-8
setEncoding("UTF-8");
}

// 最大允许的Level
private Level maxLevel;

/**
* 取得最大允许的Level
*
* @return 最大允许的Level
*/
public Level getMaxLevel() {
return maxLevel;
}


/**
* {@inheritDoc}
*/
@Override
public synchronized void doAppend(LoggingEvent event) {
if (!LoggerInfoHelper.isLessOrEqual(maxLevel, event.getLevel())) {
return;
}
if (new File(fileName).exists() == false) {
try {
super.setFile(fileName, fileAppend, bufferedIO, bufferSize);
} catch (IOException ignore) {
}
}
super.doAppend(event);
}

/**
* 重写setFile方法
*
* @param fileName 相对于当前应用的相对路径
*/
@Override
public synchronized void setFile(final String fileName, boolean append, boolean bufferedIO, int bufferSize)
throws IOException {
String fileNameMerge = getLogFilePath(fileName);
File parent = new File(fileNameMerge).getParentFile();
if ((parent != null) && (!parent.exists())) {
if (!parent.mkdir()) {
throw new IOException("Parent dir can not create!");
}
}
super.setFile(fileNameMerge, append, bufferedIO, bufferSize);
}

//增加当前应用路径
protected static String getLogFilePath(final String fileName) {
if (fileName == null) {
return null;
}
if (new File(fileName).isAbsolute()) {
return fileName;
}
String home = AppSystemContext.getInstance().getAppHome();
if (home == null || home.length() == 0) {
home = LoggerFactoryPlugin.getLoggerHome();
}
return new File(home, fileName).getAbsolutePath();
}


}


log4j-trace.xml内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="null">
<!-- 同步 -->
<appender class="com.test.common.core.log.AppRollingFileAppender" name="ROLLING_FILE">
<param name="Encoding" value="UTF-8"/>
<param name="File" value="logs/trace.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="50"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%p][%C:%L] %m%n"/>
</layout>
</appender>

<!-- 异步 -->
<appender name="ROLLING_FILE_ASYN" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="8192"/>
<param name="LocationInfo" value="true"/>
<appender-ref ref="ROLLING_FILE"/>
</appender>

<!-- 标准输出 -->
<appender class="org.apache.log4j.ConsoleAppender" name="STDOUT">
<param name="threshold" value="debug" />
<param name="target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d [%t][%F:%L] : %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="debug" />
<param name="LevelMax" value="info" />
</filter>
</appender>

<!-- 标准错误 -->
<appender class="org.apache.log4j.ConsoleAppender" name="STDERR">
<param name="threshold" value="warn" />
<param name="target" value="System.err"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d [%t][%F:%L] : %m%n" />
</layout>
</appender>




<appender class="com.test.common.core.log.AppRollingFileAppender" name="ROLLING_FILE_BS">
<param name="Threshold" value="DEBUG"/>
<param name="Encoding" value="UTF-8"/>
<param name="File" value="logs/taskjob.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="200"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%p][%C:%L] %m%n"/>
</layout>
</appender>
<!--
<appender name="ROLLING_FILE_BS_SYN" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="8192"/>
<param name="LocationInfo" value="true"/>
<appender-ref ref="ROLLING_FILE_BS"/>
</appender>

<logger additivity="false" name="com.ygkj.qd.common">
<level value="DEBUG"/>
<appender-ref ref="ROLLING_FILE_BS"/>
</logger>

<logger additivity="false" name="com.ygkj.qd.common">
<level value="DEBUG"/>
<appender-ref ref="ROLLING_FILE_BS"/>
</logger>
-->
<logger additivity="false" name="com.test.cdt.biz.desktop.job.CheckOverrideTrans">
<level value="DEBUG"/>
<appender-ref ref="ROLLING_FILE_BS"/>
</logger>



<!-- root logger -->
<root>
<level value="DEBUG"/>
<appender-ref ref="ROLLING_FILE"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="STDERR"/>
</root>
</log4j:configuration>

...全文
292 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
richard14174 2016-08-15
  • 打赏
  • 举报
回复
有没有高手解答。 急。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧