karaf中利用Bundle引入外部log4j配置文件

环境准备:

1.在karaf_home下新建 config及logs目录

2.将mylog4j.properties拷贝到config文件夹下

查看log4j-1.2.17.jar/MANIFEST.MF

Manifest-Version: 1.0
Export-Package: org.apache.log4j.net;uses:="org.apache.log4j,org.apach
 e.log4j.spi,javax.naming,org.apache.log4j.helpers,javax.jms,org.apach
 e.log4j.xml,javax.mail,javax.mail.internet,org.w3c.dom,javax.jmdns";v
 ersion="1.2.17",org.apache.log4j.jmx;uses:="org.apache.log4j,javax.ma
 nagement,org.apache.log4j.helpers,org.apache.log4j.spi";version="1.2.
 17",org.apache.log4j.jdbc;uses:="org.apache.log4j,org.apache.log4j.sp
 i";version="1.2.17",org.apache.log4j.config;uses:="org.apache.log4j.h
 elpers,org.apache.log4j,org.apache.log4j.spi";version="1.2.17",org.ap
 ache.log4j.helpers;uses:="org.apache.log4j,org.apache.log4j.spi,org.a
 pache.log4j.pattern";version="1.2.17",org.apache.log4j;uses:="org.apa
 che.log4j.spi,org.apache.log4j.helpers,org.apache.log4j.pattern,org.a
 pache.log4j.or,org.apache.log4j.config";version="1.2.17",org.apache.l
 og4j.or.jms;uses:="org.apache.log4j.helpers,javax.jms,org.apache.log4
 j.or";version="1.2.17",org.apache.log4j.nt;uses:="org.apache.log4j.he
 lpers,org.apache.log4j,org.apache.log4j.spi";version="1.2.17",org.apa
 che.log4j.or.sax;uses:="org.apache.log4j.or,org.xml.sax";version="1.2
 .17",org.apache.log4j.pattern;uses:="org.apache.log4j.helpers,org.apa
 che.log4j.spi,org.apache.log4j,org.apache.log4j.or";version="1.2.17",
 org.apache.log4j.spi;uses:="org.apache.log4j,org.apache.log4j.helpers
 ,org.apache.log4j.or";version="1.2.17",org.apache.log4j.rewrite;uses:
 ="org.apache.log4j,org.apache.log4j.spi,org.apache.log4j.helpers,org.
 apache.log4j.xml,org.w3c.dom";version="1.2.17",org.apache.log4j.or;us
 es:="org.apache.log4j.helpers,org.apache.log4j.spi,org.apache.log4j";
 version="1.2.17",org.apache.log4j.xml;uses:="javax.xml.parsers,org.w3
 c.dom,org.xml.sax,org.apache.log4j.config,org.apache.log4j.helpers,or
 g.apache.log4j,org.apache.log4j.spi,org.apache.log4j.or";version="1.2
 .17",org.apache.log4j.varia;uses:="org.apache.log4j.spi,org.apache.lo
 g4j,org.apache.log4j.helpers";version="1.2.17"
Ignore-Package: com.sun.jdmk.comm,javax.swing.text,javax.swing.border,
 javax.swing.tree,javax.swing,com.ibm.uvm.tools,javax.swing.table,java
 x.swing.event
Built-By: cy
Tool: Bnd-0.0.357
Bundle-Name: Apache Log4j
Created-By: Apache Maven Bundle Plugin
Bundle-Vendor: Apache Software Foundation
Build-Jdk: 1.6.0_23
Bundle-Version: 1.2.17
Bnd-LastModified: 1336302107501
Bundle-ManifestVersion: 2
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-Description: Apache Log4j 1.2
Bundle-DocURL: http://logging.apache.org/log4j/1.2
Bundle-SymbolicName: log4j
Import-Package: javax.jmdns;resolution:=optional,javax.jms;resolution:
 =optional,javax.mail;resolution:=optional,javax.mail.internet;resolut
 ion:=optional,javax.management,javax.naming,javax.xml.parsers,org.w3c
 .dom,org.xml.sax,org.xml.sax.helpers

Name: org.apache.log4j
DynamicImport-Package: *
Implementation-Vendor: "Apache Software Foundation"
Implementation-Title: log4j
Implementation-Version: 1.2.17

我们能够看到 log4j-1.2.17.jar 就是一个Bundle

热部署 log4j

启动karaf,将 log4j-1.2.17.jar 拷贝到karaf_home/deploy文件夹下

输入 list 命令。能够查看Bundle已经成功安装

mylog4j.properties

### direct log messages to stdout ###
log4j.appender.consoleout=org.apache.log4j.ConsoleAppender
log4j.appender.consoleout.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c:%L - %m%n

### direct messages to file myfile.log ###
log4j.appender.myfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myfile.File=logs/myfile.log
log4j.appender.myfile.DatePattern=‘.‘yyyy-MM-dd
log4j.appender.myfile.layout=org.apache.log4j.PatternLayout
log4j.appender.myfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c:%L - %m%n

