网络上很多例子,都不完整,这里整理一下.
由于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接口:
-
package test;
-
-
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")); //log4j.properties 放到该类的同一目录,避免log4j自动识别,无法手动管理
-
-
PropertyConfigurator.configure(props);
-
}
-
-
public void stop(BundleContext context) throws Exception {
-
LogManager.shutdown();
-
}
-
- }
log4j配置文件
#
# 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.
#
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=INFO, CONSOLE
#log4j.rootCategory=INFO, CONSOLE, LOGFILE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %l %x %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
#log4j.appender.LOGFILE=org.apache.log4j.FileAppender
#log4j.appender.LOGFILE.File=asf.log
#log4j.appender.LOGFILE.Append=true
#og4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
#log4j.logger.com.alisoft.aep.sip.analyzer=INFO,CONSOLE,LOGFILE
接下来是重点:
MANIFEST.MF:输出包org.slf4j
其他插件需要用日志服务的,需要依赖日志Bundle即可。
然后:
-
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
-
public class TestClass{
-
private static Logger log = LoggerFactory.getLogger("TestClass");
-
-
public void doThings(){
-
log.info("doThings()");
-
}
-
}
分享到:
相关推荐
这意味着系统管理员可以随时卸载这个OSGi插件,让应用回到使用原始的本地日志存储方式。这种方法的优点在于它的灵活性和便利性,可以根据需要快速切换日志管理策略。 方案的应用结果表明,对于并发访问达到1000个...
5. `osgi_serviceImpl`:这可能是一个自定义的OSGI服务实现,它定义了服务接口和其实现,可以在OSGI环境中提供和使用。 6. `osgi_service`和`osgi_use`:这两个可能是与OSGI服务相关的模块。`osgi_service`可能包含...
- **调试与日志**:利用OSGi提供的工具进行服务的调试和日志记录,以便于问题排查。 总之,"tomcat-osgi"的集成提供了一个强大的平台,允许开发者构建高度模块化、可扩展和动态的Java应用程序。通过深入理解和熟练...
Gemini Blueprint是OSGi环境中用于管理服务和组件的一种工具,它基于Spring Blueprint规范,提供了在OSGi容器中使用Spring应用上下文的功能。 这篇名为“osgi gemini blueprint环境”的博文可能详细阐述了如何配置...
通过OSGi服务注册,用户管理模块可以发现并使用资源管理模块的服务,同时日志记录模块可以监听并记录所有模块的操作,而无需直接引用它们。这样的设计使得系统容易扩展,如果需要添加新功能,只需添加新的Bundle即可...
一旦配置完成,你可以直接在Eclipse中运行这个OSGi应用,观察Bundle的状态变化(如启动、暂停、停止等),并通过日志输出或断点调试来了解其运行过程。 7. **动态更新** OSGi的一大优势是能够在运行时更新Bundle...
- **调试和监控**:使用 OSGi 控制台或日志工具进行应用的调试和监控。 4. **最佳实践** - **模块设计**:合理划分模块,避免跨 bundle 的直接依赖,以提高可重用性和可维护性。 - **版本管理**:遵循严格的版本...
10. **安全性**:OSGi环境中也需要考虑安全策略,如限制bundle的权限,控制服务访问,以及使用SslContexts确保网络通信的安全。 学习和实践OSGi Web示例工程有助于理解如何在模块化环境中构建和管理复杂的Web应用,...
使用OSGI的开发和调试可能涉及到命令行工具(如`osgish`),日志查看器来跟踪服务生命周期,以及特殊的调试器或插件。理解如何有效地利用这些工具对于理解和解决问题至关重要。 通过学习这个实例,开发者不仅能...
OSGi联盟开发了多个公共功能的标准组件接口,包括HTTP服务器、配置、日志、安全、用户管理和XML等。这些接口通过插件的形式存在,以适应不同计算机服务提供商的不同优化和使用成本。 OSGi框架从概念上可以分为三个...
2. 理解服务生命周期:确保在正确的时间和条件下使用服务。 3. 检查服务注册和引用:确保服务提供者和消费者之间的通信正确无误。 4. 利用开发工具:如IDEA或Eclipse的OSGI插件进行调试和管理。 5. 考虑心跳机制:...
在OSGi中,服务是指一组具有明确目的的代码和数据的集合,例如日志服务、用户界面服务等。服务可以被动态地发布、注册、查找、绑定和取消绑定。服务层的实现依赖于模块层和生命周期层,因为服务实际上是在模块中实现...
7. **调试与日志**:熟悉在OSGi环境中如何进行调试,以及如何配置和使用日志服务来记录bundle的运行情况。 8. **动态性与版本管理**:理解OSGi的动态性,如何在运行时更新和替换bundle,以及版本管理的重要性,如何...
8. **Logging Integration**:Felix通常使用LogService进行日志记录,因此需要确保Hibernate的日志输出与之兼容。 9. **JPA支持**:如果使用JPA(Java Persistence API),需要确保JPA提供者如EclipseLink或OpenJPA...
3. **服务层**:描述了 OSGi 服务注册中心的工作原理,以及如何在 Bundle 之间提供、查找和使用服务。 4. **动态性与模块化**:深入探讨了 OSGi 如何支持系统的动态性和模块化,使得开发者可以在不停机的情况下对...
3. **服务** - OSGi服务是可发现、可注册和可使用的对象,它们通过Service Registry进行管理,使得模块之间能动态共享功能。 4. **依赖管理** - OSGi通过manifest.mf文件中的Import-Package和Export-Package头来管理...
确保正确配置了日志服务,以便于追踪服务的生命周期和交互。 通过以上步骤,我们可以构建一个既具有Spring灵活性又具备OSGi模块化优势的企业应用。值得注意的是,随着Java EE和微服务架构的发展,OSGi和Spring的...