Java 在OSGiMaven捆绑包中以编程方式更改log4j文件名不起作用
我正在开发一个maven osgi捆绑包并在karaf中部署。。在这种情况下,一段代码应该从karaf/etc获取.cfg文件,并在运行时通过编程对其进行更改。。writeTrace()在另一个类的“for循环”中调用。这样我就可以创建不同的文件,相应的日志应该进入该文件Java 在OSGiMaven捆绑包中以编程方式更改log4j文件名不起作用,java,maven,log4j,apache-karaf,Java,Maven,Log4j,Apache Karaf,我正在开发一个maven osgi捆绑包并在karaf中部署。。在这种情况下,一段代码应该从karaf/etc获取.cfg文件,并在运行时通过编程对其进行更改。。writeTrace()在另一个类的“for循环”中调用。这样我就可以创建不同的文件,相应的日志应该进入该文件 public void writeLog(int i,String HostName) { StringBuilder sb = new StringBuilder(); sb.append("\n H
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);
}
我能够看到使用主机名创建的新文件,例如(主机名_1、主机名_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或代码问题有关?为什么不为此使用ConfigurationAdminService,而不是更改文件? 只需从注册表中引用配置管理服务,并使用PID org.ops4j.pax.logging进行配置。
使用这种方法,您的方案将具有所有可用的配置属性,并且在您的代码中可以更改这些属性。您还可以添加新的配置条目。最后,ConfigurationAdminService和felix FileInstaller的组合甚至会将您的更改保留到配置文件中 顺便说一句,您知道有一个shell命令用于配置配置,因此实际上还需要更改org.ops4j.pax.logging服务的配置吗? 只要做一个:
config:list
检索所有可用的配置
和
仅检索此信息 因为我是karaf的新手,你能给我举一些关于configuratoinAdminService with File Installer的代码示例吗?这是我在Pax Web上测试的部分,在Pax考试的新版本中,这可以更容易地完成,尽管这足以成为一个例子:我看到了你的代码,但我无法获得配置文件属性
org.osgi.service.cm.Configuration config=caService.getConfiguration(“org.ops4j.pax.logging”)
我无法获取任何配置属性。。我需要你的帮助。你需要确保你的测试确实注入了配置Adminservice:@Inject private ConfigurationAdmin CaseService;您是否安装了它的Felix实现?mavenBundle(“org.apache.felix”、“org.apache.felix.configadmin”、“1.4.0”)在osgi maven bundle(ConfigAdminService)开发中有一种方法可以做到这一点。。为了你的澄清,我没有做PAX考试测试。
config:list "(service=org.ops4j.pax.logging)"