【问题标题】:changing log4j file name programatically in osgi maven bundle not working在osgi maven bundle中以编程方式更改log4j文件名不起作用
【发布时间】:2014-03-05 12:20:38
【问题描述】:

我正在开发一个 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);
}

我可以看到使用主机名创建的新文件,例如 (hostname_1 , hostname_2, etc..),但日志记录仅发生在 karaf/etc 配置的实际附加程序中... 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 或代码问题有关..???

【问题讨论】:

    标签: java maven log4j apache-karaf


    【解决方案1】:

    您为什么不直接使用 ConfigurationAdminService,而不是更改文件? 只需从注册表中引用配置管理服务并使用 PID org.ops4j.pax.logging 进行配置。
    使用这种方法,您将拥有可用于您的提案的所有配置属性,并且可以在您的代码中更改它。您也可以添加新的配置条目。最后,ConfigurationAdminService 和 felix FileInstaller 的组合甚至会将您的更改保留回配置文件。

    顺便说一句。您是否知道有一个用于配置配置的 shell 命令,所以实际上也可以更改 org.ops4j.pax.logging 服务的配置? 做一个:

    config:list
    

    检索所有可用配置 还有一个

    config:list "(service=org.ops4j.pax.logging)" 
    

    仅检索此信息。

    【讨论】:

    • 因为我是 karaf 的新手,您能否引用任何带有文件安装程序的 configuratoinAdminService 的代码示例..
    • 这是我在 Pax Web 中用于测试的部分,使用新版本的 Pax Exam 可以更轻松地完成此操作,尽管它足以作为示例:github.com/ops4j/org.ops4j.pax.web/blob/master/pax-web-itest/…
    • 我看到了你的代码,但我无法获取配置文件属性。 org.osgi.service.cm.Configuration config = caService.getConfiguration("org.ops4j.pax.logging") 我无法获取任何配置属性.. 我需要你的帮助。
    • 您需要确保您的测试确实注入了配置Adminservice:@Inject private ConfigurationAdmin caService;你有安装它的 Felix 实现吗? mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.4.0")
    • 有没有办法在 osgi maven bundle(ConfigAdminService) 开发中做到这一点。为了您的澄清,我没有做 PAX 考试测试。
    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 2015-12-30
    • 2013-07-03
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多