2016-03-27 23 views
0

前述のようにDecanterを使用してカスタムアペンダーを作成しようとしています。here。私の目標は、karafバンドルが出力するすべてのログを聞き、コンソールに表示することです。私はApache Servicemixの下でKaraf 3.0.4を使用しています。Karaf Decanterのカスタムアペンダーが動作しない

Decanterの機能リポジトリをKaraf &に追加し、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は、以下のようになります。 - :

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

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は、以下のようになります。 Karafにバンドルを正しくインストールするには、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 

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

log4j.rootLogger=INFO, out, osgi:VmLogAppender 

から

log4j.rootLogger=INFO, out, osgi:* 

に変更

答えて

0

でなど/ org.ops4j.pax.logging.cfgは、問題を解決しました。