2016-03-27 15 views
0

Ich versuche, einen benutzerdefinierten Appender mit Dekanter wie erwähnt here zu erstellen. Mein Ziel ist es, alle von Karaf-Bundles ausgegebenen Logs zu hören und in der Konsole anzuzeigen. Ich verwende Karaf 3.0.4 unter Apache Servicemix 6.1.0Benutzerdefinierte Appender in Karaf Decanter Funktioniert nicht

Ich habe Decanter Feature-Repository in Karaf & dann Collector-Log und Appender-Log wie in der Dekanter-Dokumentation erwähnt installiert.

Meine benutzerdefinierte appender sieht aus wie folgt: -

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)); 
    } 
    } 
} 

Mein Activator sieht aus wie folgt: -

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(); 
    } 
    } 
} 

Meine pom.xml wie unten aussieht: -

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

I konnte das Paket korrekt in Karaf installieren, indem es in den Ordner deploy gelegt wurde.

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 

Mein org.ops4j.pax.logging.cfg in Karaf sieht aus wie folgt: -

# 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 

Aber ich bin keine Nachricht auf der Konsole zu sehen. Auch wenn ich in data/servicemix.log

Antwort

0

In etc/org.ops4j.pax.logging.cfg viele Protokolle bin zu sehen, zu

Ändern

log4j.rootLogger=INFO, out, osgi:* 

von

log4j.rootLogger=INFO, out, osgi:VmLogAppender 

löste das Problem .