- 浏览: 531011 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (233)
- 设计模式 (1)
- WEBLOGIC (2)
- spring (2)
- struts (1)
- hibernate (8)
- SOA (11)
- j2ee (0)
- corba (0)
- linux (2)
- oracle (0)
- webService (17)
- javaMail (1)
- junit (3)
- java (45)
- 正则表达式 (7)
- java+xml (4)
- html (2)
- javaScript (6)
- ajax (1)
- mysql (0)
- eclipse (2)
- eclipse插件开发 (3)
- 软件工程 (5)
- ant (6)
- 开源包 (6)
- 学习网站 (7)
- Struts2 (18)
- JSP (1)
- 持续集成 (4)
- FreeMaker (6)
- 工作项目点点 (4)
- Maven2 (6)
- JQuery (1)
- 日志记录 (9)
- 工作流 (4)
- BPEL (1)
- extJs (1)
- 组件 (1)
- OSGI (10)
- ESB总线学习 (1)
- 错误解决 (2)
- JMX (3)
- 网络知识 (1)
最新评论
-
duanlongk:
这个问题解决了么?
java.lang.NoClassDefFoundError: org/apache/tuscany -
sotrip:
从上面结果来看,HelloWorld.class是由虚拟机的内 ...
如何实现自己的classloader -
zengsir2008:
哎,不太明白。。。。
OSGI DS 实例 -
ralfsumahe:
...
使用XFire开发Web Service客户端完整入门教程 -
liuqiao_0702:
...
osgi spring hibernate =
log4j相信大家都用过的,现在公司有很多项目的研究都是基于OSGI的,所以我们的日志处理必须换到OSGI环境下去做了。于是相应的 问题也随之而来。其中最主要的问题就是一个classloader的问题。知道OSGI架构原理的都知道OSGI里面的各个Bundle是有独立的 ClassLoader来进行加载的。所以当我们把log4j的配置文件直接放在某个Bundle的classpath下面时是不能被整个OSGI环境识 别的。下面说我们的解决办法。核心思想参考了网上一篇文章(点击这里可以查看)。
1.建一个config-template.ini文件,当然位置和名字都可以由你自己安排,我这里是建在了我的OSGI环境(Eclipse或者 Equinox)的根目录下的configuration文件夹下了,这样这个配置文件就能在运行时被根加载器加载,而对所有的bundle可见,那么不仅仅是我们自定义的bundle可以用log4j,而且其他的第三方的 bundle(如activemq,spring)都可以不用改动任何东西,就能使他们的log4j产生效果了,这也就是我们做这个事情的根本目的。这个文件夹下原来就有个config.ini(在部署的时候这个config.ini必须放在OSGI环境的confuguration文件夹下),是用于设置OSGI环境的启动的相关 属性的,我们可以复制它,然后稍作修改,内容如下:
- osgi.splashPath = file:E:/eclipse-workspace/com.oval.dcts.ba.ui
- osgi.bundles=org.eclipse.equinox.common@2:start,
- org.eclipse.update.configurator@3:start, org.eclipse.core.runtime@start
- eclipse.product=org.eclipse.sdk.ide
- osgi.instance.area.default=@user.home/workspace
- eclipse.buildId=M20060921-0945
- log4j.configuration=file:/D:/Program Files/eclipse/configuration/log4j.properties
然后是准备我的log4j的properties文件,从上面可以看到,我需要把它放到D:/Program Files/eclipse/configuration,当然这个位置也是可以你自己定的(在linux我可以很好的设置相对位置来灵活处理,但是在windows下被反斜杠搞得郁闷,暂时还没有找到好办法,只能先设个绝对地址,到时候可能需要跟使用者约定一下。),而且这个位置在目前我们找的资料来看,用绝对地址相对简单一些,当然同时存在这一些部署上的不方便,我们暂时还没有找到合适的解决方案,不过以后会加以改进,先让我们的目的达到了再说。
log4j.properties 里的写法如下:
- ## ------------------------------------------------------------------------
- ## 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.
- ## ------------------------------------------------------------------------
- #
- # The logging properties used for eclipse testing, We want to see debug output on the console.
- #
- log4j.rootLogger=INFO, stdout, out
- # 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=[%30.30t] %-30.30c{1} %-5p %m%n
- #log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
- log4j.appender.stdout.layout.ConversionPattern=%d %-5p %-5C:%L %x -> %m%n
- # File appender
- log4j.appender.out=org.apache.log4j.RollingFileAppender
- log4j.appender.out.file=./log/log4j.log
- log4j.appender.out.maxFileSize=1024KB
- log4j.appender.out.maxBackupIndex=5
- log4j.appender.out.append=true
- log4j.appender.out.layout=org.apache.log4j.PatternLayout
- log4j.appender.out.layout.ConversionPattern=%d %-5p %-5C:%L %x -> %m%n
- log4j.logger.org.springframework=INFO
- log4j.logger.org.springframework.jdbc.core=INFO
其中比较关键的为log4j.appender.out.file=./log/log4j.log。这里告诉环境把日志文件的保存位置,这样写的话便会将log文件保存在你的环境的根目录下的log文件夹下,文件为log4j.log。
接下来,我们需要在OSGI的启动环境里加上commons-logging和log4j这两个OSGI的bundle咯。在这个地方我们遇到些问题,测试了很久日志都打不出来,后来通过一步步debug才发现问题出在了这两个bundle上,所以大家最好下个最新版的。在启动选项的目标平台里把这两个bundle勾选上。接下来就是到“配置”栏去设置环境加载时使用的配置文件了,在配置文件栏选择“使用现有 config.ini文件作为模板”(默认情况,eclipse会在他的运行环境中自己生成一个默认的ini文件,里面没有我们之前的对log4j做的配置)。选择好后,就开始把我们的OSGI环境跑起来吧。
可以看到日志成功的打到了日志文件里了。
由于第一帖不知道怎么贴图片,我把文章中用到的图片都发到附件里了,大家可以结合图来看,文笔比较差,有没讲解清楚的地方希望大家原谅~
发表评论
-
类加载机制转载
2009-06-23 09:58 2339Java中一共有四个类加载器,之所以叫类加载器,是程序要用到某 ... -
Java虚拟机类装载:原理、实现与应用
2009-05-07 09:50 1490Java虚拟机类装载:原理、实现与应用 By jo ... -
Java程序类加载完全揭密
2009-05-07 09:49 1073Java程序类加载完全揭密 ... -
Java的类装载器(Class Loader)和命名空间(NameSpace)
2009-05-07 09:48 1729Java的类装载器(Class Loader)和命名空间(Na ... -
Java类装载体系中的隔离性
2009-05-07 09:28 1399Java类装载体系中的隔离性 正文 Java中类 ... -
了解 JAVA classloader
2009-05-07 09:21 1065什么是 ClassLoader? ... -
如何实现自己的classloader
2009-05-07 09:12 2021如何实现自己的classloader 如何实现自己的clas ... -
ClassLoader原理
2009-05-07 09:06 1003JVM规范定义了两种类型的类装载器:启动内装载器(bootst ... -
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecuto
2009-04-03 11:32 1290在多线程大师Doug Lea的 ... -
MD5
2009-03-17 09:17 1003使用 Java 生成 MD5 编码 MD5即 ... -
JAVA字符串处理函数列表一览
2009-03-14 16:48 2009Java中的字符串也是一连串的字符。但是与许多其他的计算机语言 ... -
StringTokenizer(字符串分析解析类型)(转)
2009-03-14 16:35 3109功效:将字符串以定界符为界,分析为一个个的token(可理解为 ... -
JAVA乱码分析
2009-03-14 16:33 2148UNICODE编码,它采用双字 ... -
java.util.UUID
2008-12-19 18:01 4935GUID是一个128位长的数字,一般用16进制表示。算法的核心 ... -
java应用程序中动态生成PDF文件
2008-12-11 17:05 1164很多应用程序要求动态 ... -
JAVA和JAVAC 命令行
2008-12-11 17:03 2579javac和java命令行中的-classpath选项这是个很 ... -
创建java的可执行文件
2008-12-11 16:59 1368Jar工具的作用是java程序中若干文件联合压缩到一个Jar包 ... -
深入对象复制与比较
2008-12-04 10:09 15061.对象的复制2.clone()的使用3.对象实例的比较/// ... -
解析Java对象的equals()和hashCode()的使用
2008-12-04 10:07 846在Java语言中,equals()和h ... -
Java基础:深入 JAVA对象的复制与比较
2008-12-04 10:06 8571.对象的复制2.clone()的使用3.对象实例的比较/// ...
相关推荐
NULL 博文链接:https://ouyanggod.iteye.com/blog/1335233
log4j-2.17升级版本包,包括log4j-1.2-api-2.17.1.jar、log4j-api-2.17.1.jar、log4j-core-2.17.1.jar、log4j-slf4j-impl-2.17.1.jar、log4j-web-2.17.1.jar
OSGI环境搭建以及在搭建环境的基础上面附带一个小例子,让你熟悉osgi开发流程
pax-logging-log4j2 (log4J2) pax-logging-logback (logback) pax-logging-log4j1在 2.0.0 版本之前被命名为pax-logging-service 。 不同的日志 API 基本接口org.osgi.service.log.LogService从OSGi的纲要规范的第...
该压缩包中包含以下内容: 1、jcl-over-slf4j-1.7.21.jar 2、jcl-over-slf4j-1.7.21-sources.jar 3、jul-to-slf4j-1.7.21.jar 4、jul-to-slf4j-1.7.21-sources.jar 5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-...
Log4j 和 Slf4j 适配器将日志写入 scribe 服务器。 项目主页: : OSGi 环境:ddth-log2scribe 模块打包为 OSGi 包。 安装 最新发布版本: 0.1.0 。 请参阅 。 Maven 依赖: < groupId>...
osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍
我转载的博客“OSGi环境下建立Web工程的Hello World ”中列出的jar,结合博客“OSGi环境下建立Web工程的Hello World ”开发应用。
这个sevlvlet是和上面传的jdbcbundle是配套的,这是一个关于OSGI的简单实例。
5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-slf4j-1.7.21-sources.jar 7、osgi-over-slf4j-1.7.21.jar 8、osgi-over-slf4j-1.7.21-sources.jar 9、slf4j-android-1.7.21.jar 10、slf4j-android-1.7.21-...
osgi数据库连接一章demo,c3p0配置oracle连接池和ibatis在osgi框架中的使用
OSGI环境搭建-使用JETTY-9.X创建WEB应用-注册Servlet-Jetty性能调优
基于OSGi框架之开发环境搭建基于OSGi框架之开发环境搭建
通过SLF4J的OSGi LogService实现 org.slf4j/osgi-over-slf4j/1.7.10/osgi-over-slf4j-1.7.10.jar
1.7.21-sources.jar 7、osgi-over-slf4j-1.7.21.jar 8、osgi-over-slf4j-1.7.21-sources.jar 9、slf4j-android-1.7.21.jar 10、slf4j-android-1.7.21-sources.jar 11、slf4j-api-1.7.21.jar 12、slf4j-api-1.7.21-...
NULL 博文链接:https://malixxx.iteye.com/blog/560674
OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范
osgi多个bundle之间读取同一配置文件,需要单独添加一个用来读取配置文件的bundle