如何在log4j2配置中使用Spring Boot application.yml属性?

时间:2019-10-28 13:26:13

标签: spring-boot log4j2

我有一个使用 YAML 格式(即application.yml)进行配置的Spring Boot应用程序。我还使用 Log4J2 (即log4j2-spring.xml)进行记录。

我正在尝试使用application.yml中定义的属性作为log4j配置中的属性替换。

这是我的意思:

application.yml:

service:                
  name: RouteAssessor   
  id: 1     

log4j2-spring.xml:

  <Properties>
    <Property name="serviceName">${sys:service.name}</Property>
    <Property name="serviceId">${sys:service.id}</Property>

    <Property name="logFile">logs/${serviceName}-${serviceId}</Property>
    <Property name="statsFile">metrics/${serviceName}-${serviceId}_stats.json</Property>
  </Properties>

  <Appenders>                                                                             
    <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">                    
      <PatternLayout pattern="${LOG_PATTERN}" />                                          
    </Console>                                                                            

    <RollingFile name="RollingFile" fileName="${logFile}.current-session.log"             
      filePattern="${logFile}.%i.log.gz" ignoreExceptions="false">                        
      <PatternLayout>                                                                     
        <Pattern>${LOG_PATTERN}</Pattern>                                                 
      </PatternLayout>                                                                    
      <Policies>                                                                          
        <OnStartupTriggeringPolicy />                                                     
        <SizeBasedTriggeringPolicy size="10 MB" />                                        
      </Policies>                                                                         
      <DefaultRolloverStrategy max="10" />                                                
    </RollingFile>                                                                        

    <File name="StatsFile" fileName="${statsFile}" append="false">                        
      <PatternLayout>                                                                     
        <Pattern>${STATS_PATTERN}</Pattern>                                               
      </PatternLayout>                                                                    
    </File>                                                                               
  </Appenders>       

我尝试过的所有操作都不会以我需要的方式命名日志文件。它们总是以类似${sys:service.name}-${sys:service.id}.current-session.log的名字结尾。

  1. 我们可以从log4j中访问application.yml属性吗? 配置?
  2. 如果是,怎么办?
  3. 如果没有,那么关于替代方法的最佳实践建议。

谢谢

0 个答案:

没有答案