Я считаю, что мы можем достичь желаемой потребности с помощью различных подходов. Насколько мне известно об экстернализации файла конфигурации Log4j2
в Grails 3, мы можем использовать либо LogerContext
, либо System.setProperty
. Последнее может быть сделано в соответствии с инструкциями в сообщении . Мое предложение, а также демонстрация этого вопроса, состоит в том, чтобы использовать LogerContext
, как описано в Разделение журналов в Log4j2 руководстве .
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. В этом проекте я попытался записать сообщение после запуска приложения. log.info
был назван в Application.groovy
. Запустите приложение в Grails 3.3.9, вам нужно будет запустить run-app
для тестирования разработки или prod run-app
для тестирования производственного режима.