2012-11-15 3 views
0

우리는 karafosgi 응용 프로그램이 있고 소스에서 로깅 설정을 (현재 그들이 karaf/etc/org.ops4j.pax.logging.cfg에)logback

가 UPDATE 유지하기 위해 번들 항아리 내부 로깅 속성을 갖고 싶어 : 사실 지금 우리는 계속 Karaf CM Admin 서비스에 config를 로깅하십시오. 각 릴리스에서 작은 로깅 변경을 수행하기 위해 운영 팀에 특별 지침을 작성해야하기 때문에 문제가됩니다. 게다가 우리는 여러 karaf 노드 (~ 10)를 가지고 있고 각각에 대해 이러한 작업을 반복하는 것은 복잡하고 오류가 발생하기 쉬운 작업입니다. 물론 우리는 각 karaf 노드에 Cellar를 인스톨 한후에 수 있지만 가장 간단한 방법은 단지 소스에

내가 봤 한을 설정을 유지 그래서는 OSGI의 ENV를 복잡하게하고 그것을 위해 어떤 지원을 필요로하는 easiest way to create a separate bundle와 함께 실제 로깅 물건을한다 모든 종속성 (logback, slf4j, config)은 내부에서 org.slf4을 내 보냅니다.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <configuration> 
       <unpackBundle>true</unpackBundle> 
       <instructions> 
        <Embed-Dependency>*;groupId=!junit|org.springframework|log4j|javax.jms|javax.mail</Embed-Dependency> 
        <Embed-Transitive>false</Embed-Transitive> 
        <Embed-Directory>target/dependency</Embed-Directory> 
        <Embed-StripGroup>true</Embed-StripGroup> 
        <Export-Package>org.slf4j</Export-Package> 
        <Import-Package> 
         * 
        </Import-Package> 
       </instructions> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>copy-dependencies</id> 
        <phase>package</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <excludeGroupIds>junit,org.springframework,log4j</excludeGroupIds> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>com.springsource.ch.qos.logback.classic</artifactId> 
     <version>0.9.15</version> 
    </dependency> 

    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>com.springsource.ch.qos.logback.core</artifactId> 
     <version>0.9.15</version> 
    </dependency> 

을하지만 javax.mail/jms 같은 추가 dependecies의 매니페스트 많이 번들 등 둔다 :

나는이 pom.xml과 노력

Import-Package: javax.jms,javax.mail,javax.mail.internet,javax.management,javax.naming,javax.servlet,javax.servlet.http,javax.sql,javax.xml.parsers,org.codehaus.janino,org.slf4j;version="1.6",org.xml.sax,org.xml.sax.helpers,sun.reflect 

확실히 그것은 좋은 방법 배포 아니에요 모든 필요를 그들을 해결하기 위해 카라프에 물건을.

내부적으로 모든 로깅 종속성이있는 단일 번들을 작성하는 방법은 무엇입니까?

답변

0

실제로 이러한 번들을 만들 필요는 없다고 생각합니다. Pax Logging receives its configuration via the Configuration Admin Service. 따라서 모든 번들에서 해당 구성을 업데이트 할 수 있습니다. 리 패키징은 필요하지 않습니다.

+0

정확하게, 나는 우리가 이미 모든 로그 CONFIGS이 쓴'karaf/등/org.ops4j.pax.logging.cfg' 즉, karaf Conf Admin Service이며 각 릴리스에서 작은 로깅 변경을 수행하기 위해 운영 팀에 특별 지침을 작성해야하기 때문에 문제가됩니다. 게다가 우리는 여러 개의 karaf 노드 (~ 10)를 가지고 있으며 각각 반복해서 거대한 작업을합니다. 물론 그들은 각각의 karaf 노드에'Cellar '를 호출 한 후에 그것을 할 수 있지만 그것은 osgi env를 복잡하게 할 것이고 각 노드에서 지하 저장기를 지원할 것을 요구할 것입니다 – yetanothercoder

0

잘 지정된 곳 (예 : /configuration/configuration.json의 JSON 파일)에 구성 데이터가 포함 된 번들을 만듭니다. 그런 다음 번들이 변경되고 구성 관리자를 업데이트 할 때이 데이터를 읽는 Extender를 만듭니다. 나는 그런 익스텐더를 작성했습니다

, 당신이 http://jpm4j.org/#!/p/osgi/aQute.configurer?tab=readme

소스 코드가 JAR에 포함되어 찾을 수 있습니다 http://repo.jpm4j.org/rest/bundle/51C83986E4B06EF1574B84F7/c9256d19f155d699ed0d18559bbb80441ac68ff7