log4j.rootLogger==info,consoleout,myfile

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.demo.hello.provider</groupId>
	<artifactId>log-test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>bundle</packaging>

	<name>log-test</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.core</artifactId>
			<version>4.2.0</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Import-Package>
							org.apache.log4j,
							org.osgi.framework.*
						</Import-Package>
						<Bundle-Activator>com.demo.hello.provider.Activator</Bundle-Activator>
					</instructions>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

Activitor

/**
 *
 * @author wumingkun
 * @version 1.0.0
 * @Description
 */

package com.demo.hello.provider;

import org.apache.log4j.Logger;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

import com.demo.hello.provider.log.LoggerFactory;

/**
 * @author wumingkun
 *
 */
public class Activator implements BundleActivator {

	/* (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
	 */
	public void start(BundleContext context) throws Exception {
		Logger logger =LoggerFactory.getLogger(Activator.class);
		logger.info("bundle start...");
	}

	/* (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
	 */
	public void stop(BundleContext context) throws Exception {

	}

}

LoggerFactory:

/**
 *
 * @author wumingkun
 * @version 1.0.0
 * @Description 日志工厂类
 */

package com.demo.hello.provider.log;

import java.io.File;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 * @author wumingkun
 *
 */
public class LoggerFactory {
	public static final String CONFIG_DIR = "config";
	public static final String LOG4J_CONFIG = "myLog4j.properties";
	private static String fileName = getFileName();

	public static Logger getLogger(Class clazz) {
		Logger logger = Logger.getLogger(clazz);
		loadProperty();
		return logger;
	}

	private static String getFileName() {
		return System.getProperty("user.dir") + File.separator + CONFIG_DIR
				+ File.separator + LOG4J_CONFIG;
	}

	public static void loadProperty() {
		PropertyConfigurator.configure(fileName);
	}
}

部署log-test

在karaf命令行能够看到,例如以下图所看到的:

在karaf_home/logs能够看到生成名为 myfile.log的日志文件

时间: 2024-10-13 22:19:03

karaf中利用Bundle引入外部log4j配置文件的相关文章

XML配置中 引入外部property文件

新建properties配置文件 内容如下: jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc\:mysql\://localhost\:3306/book_mybatis?user\=root&password\=root&useUnicode\=true&characterEncoding\=UTF-8 有两个属性, ①jdbc.dirverClassName ; ②jdbc.url. <!-- 导入属性配置

jsp、css中引入外部资源相对路径的问题

在jsp页面中添加base,可用相对路径: <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> 然后在<head>标签内添加base <base

JSP中利用Properties读写配置文件

JSP中利用Properties读写配置文件 java 代码: package com.reason.test; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.Outp

spring 配置文件 引入外部的property文件的两种方法

spring  的配置文件 引入外部的property文件的两种方法 <!-- 引入jdbc配置文件    方法一 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <lis

OpenSCAD中使用include或use引入外部库

一.OpenSCAD 使用include或use引入外部库 本文英文版本参考:https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement ============================================= OpenSCAD可以快速引入外部库,功能非常强大.意味着不仅可以把一些实用函数进行封装,放到库中进行重用,还可以方便地共享代码和使用第三方代码库.包含外部库的代码,可以使用include和us

Log4j配置文件位置+Spring中数据源配置文件位置

一.Log4j配置文件位置 1.自动加载 应用程序启动时,默认情况下会到src目录下寻找log4j.xml配置文件,若不存在,会继续寻找log4j.properties文件,只要找到其中一个就会加载该配置文件内容. 2.手动加载 如果将log4j.properties(或log4j.xml)放到其它目录下,比如下图中的位置,应用程序就不能自动加载log4j的配置文件了,因为应用程序找不到该配置文件,你需要手动加载. 需要在应用程序启动的代码中加入如下的代码: //加载config文件夹下的log

006 引入外部配置文件

一 .概述 在前面,我们的配置属性都放在了springboot为我们提供了默认配置文件之中.有的时候,我们可能需要将这些配置信息分散到不同的地方,尤其是那些我们自定的属性. springboot为我们提供了另外的两个注解,帮助我们实现外部配置文件的注入. 二 . @PropertySource注解 该注解的核心作用就是加载指定的配置文件. 看下面的例子: 我们创建了一个trek.properties的文件,其中的内容为: user.name=trek user.age=123. 我们编写配置类进

java中开源日志记录工具log4j

日志:除了能记录异常信息,还可以记录程序正常运行时的关键信息. 使用log4j来进行日志文件记录经典步骤: 001.在项目中创建一个lib文件夹,然后将下载好的jar包copy到该文件夹下 002.对已经copy过来的jar包,点击右键,然后执行下图操作, 项目中就会多出一个引入外部Library的项目 003.在src目录下创建一个名称为log4j.properties文件 004.编写,粘贴已经写好的配置文件内容,编码方式可以做下修正.对配置文件点击右键→属性→other→utf-8,然后应

log4j - 配置文件

Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息. 通过配置,可以创建出Log4J的运行环境. 1. 配置文件  Log4J配置文件的基本格式如下: 代码如下: 1 #配置根Logger 2 3 log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , … 4 5 #配置日志信息输出目的地Appender 6 7 log