首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Grails中登录:使用Log4j2重新加载外部配置

在Grails中登录:使用Log4j2重新加载外部配置
EN

Stack Overflow用户
提问于 2019-04-08 18:25:56
回答 2查看 289关注 0票数 0

我正在尝试配置Grails,以便使用分离生产和开发模式的外部Log4j2配置文件。它应该监听配置更改,并在一段时间后刷新它。对于Grails 2.x,这可以通过注册Log4jConfigurer bean来完成,如下所示:

代码语言:javascript
复制
switch (Environment.current) {
   case Environment.PRODUCTION:
      log4jConfigurer(MethodInvokingFactoryBean) {
         targetClass = "org.springframework.util.Log4jConfigurer"
         targetMethod = "initLogging"
         arguments = ["classpath:ogc-log4j.xml", 30000]
      } 

   case Environment.DEVELOPMENT:
     log4jConfigurer(MethodInvokingFactoryBean) {
        targetClass = "org.springframework.util.Log4jConfigurer"
        targetMethod = "initLogging"
        arguments = ["classpath:log4j-dev.xml", 30000]
     }
}

由于某些原因,这种方法在Grails 3.x中不起作用。我如何在Grails 3.3.3或Spring Boot中做到这一点(我猜它应该可以工作,因为Grails 3.x是基于Spring Boot的)?

EN

回答 2

Stack Overflow用户

发布于 2019-04-18 20:58:30

从grails的3.3.3版本

而不是在Java代码中使用它。环境配置已移至YML配置文件。

我们可以将不同的值传递给不同的环境,并更改log4j的配置

请参阅文档

documentaion for Enviroment configuration

票数 1
EN

Stack Overflow用户

发布于 2019-04-21 22:34:15

我认为我们可以通过不同的方法来实现预期的需求。据我所知,在Grails 3中外部化Log4j2配置文件,我们可以使用LogerContextSystem.setProperty。后者可以按照post中的说明完成。我的建议,以及这个问题的演示,是使用LogerContext,如Log4j2 manualLogging Separation部分所述。

代码语言:javascript
复制
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.core.LoggerContext

class BootStrap {

    def init = { servletContext ->
        LoggerContext context = (LoggerContext) LogManager.getContext(false)

        String userHome =  System.getProperty("user.home")
        String pathname = ""
        if (grails.util.Environment.isDevelopmentMode()) {
            pathname = userHome + "/.myConfigurations/log4j2-dev.xml"
        } else {
            pathname = userHome + "/.myConfigurations/log4j2-prod.xml"
        }
        File file = new File(pathname)
        // this will force a reconfiguration
        context.setConfigLocation(file.toURI())
    }
}

请看一下上传到Bitbucket的my project。在这个项目中,我尝试在启动应用程序后记录一条消息。在Application.groovy中调用了log.info。在grails 3.3.9中启动应用程序,您必须运行run-app来测试开发,或者运行prod run-app来测试生产模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55571280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档