Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在OSGiMaven捆绑包中以编程方式更改log4j文件名不起作用_Java_Maven_Log4j_Apache Karaf - Fatal编程技术网

Java 在OSGiMaven捆绑包中以编程方式更改log4j文件名不起作用

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

我正在开发一个maven osgi捆绑包并在karaf中部署。。在这种情况下,一段代码应该从karaf/etc获取.cfg文件,并在运行时通过编程对其进行更改。。writeTrace()在另一个类的“for循环”中调用。这样我就可以创建不同的文件,相应的日志应该进入该文件

   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)"