osgi + camel + karaf配置日志输出
Posted 叶长风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了osgi + camel + karaf配置日志输出相关的知识,希望对你有一定的参考价值。
上篇博文中编了felix的一个简单example,然后演示了example的启动,Activator启动之后进行了控制台输出,但整个example feature的启动过程中那些bundle进行了install过程并没有演示,接下来将演示这一过程。
配置日志
首先对karaf的输出进行日志输出,先前在parent module中pom.xml中配置插件指定配置文件位置,如下所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>copy-resources</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>target/assembly</outputDirectory>
<overwrite>true</overwrite>
<resources>
<resource>
<directory>../../assembly/develop</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/test/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<resource>
<directory>../../assembly/develop</directory>
<filtering>false</filtering>
</resource>
这一个是指定全局的配置文件位置,以下这一个是指定每一个module单独的配置文件如每个module独有的数据源等等。
<resource>
<directory>src/test/resources</directory>
<filtering>false</filtering>
</resource>
在以上配置完成之后,在相应的root目录下建立相关文件夹,添加名为org.ops4j.pax.logging.cfg的配置文件,这个文件不知道的可以单独在google上查询一下,这个就是指定karaf日志输出以及格式确定的。
日志格式
org.ops4j.pax.logging.cfg具体的内容如下:
################################################################################
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
################################################################################
# Root logger
log4j.rootLogger=INFO, stdout, out, osgi:*
log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer
# 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} | %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} | %m%n
log4j.appender.out.file=${karaf.data}/log/karaf.log
log4j.appender.out.append=true
log4j.appender.out.maxFileSize=1MB
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=karaf
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} | %m%n
log4j.appender.sift.appender.file=${karaf.data}/log/$\\\\{bundle.name\\\\}.log
log4j.appender.sift.appender.append=true
这里指定了日志输出的具体格式,以及输出那些内容与级别。
演示
现在再次启动karaf,观察输出日志,如下图所示:
现在就能仔细查看日志中的具体内容,不必担心当karaf启动失败不知道问题所在了,这里的karaf日志输出在日后整合cxf时候还有具体的应用,这里karaf的日志输出确实比较方便。
#观察karaf中bundle
进入example中的target中的assembly文件夹中,如下图所示:
cmd控制台进入上述bin文件夹之中,输入karaf.bat,进入karaf控制台,
输入命令bundle:list
查看karaf中所有install的bundle,如下图所示:
上图中可以看到example的启动级别为100最高,这里是可以设置的,就是在osgi系列的第二篇博文中指定的feature.xml文件中,如下所示:
<bundle start-level="100">mvn:${project.groupId}/example/${project.version}</bundle>
不过我们一般并不需要这个高的启动级别,一般设置低一点就可以了。
在图中,example的state为Active,表示bundle正常install,另方面证明Activator的启动完全正常,程序演示成功。
总结
本文讲述了karaf具体的日志输出以及bundle install过程,下一篇博文将继续felix 中example的编写。
以上是关于osgi + camel + karaf配置日志输出的主要内容,如果未能解决你的问题,请参考以下文章
启动捆绑包时缺少要求 osgi.wiring.package
如何使用 Apache Karaf/OSGi 构建桌面应用程序?
在 OSGI (Karaf) 中使用 EclipseLink JPA