2017-12-05 1 views
0

Linux上でLogbackを使用してサービスログに書き込むSpring-Bootアプリケーションがあります。ログバックは、ファイル(account-service.log)に書き込み、ファイルを10.5MBで回転させ、最後に8番目の回転でファイルを削除するように設定されています。これがデフォルト設定です。アプリケーションでログバックログを開いたままで、ディスクから削除しないでください

作成した最初のログファイルは、10.5MBのサイズ制限(10.5MBで回転します)を超えて書き込まれています。したがって、ファイルが8番目のファイルになるまでサイズが増加してから、削除されようとします。この時点で、ファイルサイズは84MB(10.5MB * 8)です。 You can see here the file increasing in size

ことの主な問題は、OSが、理由Logbackの、ファイルが、アプリケーション以降を削除しようとまだ開いて、それを維持し、その後、ファイルシステムが削除されたファイルが表示されないということである(コマンドと同じようを見つけますか、 du)、システムは依然としてディスクに割り当てられた領域を保持します。また、ファイルはまだ書き込まれているので、より多くのディスク容量を占めています。私は走ったsudo lsof | grepがこのファイルが完全に削除されていないことを確認するためにを削除しました。

興味深いことに、その最初のファイルが属するグループは、残りのグループとは異なります。最初のファイルはグループルートを持ち、残りのファイルはaccount-serviceの正しいグループ名を持っています。これは、アプリケーションがファイルを閉じることができないが、わからない理由である可能性があります。

Logback依存性は、私の春ブーツポンポンから来ている:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.1.RELEASE</version> 
</parent> 
<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-dependencies</artifactId> 
      <version>Dalston.SR4</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

以降のログファイルが削除されますOKです10.5 MBの制限過去に書き込まれません。

誰もこの問題を見たことがありますか、それを解決する方法が見つかりましたか?

答えて

0

私はほとんどの問題を解決することができましたが、まだ1つの問題が残っています。

主な問題は、ログに組み込みのlogback xml(base.xml)を使用していたことでした。コンソールとファイルロギングの両方を有効にするように設定されていました。

<root level="INFO"> 
    <appender-ref ref="CONSOLE" /> 
    <appender-ref ref="FILE" /> 
</root> 

私はローカルで実行するときだから私は私のログは良いのですが、問題は展開インスタンス上で発生し、私の端末とサービスログファイルに書き込まれます。何が起こったのは、 "CONSOLE"と "FILE"ロガーの両方が、ファイルへの書き込みが最初のファイルが回転した後であっても、まだ書き込まれていた理由です。 "CONSOLE"ロガーは、そのファイルが端末であるという観点から、回転していても最初のファイルに書き込んでいました。これは、私たちが見ていた二重ロギングの問題を修正するのにも役立ちました。

私が修正したのは、独自のlogback xml(logback-spring.xml)を追加して、base.xmlを上書きすることでした。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<include resource="org/springframework/boot/logging/logback/defaults.xml" /> 
<springProfile name="default"> 
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" /> 
    <root level="INFO"> 
     <appender-ref ref="CONSOLE" /> 
    </root> 
</springProfile> 
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/> 
<include resource="org/springframework/boot/logging/logback/file-appender.xml" /> 
<root level="INFO"> 
    <appender-ref ref="FILE" /> 
</root> 

これは展開インスタンス上でコンソールロギングを停止しますので、10.5メガバイトの制限を超えてログインから最初のファイルを保持します。この修正により、経験したディスクスペースの問題も修正されました。

問題は解決できませんでしたが、なぜファイルがアプリケーションによって開かれたままになっていて、ディスクスペースからファイルが完全に削除されないのかが分かりません。

0

このファイルは、正しく表示されないrootユーザーのアクセス許可として記述されています。 ps -efw |を実行してアプリケーションをチェックできますか? grep applicationNameを使用して、アプリケーションにアプリケーションのユーザー権限のみが必要な場合に、そのユーザー権限を確認します。

+0

これは私がそのコマンドから返すものです。 ** ubuntu @ ip-10-227-xx-xx:/ var/account-service $ ps -efw | grepアカウントサービス** 'account + 1725 1 5 00:25? 00:00:38/opt/java/oracle/jdk -jar /var/account-service/account-service-1.0.13-365735-SNAPSHOT.jar --server.tomcat.basedir =/var/account-service/tomcat --spring.profiles.active = int ubuntu 3271 2752 0 00:37 pts/0 00:00:00 grep --color = auto account-service' –

関連する問題