本文介绍了grails中的log4j:在appender配置中使用变量时显示错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在grails 2.3.4中使用slf4jDailyRollingFileAppender。



当我试图使用一个变量作为file参数的一部分时,grails总是当应用程序启动时打印一些错误日志。



但是我的应用程序的日志消息可以按照预期打印到指定的user-event.log中,尽管grails给了我这些错误信息。



以下是我的log4j配置:

  log4j = {
//更改日志模式为默认控制台appender:
appenders {
console name:'stdout',layout:pattern(conversionPattern:'%c {2}%m%n')
appender new DailyRollingFileAppender (
name:userEventLog,
file:$ {event.log.dir} /user-event.log,
layout:pattern(conversionPattern:'%m%n' ),
datePattern:'.yyyy_MM_dd,
threshold:org.apache.log4j.Level.INFO

}

info userEventLog :app.bean.log.UserEventLog
}

event.log。 dir变量的定义如下:

 环境{
development {
// event log dir
event.log.dir =$ {userHome} / workspace / app / logs / event
}
production {
// event log dir
event.log.dir =/ opt / www / app / logs / event
}
}

$ b $ p



在grails控制台中打印的错误消息是: > |错误log4j:错误配置log4j时发生错误:event
|错误log4j:错误配置log4j时丢失的属性:事件

当我替换$ {event.log .dir}变量与一个字符串路径,例如/ home / app /并重新启动grails,错误信息消失。

使用阅读配置属性。我假设它在设置 log4j 时不能读取配置属性本身,因为它是配置本身的一部分。

 导入grails.util.Holders 

...

log4j = {
//更改默认控制台appender的日志模式示例:
appenders {
console name:'stdout',layout:pattern(conversionPattern:'%c {2}% m $ n')
appender new DailyRollingFileAppender(
name:userEventLog,
file:$ {Holders.config.event.log.dir} /user-event.log,
layout:pattern(conversionPattern:'%m%n'),
datePattern:'.yyyy_MM_dd,
threshold:org.apache.log4j.Level.INFO

}

info userEventLog:app.bean.log.UserEventLog
}


I am using slf4j "DailyRollingFileAppender" in grails 2.3.4.

When i tried to use a variable as part of the "file" parameter, the grails always print some error logs when the app starting.

But my app's log messages can printed into the specified "user-event.log" as expected although grails gives me those error messages.

Below is my log4j configuration:

log4j = {
    // Example of changing the log pattern for the default console appender:
    appenders {
        console name: 'stdout', layout: pattern(conversionPattern: '%c{2} %m%n')
        appender new DailyRollingFileAppender(
                name: "userEventLog",
                file: "${event.log.dir}/user-event.log",
                layout: pattern(conversionPattern: '%m%n'),
                datePattern: "'.'yyyy_MM_dd",
                threshold: org.apache.log4j.Level.INFO
        )
    }

    info userEventLog: "app.bean.log.UserEventLog"
}

The "event.log.dir" variable is defined as below :

environments {
    development {
        // event log dir
        event.log.dir = "${userHome}/workspace/app/logs/event"
    }
    production {
        // event log dir
        event.log.dir = "/opt/www/app/logs/event"
    }
}

The error messages printed in grails console when app starting are:

| Error log4j:ERROR Property missing when configuring log4j: event
| Error log4j:ERROR Property missing when configuring log4j: event

when i replace the "${event.log.dir}" variable with a string path, for example "/home/app/" and restart grails, the error messages disappear.

解决方案

Use Holders to read config properties. I assume it will not be able to read the config property itself while setting up log4j as it is part of the config itself.

import grails.util.Holders

...

log4j = {
// Example of changing the log pattern for the default console appender:
    appenders {
        console name: 'stdout', layout: pattern(conversionPattern: '%c{2} %m%n')
        appender new DailyRollingFileAppender(
            name: "userEventLog",
            file: "${Holders.config.event.log.dir}/user-event.log",
            layout: pattern(conversionPattern: '%m%n'),
            datePattern: "'.'yyyy_MM_dd",
            threshold: org.apache.log4j.Level.INFO
        )
    }

    info userEventLog: "app.bean.log.UserEventLog"
}

这篇关于grails中的log4j:在appender配置中使用变量时显示错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-21 12:43