Karaf Decanter 中的自定义 Appender 不工作

Custom Appender in Karaf Decanter Not working

我正在尝试使用提到的 Decanter 创建自定义附加程序 here。我的目标是收听 karaf bundle 输出的所有日志并将其显示在控制台中。我在 Apache Servicemix 6.1.0

下使用 Karaf 3.0.4

我在 Karaf 中添加了 Decanter 功能存储库,然后按照 Decanter 文档中的说明安装了 collector-log 和 appender-log。

我的自定义附加程序如下所示:-

package com.jabong.karaf.decanter.appender.elklog;

import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;

public class ELKLogAppender implements EventHandler {
    @Override
    public void handleEvent(Event event) {
    for (String name : event.getPropertyNames()) {
        System.out.println("Custom Debraj" + name + ":" + event.getProperty(name));
    }
    }
}

我的 Activator 如下所示:-

package com.jabong.karaf.decanter.appender.elklog;

import java.util.Dictionary;
import java.util.Hashtable;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.event.EventConstants;
import org.osgi.service.event.EventHandler;

public class Activator implements BundleActivator {
    private ServiceRegistration registration;

    @Override
    public void start(BundleContext bundleContext) {
    ELKLogAppender appender = new ELKLogAppender();
    Dictionary<String, String> properties = new Hashtable<>();
    properties.put(EventConstants.EVENT_TOPIC, "decanter/collect/*");
    registration = bundleContext.registerService(EventHandler.class, appender, properties);
    }

    @Override
    public void stop(BundleContext bundleContext) {
    if (registration != null) {
        registration.unregister();
    }
    }
}

我的 pom.xml 如下所示:-

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.jabong.karaf.decanter.appender</groupId>
    <artifactId>elklog</artifactId>
    <version>0.0.1</version>
    <packaging>bundle</packaging>
    <name>Apache Karaf :: Decanter :: Appender :: ELKLog</name>
    <dependencies>
        <!-- OSGi -->
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <version>4.3.1</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.4.0</version>
                <inherited>true</inherited>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Bundle-Version>${project.version}</Bundle-Version>
                        <Bundle-Activator>com.jabong.karaf.decanter.appender.elklog.Activator</Bundle-Activator>
                        <Import-Package>
                            *
                        </Import-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

通过将它放在 deploy 文件夹中,我能够在 Karaf 中正确安装该包。

332 | Active    |  80 | 0.0.1                              | basecomponent                                               
333 | Active    |  80 | 1.0.1                              | Apache Karaf :: Decanter :: API                             
334 | Active    |  80 | 1.0.1                              | Apache Karaf :: Decanter :: Collector :: Log                
337 | Active    |  80 | 1.0.1                              | Apache Karaf :: Decanter :: Appender :: Log                 
339 | Active    |  80 | 0.0.1                              | Apache Karaf :: Decanter :: Appender :: ELKLog 
340 | Active    |  80 | 2.4.0                              | Commons IO                                                  
341 | Active    |  80 | 1.0.1                              | Apache Karaf :: Decanter :: Collector :: File   

我在 Karaf 中的 org.ops4j.pax.logging.cfg 如下所示:-

# Root logger
log4j.rootLogger=INFO, out, osgi:VmLogAppender
log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer

# To avoid flooding the log when using DEBUG level on an ssh connection and doing log:tail
log4j.logger.org.apache.sshd.server.channel.ChannelSession = INFO

# CONSOLE appender not used by default
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %X | %m%n

# File appender
log4j.appender.out=org.apache.log4j.RollingFileAppender
log4j.appender.out.layout=org.apache.log4j.PatternLayout
log4j.appender.out.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %X | %m%n
log4j.appender.out.file=${karaf.data}/log/servicemix.log
log4j.appender.out.append=true
log4j.appender.out.maxFileSize=100MB
log4j.appender.out.maxBackupIndex=10

# Sift appender
log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
log4j.appender.sift.key=bundle.name
log4j.appender.sift.default=servicemix
log4j.appender.sift.appender=org.apache.log4j.FileAppender
log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X | %m%n
log4j.appender.sift.appender.file=${karaf.data}/log/$\{bundle.name\}.log
log4j.appender.sift.appender.append=true

但我在控制台上没有看到任何消息。尽管我在 data/servicemix.log

中看到很多日志

在etc/org.ops4j.pax.logging.cfg中,改为

log4j.rootLogger=INFO, out, osgi:* 

来自

log4j.rootLogger=INFO, out, osgi:VmLogAppender 

解决了问题。