在Mule中动态选择log4j2配置

在Mule中动态选择log4j2配置,mule,log4j2,Mule,Log4j2,我已经阅读了Mule文档,但不清楚如何为每个环境动态加载不同的日志配置文件。基本上,我希望在不同的环境中控制日志详细性和同步/异步功能,以便寻找基于服务器环境属性变量动态选择属性文件的类似功能。我还没有尝试过,但您应该能够在启动Mule时在命令行上设置log4j配置文件,使用log4j.configuration系统属性 例如(在Windows中),如果您的环境变量被称为MULE-ENV,则添加-Dlog4j.configuration=c:\some path\log4j-%MULE-ENV%

我已经阅读了Mule文档,但不清楚如何为每个环境动态加载不同的日志配置文件。基本上,我希望在不同的环境中控制日志详细性和同步/异步功能,以便寻找基于服务器环境属性变量动态选择属性文件的类似功能。

我还没有尝试过,但您应该能够在启动Mule时在命令行上设置log4j配置文件,使用
log4j.configuration
系统属性

例如(在Windows中),如果您的环境变量被称为
MULE-ENV
,则添加
-Dlog4j.configuration=c:\some path\log4j-%MULE-ENV%.xml


请注意,如果使用Mule standalone(在这种情况下,我认为您需要
-M-Dlog4j.configuration=…
),可以在
wrapper.conf
文件中直接在命令行上设置,或者在Studio中运行时,在Run configuration(运行配置)中Arguments(参数)选项卡的VM params(虚拟机参数)部分。

您的应用程序中可以有一个bean,它可以调用该方法来设置配置。您可以将环境名称作为参数传递给这个bean,它将选择与该环境关联的配置文件。您可以使用invoke组件调用该方法,并在启动时执行该流。
在执行流之前,可以使用默认的日志记录配置。

2种方法可以从
外部路径或
应用程序类路径
在应用程序中动态加载log4j2文件:-

  • 在应用程序的
    mule deploy.properties
    中设置log4j2文件路径,如:-

    log.configFile=E:\common-log4j2.xml

  • 通过Spring重新配置日志管理器,以编程方式在应用程序中加载log4j2.xml,并从定义的路径加载我们自己的
    log4j2.xml
    文件:- 参考:-


  • 这将是在服务器级别,而我正在寻找应用程序级别的控制。Mule中是否有“在启动时执行此流”的内容?log.configFile用于指定自定义日志配置,但无法基于环境动态加载,因为无法在另一个属性文件中设置env属性(mule deploy.properties)。唯一的方法似乎是#2选项,其中可以在spring配置中使用env属性来加载特定于环境的log4j配置,例如log4j2-{env}.xml。接受这一正确答案。