2013-02-25 45 views
1

我想用Logback作为我在Grails中的日志框架。因此我设置了所有工作,但是我的实现在配置文件本身上失败。原因是,因为我想,whithin Groovy脚本的作用域的地方,但我不能弄明白......Groovy脚本 - Logback配置未等待的行为

如果我定义我String性质没有任何标识,我想我得到一个到以后使用警告它可能无法访问。例如:

LOG_DIR = 'c:/temp/myproject/logs/' 
BACKUP_DIR = LOG_DIR + 'backup/' 

appender('F_MAIN', RollingFileAppender) { 
    file = LOG_DIR + 'test.log' 
    rollingPolicy(FixedWindowRollingPolicy) { 
    fileNamePattern = BACKUP_DIR + 'test.%d{yyyy-MM-dd}.%i.log.zip' 
    // .... and so on 
    } 
} 

我从的logback,我敢肯定,以下错误消息表明这两个LOG_DIRBACKUP_DIR无法达成:

13:33:32,036 |-ERROR in [email protected] - Appender [F_MAIN] of type [ch.qos.logback.core.rolling.RollingFileAppender] has no appplicable [LOG_DIR] property 
13:33:32,068 |-ERROR in [email protected] - Component of type [ch.qos.logback.core.rolling.FixedWindowRollingPolicy] has no appplicable [BACKUP_DIR] property 

我也尝试以下方法通过与@Field标签声明这两个变量,但它仍然不能正常工作:

@Field String LOG_DIR = 'c:/temp/myproject/logs/' 
@Field String BACKUP_DIR = LOG_DIR + 'backup/' 

appender('F_MAIN', RollingFileAppender) { 
    file = LOG_DIR + 'test.log' 
    rollingPolicy(FixedWindowRollingPolicy) { 
    fileNamePattern = BACKUP_DIR + 'test.%d{yyyy-MM-dd}.%i.log.zip' 
    // .... and so on 
    } 
} 

我究竟做错了什么?

+0

你使用Grails logback插件还是这是从resources.groovy文件的Spring DSL? – 2013-02-25 13:00:34

+0

@drorb,你可以在这里看到:https://github.com/grails-plugins/grails-logback/issues/3 Grails Logback Plugin无法安装。这既不是来自'resources.groovy'文件的Spring DSL,而只是放置在'grails-app/conf'文件夹中的Groovy脚本('LogbackConfig.groovy'),该文件夹被复制到WAR部署中的定义位置... – herom 2013-02-25 13:20:26

+0

LogbackConfig.groovy将被Grails视为一个配置文件,这意味着您需要的东西将回应'appender'DSL – 2013-02-25 13:42:38

回答

2

哦,我的! 搜索和大量的试验/错误后,我找到了解决方案,它是如此接近,现在肯定似乎很明显:我不得不两个变量与def声明,所以现在他们是在整个脚本可见;)

对于例如,这是工作代码:

def LOG_DIR = 'c:/temp/myproject/logs/' 
def BACKUP_DIR = LOG_DIR + 'backup/' 

appender('F_MAIN', RollingFileAppender) { 
    file = LOG_DIR + 'test.log' 
    rollingPolicy(FixedWindowRollingPolicy) { 
    fileNamePattern = BACKUP_DIR + 'test.%d{yyyy-MM-dd}.%i.log.zip' 
    // .... and so on 
    } 
} 
现在

,我还可以给我的脚本中使用这样的函数:

def createFilename(String directory, String name, boolean isBackupFile) { 
    String filename = '' 
    if(isBackupFile) { 
    filename = "${directory}backup/MyProject-${name}.%d{yyyy-MM-dd}.%i.log.zip" 
    } else { 
    filename = "${directory}MyProject-${name}.log" 
    } 
    return filename 
} 

def fileAppenderLog = createFilename(LOG_DIR, 'output', false) 
def fileAppenderLogBackup = createFilename(LOG_DIR, 'output', true) 

appender('F_MAIN', RollingFileAppender) { 
    file = fileAppenderLog 
    rollingPoliciy(FixedWindowRollingPolicy) { 
    fileNamePattern = fileAppenderLogBackup 
    // .... and so on 
    } 
} 

,这是非常有用的,我觉得:),尤其是当你想申报一堆不同的日志文件,即使你想声明Logback正在重新扫描这个文件时创建的临时日志文件...