我正在开发一个maven-osgi包并在karaf中部署..在那里,一段代码,应该从karaf / etc获取.cfg文件,并在运行时以编程方式更改它们。在'内调用writeTrace() for loop'来自另一个类。这样我就可以创建不同的文件,并且相应的日志记录应该进入该文件。
public void writeLog(int i,String HostName) {
StringBuilder sb = new StringBuilder();
sb.append("\n HEADER : \n");
....
String str = sb.toString();
String logfile = ("/home/Dev/" + HostName + i);
logger = LoggerFactory.getLogger("TracerLog");
updateLog4jConfiguration(logfile);
logger.error(str + i);}
public void updateLog4jConfiguration(String logFile) {
Properties props = new Properties();
try {
// InputStream configStream = getClass().getResourceAsStream(
// "/home/Temp-files/NumberGenerator/src/main/java/log4j.properties");
InputStream configStream = new FileInputStream("etc/org.ops4j.pax.logging.cfg");
props.load(configStream);
System.out.println(configStream);
configStream.close();
} catch (IOException e) {
System.out.println("Error: Cannot laod configuration file ");
}
props.setProperty("log4j.appender.Tracer.File", logFile);
LogManager.resetConfiguration();
PropertyConfigurator.configure(props);
}
我可以看到使用主机名创建的新文件,例如(hostname_1,hostname_2等等),但只在karaf / etc配置的实际appender上进行日志记录... thaat是log.txt ..
log4j.logger.TracerLog=TRACE,Tracer
log4j.appender.Tracer=org.apache.log4j.RollingFileAppender
log4j.appender.Tracer.MaxBackupIndex=10
log4j.appender.Tracer.MaxFileSize=500KB
log4j.appender.Tracer.File=/home/Dev/log.txt
我对此错误感到震惊..不知道是否必须对karaf或代码问题做些什么.. ???
答案 0 :(得分:2)
为什么不仅仅使用ConfigurationAdminService而不是更改文件?
只需从注册表中引用配置管理服务,然后使用PID org.ops4j.pax.logging 进行配置。
使用此方法,您将拥有可用于您的提案的所有配置属性,并且您的代码中有更改此属性。您还可以添加新配置条目。最后,ConfigurationAdminService和felix FileInstaller的组合甚至会将您的更改保留在配置文件中。
顺便说一下。你知道有一个用于配置配置的shell命令,所以实际上还要改变org.ops4j.pax.logging服务的配置吗? 做一个:
config:list
检索所有可用配置 和
config:list "(service=org.ops4j.pax.logging)"
只检索此信息。