grails - 无法使用 Grails 外部属性文件配置 log4j

标签 grails log4j grails-2.0

如何使用 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 日志记录时发生异常:没有这样的属性:类的委托(delegate):java.lang.String

谢谢

最佳答案

我注意到你有:

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



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

配置.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')
        )
   }
}

另外在旁注中,我看到您将您的属性(property)保留在 下。 .grails 目录,我个人不会那样做。如果您想将其保留在您的应用程序中,您可以创建 应用程序/grails-app/cfg/目录和访问文件看起来像这样:
 production {
                appName = "application"
                 //Make sure logDirectory is defined in your properties file
                grails.config.locations = ["file:../cfg/${appName}-config.properties"]
            }

关于grails - 无法使用 Grails 外部属性文件配置 log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30056310/

相关文章:

grails - grails分页设置页数限制

grails - Grails和Tomcat重复 “java.lang.IllegalStateException: Cannot forward after response has been committed”错误

json - 从JSON到映射的正确转换是什么?

java - 如何在 glassfish 中使用 log4j

json - grails.converters.JSON 除了少数属性

java - 使用log4j创建多个日志实例以在不同位置输出日志文件

java - 如何处理log4j的远程监控?

grails - Grails-将Joda日期呈现为JSON时发生异常

database - grails:从 Controller 在数据库中创建条目

mongodb - Grails Quartz MongoDB 连接不断打开