logback 指定配置文件

本文介绍如何在Karaf环境中,通过配置logback和syslog.xml文件来实现日志系统管理。重点讨论了在特定场景下,如何在虚拟机参数中指定日志配置文件,并解释了Karaf自身日志系统的工作原理。

原本想在karaf 中使用logback 形式的配置文件 结过发现Pax-logger-api X 全部覆盖了 然后就是使用karaf 自身的log4j吧

public class SysLogInitActivator implements BundleActivator
{
    public static final String KARAF_HOME = "karaf_home";
    public static final String CONFIG_FILE = "syslog.xml";
    public static final String logbackPropName = "logback.configurationFile";

    public void start(BundleContext context) throws Exception
    {
        String logConfigPath = System.getProperty(logbackPropName);

        if (logConfigPath == null || "".equals(logConfigPath))
        {
            String _karaf_home = System.getenv(KARAF_HOME);
            
            if (_karaf_home == null || "".equals(_karaf_home))
            {
                throw new IllegalArgumentException(
                    "ERROR: Need Setting Environment Variables karaf_home");
            }else{
                System.out.println("INFO: system environment variables karaf_home is " + _karaf_home);
            }

            File logFile = new File(_karaf_home + File.separatorChar + "etc" + File.separatorChar
                + CONFIG_FILE);
            if (!logFile.exists())
            {
                System.err.println("WARN: not log config file " + logFile.getAbsolutePath()
                    + ", will use default.");
            }
            else
            {
                LoggerContext loggerContext = (LoggerContext) StaticLoggerBinder.getSingleton()
                    .getLoggerFactory();
                loggerContext.reset();
                JoranConfigurator configurator = new JoranConfigurator();
                configurator.setContext(loggerContext);
                configurator.doConfigure(logFile.getAbsoluteFile());
                System.out.println("INFO: use log config " + logFile.getAbsolutePath());
            }
        }
        else
        {
            System.out.println("INFO: use log config " + logConfigPath + " defined in JVM Param");
        }
    }

    public void stop(BundleContext context) throws Exception
    {
        System.out.println("sys log bundle close");
    }

}

用途 

指定加载 环境变量 Karaf 下 etc/syslog.xml 作为默认的日志配置, 如果用户通过虚拟机-logback.configurationFile 指定了配置文件, 那么syslog.xml 将失效


转载于:https://my.oschina.net/u/1156053/blog/196161

### Logback 配置文件加载优先级 Logback配置文件加载遵循特定的优先级顺序,这一过程由 `ch.qos.logback.classic.util.ContextInitializer` 类管理[^3]。当应用程序启动时,Logback 尝试按照以下顺序查找并加载配置文件: 1. **通过系统属性指定配置文件** 如果设置了名为 `logback.configurationFile` 的 Java 系统属性,则会尝试加载此路径下的配置文件。这允许开发者灵活地指向任何位置上的自定义配置文件。 2. **Spring Boot 中通过 application.yml 或者 application.properties 文件中的 logging.config 属性指定logback 配置文件** 在 Spring Boot 应用程序中,可以在 yml 文件里设置具体的 logback 配置文件名及其所在的位置,例如: ```yaml logging: config: classpath:logback-local.xml ``` 3. **默认配置文件按名称匹配** 若上述两种方式均未找到有效的配置文件,则继续寻找位于类路径根目录下具有固定名称的 XML 或 Groovy 脚本形式的日志框架配置文件,具体如下所示: - `logback.groovy` - `logback-test.xml` (测试环境) - `logback.xml` 4. **内置基础配置器 BasicConfigurator** 当以上所有可能的方式都无法定位到合适的外部配置资源时,默认情况下将会调用 `BasicConfigurator` 来创建一个非常简单的控制台记录器(console appender),仅用于基本调试目的[^2]。 这种机制确保即使在最坏的情况下也能提供某种程度的日志功能支持,同时也给予开发人员足够的灵活性来自定义日志行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值