2016-03-23 10 views
0

アプリケーションのmaxfileサイズを設定する必要がありますが、現在はDropwizardコアバージョン0.8.4を使用しています。ファイルアペンダーはこの機能をサポートしていません。Dropwizardカスタムロガーはファイルにログをダンプしません

私は最新のdropwizard(私の必要性をサポートしています)バージョンへのアップデートとしてカスタムアペンダーを作成して、今すぐオプションではなく、以下のようにアプローチしました。

private void initLogging(Configuration configuration) throws JoranException { 
    final File logDir = new File("/tmp/enforcer"); 
    final File logFile = new File(logDir, "wallet.log"); 

    final LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); 
    RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<ILoggingEvent>(); 
    rollingFileAppender.setFile(logFile.getAbsolutePath()); 
    rollingFileAppender.setName("com.documents4j.logger.server.file"); 
    rollingFileAppender.setContext(loggerContext); 

    FixedWindowRollingPolicy fixedWindowRollingPolicy = new FixedWindowRollingPolicy(); 
    fixedWindowRollingPolicy.setFileNamePattern(logFile.getAbsolutePath() +"%i.gz"); 
    fixedWindowRollingPolicy.setMaxIndex(7); 
    fixedWindowRollingPolicy.setContext(loggerContext); 
    fixedWindowRollingPolicy.setParent(rollingFileAppender); 
    fixedWindowRollingPolicy.start(); 

    SizeBasedTriggeringPolicy<ILoggingEvent> sizeBasedTriggeringPolicy = new SizeBasedTriggeringPolicy<ILoggingEvent>(); 
    sizeBasedTriggeringPolicy.setMaxFileSize("2KB"); 
    sizeBasedTriggeringPolicy.setContext(loggerContext); 
    sizeBasedTriggeringPolicy.start(); 



    rollingFileAppender.setRollingPolicy(fixedWindowRollingPolicy); 
    rollingFileAppender.setTriggeringPolicy(sizeBasedTriggeringPolicy); 

    rollingFileAppender.start(); 

    System.out.println("Logging: The log is written to " + logFile); 
    final ch.qos.logback.classic.Logger log = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME); 
    log.setLevel(Level.DEBUG); 
    log.addAppender(rollingFileAppender); 
} 


@Override 
public void run(Configuration configuration, Environment environment) throws Exception 
{ 

    initLogging(configuration); 
} 

私のYAMLファイルの設定私は自分のアプリケーションを実行すると

logging: 
    level: INFO 
    org.springframework.retry.support.RetryTemplate: DEBUG 
    appenders: 
    - type: file 
    currentLogFilename: /tmp/enforcer.log 
    threshold: ALL 
    archive: true 
    archivedLogFilenamePattern: /tmp/enforcer-%d.log 
    archivedFileCount: 5 
    timeZone: UTC 
    logFormat: '%-5level [%date{yyyy-MM-dd HH:mm:ss,SSS}] [%X{realdocRequestId}] %logger{15}: %m%n' 

は、今私は、カスタムログファイル(/tmp/enforcer/wallet.log)は、特定のディレクトリに作成されていても、注目されているが、実際のログはダンプされません。つまり、wallet.logファイルのサイズは0 kbです。ここで、yamlで構成されたログファイルが作成され、サイズは一定のkbであり、ログイベントが生成されると増加します。

私は何が間違っているのか理解できません。助けに感謝します。

+1

、役に立てば幸いすべてdropwizardバージョンのサポートカスタムロガー。あなたはそれらを作成し、それらについてDWに伝えるだけです。私はここでそれを行う方法を実演しました:http://stackoverflow.com/questions/27483442/dropwizard-doesnt-log-custom-loggers-to-file/33085996#33085996あなたは工場を上書きする必要はありません。新しいLogger implを作成し、それに正しく注釈を付けてMETA-INFの場所に追加するだけで、DWが見つけて初期化することができます。 – pandaadb

+0

@pandaadbあなたの答えに感謝しますが、私のコードが失敗する理由を知りたいのですが? – RIPAN

答えて

1

ロガーはエンコーダーを設定していないため、何も記録しません。ブレークポイントを次の場所に設定してください:

OutputStreamAppender#start()と、エンコーダがないことがわかります。

は、それはあなたが追加すると動作します:もちろん

 LayoutWrappingEncoder<ILoggingEvent> layoutEncoder = new LayoutWrappingEncoder<>(); 
     DropwizardLayout formatter = new DropwizardLayout(loggerContext, TimeZone.getDefault()); 
     formatter.setPattern("[%level] [%h] %d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z', UTC} [%thread] [%logger] %msg%n"); 
     layoutEncoder.setLayout(formatter); 
     formatter.start(); 
     rollingFileAppender.setEncoder(layoutEncoder); 

をあなたが好き(およびフォーマッタ)どちらのフォーマットを定義することができます。

しかし、これはあなたが達成しようとしているもののかなりハッピーな例であることに留意してください。ロギングを設定するコードに2ポイント(DWと独自のポイント)が追加されました。 yamlには自分のログだけでなくログも設定されています。私は少しの投資をして、あなたが使うことができる適切なAppenderFactoryを追加することをお勧めします。

アルトゥル

+0

ありがとう@pandaadb、それは働いた。 – RIPAN

関連する問題