1

LogbackGrails 内のロギング フレームワークとして使用したいと考えています。したがって、機能するようにすべてを設定しましたが、構成ファイル自体で実装が失敗します。その理由は、私が推測するように、Groovy Script の範囲内のどこかですが、私はそれを理解することができません...

後で使用する識別子なしでプロパティを定義すると、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
  }
}

LOG_DIRLogback から次のエラー メッセージが表示されます。これは、 と の両方に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
  }
}

ここで何が間違っていますか?

4

1 に答える 1

3

オーマイ!検索と多くの試行錯誤の後、私は解決策を見つけました。それは非常に近く、今では間違いなく明らかです。両方の変数を で宣言する必要があった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がこのファイルを再スキャンしているときに作成される一時ログファイルを宣言したい場合でも...

于 2013-02-25T14:11:04.433 に答える