1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コンテナ化したSpringWebアプリケーションのログを永続化する

Posted at

はじめに

前回の記事で、SpringBootWebアプリケーションをコンテナ化しました。

ここで作成したコンテナでは、このままだとアプリケーションログが永続化されないので、コンテナ外に保存し永続化します。

application.propertiesを修正

<project-root>\src\main\resources\application.propertiesにてログ出力先を指定します。

以下を追記します。
/app/logs/application.logにログが出力されるようになります。
※コンテナ内のパスになります

logging.file.name=/app/logs/application.log

デフォルトでは[INFO]レベルのログしか出力しないので[ERROR]以上を出力したいのでさらに以下記述を上記同様にapplication.propertiesに追加します。

logging.level.root=INFO
logging.level.org.springframework=ERROR

さらにスタックトレースも出力してほしいので以下も追記します。

logging.exception-conversion-word=%wEx

ロギングのフォーマットもここで設定可能ですが、今回はスキップします。

コンテナ起動

コンテナ外部のディレクトリをマウントした状態でコンテナを起動します。

docker run -d -p 8080:8080 -v /logs/test-container:/app/logs --name my-app test-container

上記コマンドにより、ホスト側の/logs/test-containerapplication.propertiesにて指定したログの出力先がマウントされます(永続化される)。

確認

$ cat /logs/test-container/application.log
2025-03-10T13:55:07.857Z  INFO 1 --- [backend] [main] com.example.demo.BackendApplication      : Starting BackendApplication v0.0.1-SNAPSHOT using Java 21 with PID 1 (/app/backend-0.0.1-SNAPSHOT.jar started by root in /app)
2025-03-10T13:55:07.863Z  INFO 1 --- [backend] [main] com.example.demo.BackendApplication      : No active profile set, falling back to 1 default profile: "default"
2025-03-10T13:55:09.357Z  INFO 1 --- [backend] [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2025-03-10T13:55:09.358Z  INFO 1 --- [backend] [main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.36]
2025-03-10T13:55:09.399Z  INFO 1 --- [backend] [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2025-03-10T13:55:10.062Z  INFO 1 --- [backend] [main] com.example.demo.BackendApplication      : Started BackendApplication in 3.147 seconds (process running for 4.078)

WARN以上を確認できませんでしたが、問題なく取れました。
デフォルトではorg.springframework.webは404NotFoundなどはWARNレベルに出力しないようです。
以下を設定すれば取れました。

logging.level.org.springframework.web=WARN
2025-03-10T14:12:01.981Z  WARN 1 --- [backend] [http-nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `int` from String "a": not a valid `int` value]

おわりに

やっぱり手を動かしながらだと理解度が桁違いですね

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?