Spring OSGI入门(2) 处理Log4j “WARN No appenders could be found for logger”

上一篇文章,我们讲到了Spring OSGI运行所需要的目标环境已经建好了,不过Log4j出现一个问题,提示我们:

log4j:WARN No appenders could be found for logger (org.springframework.osgi.extender.internal.activator.ContextLoaderListener).
log4j:WARN Please initialize the log4j system properly.

原因就是我们没有配置Log4j,导致log4j不能正常使用。下面我们就来处理这个问题。

打开Eclipse 依次点击File–>Project–>在对话框中选中Fragment Project 点击Next.在对话框中按如下进行配置:

项目名称为:info.junv.osgi.log4j,在target platform中选中 an OSGI framework选中 equinox,点击Next:

在plug-in ID中选择com.springsource.org.apache.log4j,点击Finish,完成。

在项目src根目录下建立log4j.properties文件。项目结构层次如下:

打开log4j.properties,粘贴入一下内容

log4j.rootLogger = INFO,FirstAppender
log4j.appender.FirstAppender = org.apache.log4j.ConsoleAppender
log4j.appender.FirstAppender.Threshold = INFO
log4j.appender.FirstAppender.ImmediateFlush = true
log4j.appender.FirstAppender.Target = System.out
log4j.appender.FirstAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.FirstAppender.layout.ConversionPattern = [%x]-%p-%d{yyyy-MM-dd HH:mm:ss}-%m[%c]%n

添加点击点击当前项目或者,前面我们写的SpringDMTarget项目,右键选择Run As–>Run Configurations–>OSGI framework(去掉其余所有多于的项目,保证只剩下我们之前导入的包已经当前这个log4j项目。)
同时需要注意的是,为了让程序顺利运行,需要优先启动…osgi.web.extender,这里我们需要将其的start level设置成4以上(因为默认启动等级为4,为了使其优先启动,所以优先级应大于4,笔者在自己电脑上将优先级设成5依然不行,因为建议如果不行,可以将优先级设得大一些,这里我设置为10,运行成功),

点击RUN。即可以运行。

如果…osgi.web.webextender的优先级不够,将会出现如下错误:

No Catalina Service found, bailing out[org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer

…….

出现这个错误你需要做的是,将osgi.web.webextender组件的启动优先级别再调高一些。即可。