我想在Grails中使用Logback
作为我的日志框架。因此,我将所有内容都设置为可以工作,但我的实现在配置文件本身上失败了。原因是,正如我所猜测的,在Groovy脚本的范围内的某个地方,但我无法弄清楚。。。
如果我在没有任何标识符的情况下定义我的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_DIR
和BACKUP_DIR
都无法访问:
13:33:32,036 |-ERROR in ch.qos.logback.classic.gaffer.AppenderDelegate@6fd00b - Appender [F_MAIN] of type [ch.qos.logback.core.rolling.RollingFileAppender] has no appplicable [LOG_DIR] property
13:33:32,068 |-ERROR in ch.qos.logback.classic.gaffer.ComponentDelegate@788ac3 - 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
}
}
我在这里做错了什么?
天哪!经过搜索和大量的尝试/错误,我找到了解决方案,它非常接近,现在看起来很明显:我必须用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重新扫描这个文件时创建的。。。