【问题标题】:Unable to configure log4j using Grails external Properties file无法使用 Grails 外部属性文件配置 log4j
【发布时间】:2015-05-05 14:49:55
【问题描述】:

如何使用 Grails 外部属性文件配置 log4j?

在 config.groovy 中:

grails.config.locations = [  
    "classpath:${appName}-config.properties",  
    "classpath:${appName}-config.groovy",  
    "file:${userHome}/.grails/${appName}-config.properties",  
    "file:${userHome}/.grails/${appName}-config.groovy"  
]

在 ${appName}-config.properties 中:

log4j.rootLogger=ERROR, FA  
log4j.appender.FA=org.apache.log4j.FileAppender  
log4j.appender.FA.File=c:/logs/mylog.log  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n  

没有创建输出文件,以下输出到控制台:

log4j:错误警告:配置 log4j 日志记录时发生异常:没有这样的属性:类的委托:java.lang.String

谢谢

【问题讨论】:

    标签: grails log4j grails-2.0


    【解决方案1】:

    我注意到你有:

    "类路径:${appName}-config.properties",
    “类路径:${appName}-config.groovy”,
    "文件:${userHome}/.grails/${appName}-config.properties",
    “文件:${userHome}/.grails/${appName}-config.groovy”

    这可能会导致多余的属性声明,从而导致问题。 我会尝试删除前两个类路径声明的文件并只保留一个属性文件。 我通常按​​环境(例如(DEV、TEST、PROD)分隔我的属性文件,您可能只需要一个 DEV,但您可能希望有一天拥有一个 PROD 环境。此外,您需要确保您的 log4j 配置设置正确并且足够简单,只需稍加调整即可使用 Grails 通过 create-app 命令提供的功能。

    Config.groovy:

     environments {
            development {
               appName = "application"
               logDirectory = "/where/to/keep/local/logs/"
              }
        production {
                appName = "application"
                configDir ="/path/to/prod/app/cfg/"
                 //Make sure logDirectory is defined in your properties file
                grails.config.locations = ["file:${configDir}${appName}-config.properties"]
            }
        }
    
    // log4j configuration
    log4j = {
        println "Log Directory: ${logDirectory}"
        def logPrefix = "applicationName"
    
        appenders {
            console name:'stdout', layout:pattern(conversionPattern: '%c{2} - %X{userName} - %m%n')
    
            appender new DailyRollingFileAppender(
                name: 'stacktrace',
                datePattern: "'.'yyyy-MM-dd",
                fileName: "${logDirectory}/${logPrefix}Stacktrace.log",
                layout: pattern(conversionPattern:'%d [%t] %-5p %c{2} %x - %X{userName} - %m%n')
                )
    
            appender new DailyRollingFileAppender(
                name: 'logAppender',
                datePattern: "'.'yyyy-MM-dd",
                fileName: "${logDirectory}/${logPrefix}.log",
                layout: pattern(conversionPattern:'%d [%t] %-5p %c{2} %x - %X{userName} - %m%n')
            )
    
            appender new DailyRollingFileAppender(
                name: 'DebugLog',
                datePattern: "'.'yyyy-MM-dd",
                fileName: "${logDirectory}/${logPrefix}Debug.log",
                layout: pattern(conversionPattern:'%d{dd MMM yyyy HH:mm:ss} [%X{userName}] %c{2} %m%n')
            )
       }
    }
    

    另外,我看到您将属性保存在 .grails 目录下,我个人不会这样做。如果您想将其保留在您的应用程序中,您可以创建 application/grails-app/cfg/ 目录并访问该文件将如下所示:

     production {
                    appName = "application"
                     //Make sure logDirectory is defined in your properties file
                    grails.config.locations = ["file:../cfg/${appName}-config.properties"]
                }
    

    【讨论】:

    • 如果我使用 ${appName}-config.groovy,log4j 配置工作正常。但是我没有设法使用 ${appName}-config.properties 让它工作 - 同样的错误。我还尝试使用 grails.config.locations 中列出的一个属性文件。我将暂时使用 groovy 配置方法。
    • 只是将文件从 .properties 更改为 .groovy 有效吗?我有一个无法更改的第 3 方配置文件。我该怎么办?
    猜你喜欢
    • 2017-05-27
    • 2014-03-14
    • 2011-07-24
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多