欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring boot 日志配置文件 获取application.yml 配置

程序员文章站 2022-04-30 15:50:41
...

logback

新建logback-spring.xml

    <springProperty scope="context" name="application" source="spring.application.name"/>
    <springProperty scope="context" name="project" source="dynamic.base.package"/>

source 表示的是application.yml 里面的配置key

log4j2

没有找到直接配置,只能对spring 初始化监听器的自定义实现,然后利用mdc设置参数,供日志配置文件调用

package com.nfsq.terminal.config.listener;

import org.slf4j.MDC;
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySource;

/**
 * 自定义spring boot 监听器为log4j2 获取自定义上下文
 * 必须实现Ordered,启动顺序可以提到创建日志文件之前
 * 
 * 
 * 
 * <p>
 * ApplicationStartingEvent:           spring boot启动开始时执行的事件
 * <p>
 * ApplicationEnvironmentPreparedEvent:spring boot 对应Enviroment已经准备完毕,但此时上下文context还没有创建
 * <p>
 * ApplicationPreparedEvent:            spring boot上下文context创建完成,但此时spring中的bean是没有完全加载完成的
 * <p>
 * ApplicationFailedEvent:              spring boot启动异常时执行事件
 *
 * 
 * @author ckli01
 * @date 2018/5/10
 */
public class MyApplicationStartedEventListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered {


    @Override
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {

        ConfigurableEnvironment configurableEnvironment = event.getEnvironment();

        MutablePropertySources mutablePropertySources = configurableEnvironment.getPropertySources();

        PropertySource<?> propertySource = mutablePropertySources.get("applicationConfigurationProperties");

        if (propertySource != null && propertySource.containsProperty("logging.runtime.root")) {

            String rootDir = (String) propertySource.getProperty("root.dir");


            String runTimeCountPath = ((String) propertySource.getProperty("logging.runtime.root")).replace("${root.dir}", rootDir);
            System.out.println("*******************************");
            System.out.println(runTimeCountPath);
            System.out.println("*******************************");
            MDC.put("runTimeCountPath", runTimeCountPath);

        }


    }

    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE + 10;
    }
}

然后在启动类中调用:

package com.nfsq.terminal;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import com.nfsq.terminal.config.listener.ApplicationStartedEventListener;
import com.nfsq.terminal.config.listener.MyApplicationStartedEventListener;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubboConfiguration
public class EndeavourApplication {

    public static void main(String[] args) {

        SpringApplication app = new SpringApplication(EndeavourApplication.class);
        app.addListeners(new MyApplicationStartedEventListener());
      //app.addListeners(new ApplicationStartedEventListener());
        app.run(args);
    }
}

log4j2.yml 调用添加ctx

#    AOP监控:统计运行时间
      - name: runTimeCount
        ignoreExceptions: false
        fileName: ${ctx:runTimeCountPath}/endeavour_runTimeCount.log
        filePattern: "${ctx:runTimeCountPath}/endeavour_runTimeCount.log.%d{yyyy-MM-dd}"
        PatternLayout:
          pattern: "%date %-5level [%f:%l] %msg%n%ex"
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分类
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 文件最多100个
          max: 100