Karaf + OSGI + log4j 实现日志监控

18 篇文章 2 订阅
5 篇文章 0 订阅

通常我们在项目中手动配置log4j,一般是根据log4j的PropertyConfigurator方法,把log4j的配置文件放在项目根目录下,因为配置文件可以容易找到。
但是本人配置外部log4j的原因是:

 在osgi项目中配置log4j文件时,因为是聚合项目,项目打包bundle后不一定可以找到项目根目录下的配置文件
 要在karaf容器中发布,并且需要集成日志监控和elk功能,外部配置的话容易修改路径,移植性比较好

log4j 日志文件

在karaf解压目录中新建文件夹config,在config中新建文件夹logs

  • karaf
    • config
      • logs
      • log4j.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.karaf-log4j=org.apache.log4j.DailyRollingFileAppender
log4j.appender.karaf-log4j.File=config/logs/karaf-log4j.log
log4j.appender.karaf-log4j.DatePattern='.'yyyy-MM-dd
log4j.appender.karaf-log4j.layout=org.apache.log4j.PatternLayout
log4j.appender.karaf-log4j.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c:%L - %m%n

log4j.rootLogger==info,consoleout,karaf-log4j

log4j配置文件中的karaf-log4j.log最终会生成在logs文件夹内部

注意:log4j.rootLogger中的karaf-log4j名字必须和log4j.appender.{name}的name值保持一致

log4j.appender.karaf-log4j.*
log4j.rootLogger==info,consoleout,karaf-log4j

pom 依赖

注意:

必须在插件maven-bundle-plugin中注明Export-Package,不然在其他服务依赖此服务的时候会出现异常,找不到要加载的LoggerFactory类,Export-Package的值就是LoggerFactory的目录

maven项目的打包方式必须是bundle模式,这时候packaging可能会报异常或者错误
解决方法是:在插件maven-bundle-plugin中配置 true

 <packaging>bundle</packaging>

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

<dependency>
  <groupId>org.osgi</groupId>
  <artifactId>org.osgi.core</artifactId>
  <version>6.0.0</version>
  <scope>provided</scope>
</dependency>

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Export-Package>
                            com.common.log
                        </Export-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
</build>

LoggerFactory 加载log4j的配置文件

package com.common.log;

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

import java.io.File;

public class LoggerFactory {
 	//log配置文件相对于容器的相对路径
    public static final String CONFIG_DIR = "config";
    //log配置文件名称
    public static final String LOG4J_CONFIG = "karaf-log4j.properties";
    private static String fileName = getFileName();

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

    private static String getFileName() {
    	//System.getProperty("user.dir") + File.separator 容器的绝对路径
        return System.getProperty("user.dir") + File.separator + CONFIG_DIR
                + File.separator + LOG4J_CONFIG;
    }

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

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值