给OSGi程序添加日志
来源:互联网 发布:小米三可以用4g网络吗 编辑:程序博客网 时间:2024/05/20 23:35
由于OSGi每个Bundle都有自己的独立的类加载器,所以如果将Log4j的配置放到一个Bundle中,是不能被其他Bundle共享的,而且也分散了对log的管理,显然不是太好。
比较理想的作法就是单独建立一个Log Bundle,负责处理日志问题,包括加载、关闭、配置等。由于我的项目中涉及到Jetty、Wicket、Hibernate、Spring等这些开源的项目分别使用了Jetty和Wicket使用的是slf4j,而Spring和Hibernate使用了Apache的commons-logging,所以只好使用slf4j作为通用的日志工具,使用Log4j的实现。
因为日志管理属于全局的,所以我将一些全局的东西都打包到一个Bundle中,方便管理。这个Bundle的主要目的就是加载Log4j的配置文件,并管理其生命周期。
首先要添加slf4j-api-1.4.2.jar和slf4j-log4j12-1.4.2.jar,用来让slf4j使用log4j的jar包,当然也不能忘了log4j自身的jar包。新建一个CoreActivator实现BundleActivator接口:
这就完成了Log4j的加载,下面来配置log4j.properties:
log4j.category.org.springframework=INFO,C
log4j.category.wanged=INFO,C
log4j.category.org.apache.wicket=INFO,C
log4j.category.org.hibernate=INFO,C
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.Target = System.out
log4j.appender.C.layout = org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern = %-d{HH:mm:ss} [%p] %m%n
因为这里只涉及到Log4j的初始化和清理操作,所以在MANIFEST.MF中只需要导入org.apache.log4j。
现在配置好了,如何使用呢?在需要使用日志的Bundle中,只需要导入包org.slf4j,就可以在程序中使用,示例如下:
当然如果不喜欢使用Log4j,可以单独修改上面的Bundle,而不会影响到其他使用Log的Bundle,是不是很方便?!
比较理想的作法就是单独建立一个Log Bundle,负责处理日志问题,包括加载、关闭、配置等。由于我的项目中涉及到Jetty、Wicket、Hibernate、Spring等这些开源的项目分别使用了Jetty和Wicket使用的是slf4j,而Spring和Hibernate使用了Apache的commons-logging,所以只好使用slf4j作为通用的日志工具,使用Log4j的实现。
因为日志管理属于全局的,所以我将一些全局的东西都打包到一个Bundle中,方便管理。这个Bundle的主要目的就是加载Log4j的配置文件,并管理其生命周期。
首先要添加slf4j-api-1.4.2.jar和slf4j-log4j12-1.4.2.jar,用来让slf4j使用log4j的jar包,当然也不能忘了log4j自身的jar包。新建一个CoreActivator实现BundleActivator接口:
java 代码
- package wanged.core;
- import java.util.Properties;
- import org.apache.log4j.LogManager;
- import org.apache.log4j.PropertyConfigurator;
- import org.osgi.framework.BundleActivator;
- import org.osgi.framework.BundleContext;
- public class CoreActivator implements BundleActivator {
- public void start(BundleContext context) throws Exception {
- Properties props = new Properties();
- props.load(CoreActivator.class.getResourceAsStream("/log4j.properties"));
- PropertyConfigurator.configure(props);
- }
- public void stop(BundleContext context) throws Exception {
- LogManager.shutdown();
- }
- }
这就完成了Log4j的加载,下面来配置log4j.properties:
log4j.category.org.springframework=INFO,C
log4j.category.wanged=INFO,C
log4j.category.org.apache.wicket=INFO,C
log4j.category.org.hibernate=INFO,C
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.Target = System.out
log4j.appender.C.layout = org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern = %-d{HH:mm:ss} [%p] %m%n
因为这里只涉及到Log4j的初始化和清理操作,所以在MANIFEST.MF中只需要导入org.apache.log4j。
现在配置好了,如何使用呢?在需要使用日志的Bundle中,只需要导入包org.slf4j,就可以在程序中使用,示例如下:
java 代码
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- public class TestClass{
- private static final Logger log = LoggerFactory.getLogger(TestClass.class);
- public void doThings(){
- log.info("doThings()");
- }
- }
当然如果不喜欢使用Log4j,可以单独修改上面的Bundle,而不会影响到其他使用Log的Bundle,是不是很方便?!
- 给OSGi程序添加日志
- 给ios程序添加调试日志文件
- 给程序添加启动画面
- 给WindowBase程序添加View
- 给Qt程序添加图标
- 给黑莓程序添加快捷键
- 给MFC程序添加背景图片
- 给黑莓程序添加快捷键
- 给事件添加处理程序
- 给程序添加使用日期
- osgi 学习系列(九)osgi 日志
- 给程序加入记日志的功能
- 给Delphi程序添加版本信息
- VC/MFC给程序添加背景图片
- 给MFC程序添加文件拖放处理
- 第五部分 给程序添加退出事件
- 给程序添加启动画面(C#.net )
- 怎么给qt程序添加版本信息
- 用mod_status和mod_info模块来监测APACHE性能
- automake生成动态链接库
- 页面跳转的方式
- 按快门之前需八项注意
- 数据库的数据独立性
- 给OSGi程序添加日志
- USB协议简述
- S3C2440时钟详细描述
- Struts2.0页面跳转css无效问题的解决方法
- ABAP中的参数传递
- Linux 系统 vm.overcommit_memory 内核参数
- ASP.NET跨页面传值的技巧
- 线段树
- 七、模版方法模式