0

たとえば、メッセージを次々に記録する XML ログを生成しようとしています。

<?xml version="1.0" encoding="UTF-8"?>
<log>
   <message>Message 1</message>
   <message>Message 2</message>
   //Next messages to append here
</log>

さまざまなソリューションを見てきましたが、必要に応じて機能するものはないようです。私が最も近いのは、次を使用することです: http://www.vogella.com/tutorials/Logging/article.html

私はそれを自分のニーズに合わせて調整しました。

public String format(LogRecord rec) {
  StringBuffer buf = new StringBuffer(1000);
  buf.append('\n');
  buf.append(formatMessage(rec));
  buf.append('\n')
  return buf.toString() ;
}
public String getHead(Handler h) {
 return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<log>";
}
public String getTail(Handler h) {
  return "</log>";
}

これに関する問題は、私の FileHandler が閉じられるまで getTail が呼び出されないため、閉じられたときにのみ有効になることです。

私はそれを閉じて、次のメッセージのために append = true で FileHandler を再度開いてみましたが、これは (当然のことながら) ログの最後に追加されます。例えば

<?xml version="1.0" encoding="UTF-8"?>
<log>
   <message>Message 1</message>
</log>
<?xml version="1.0" encoding="UTF-8"?>
<log>
   <message>Message 2</message>
</log>

これは本当にシンプルであるべきだと感じます...

4

1 に答える 1

0

[http://logback.qos.ch/][logback] は xml 形式の最新のロギング システムです。エラー、デバッグ、トレース、情報レベルの情報をログに記録できます。毎日記録するファイル名を指定できます。以下に、これらのことをカバーする例を示します。

 <configuration>

  <conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />

  <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/mnt/resource/fe/frontend.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>/mnt/resource/fe/frontend-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
      <pattern>%date - [%level] - %message%xException%n</pattern>
    </encoder>
  </appender>

  <logger name="play" level="INFO" />
  <logger name="application" level="INFO" />

  <root level="ERROR">
    <appender-ref ref="ROLLING" />
  </root>

</configuration>
于 2014-02-28T16:04:50.153 に答える