SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

SpringBootだとログの書き出しも楽ちんです。 STS3 +Spring Boot+thymeleaf

SpringBootでのログ出力の基本的なところをやります。 

あれこれ、カスタマイズするのではなく、とりあえずログをファイルに書き出せるようにするところまでを範囲にします。

なお、STS3(3.9.6)+SpringBoot2.0+tymeleaf3.0迄動作確認しています。

f:id:arakan_no_boku:20190222012501j:plain

 

ログ出力を有効にする

 

spring-boot-starter-webを有効にすると、自動的にログも有効になろます。 

spring-boot-starter-loggingが推移的依存で追加されているので、特に組み込みをしなくても良いので助かります。 

ログをだすだけなら、ログ出力をしたいクラスでLogオブジェクトを生成して利用するだけでOKです。 

例としては「Hello3Controller」クラスに設定することを想定します。

Log log = LogFactory.getLog(Hello3Controller.class);

または

static Log log = LogFactory.getLog(Hello3Controller.class);

でオブジェクトを取得します。 

ログの出力は、適切なログレベルのメソッドを選択して行います。 

例えば、INFOレベルなら、log.info("ログ出力");のようにします。

 

利用可能なメソッドを書いておきます。 

 

左側がメッセージのみ、右側がキャッチした例外をログ出力に含めたいときです。

log.fatal(message);/log.fatal(message, Throwable t);
log.error(message);/log.error(message, Throwable t);
log.warn(message);/log.warn(message, Throwable t);
log.info(message);/log.info(message, Throwable t);
log.debug(message);/log.debug(message, Throwable t);
log.trace( message);/log.trace(message, Throwable t); 

デフォルトだと、以下の出力項目が出力されます。

  • 日時:ミリ秒の精度で出力されます。
  • ログレベル:ERROR、WARN、INFO、DEBUG、TRACEです。(log.fatalとlog.errorは両方共ERRORにマッピングされます)
  • プロセスID:プロセスに自動的に付与されたIDです。
  • ---:セパレータです。
  • スレッド名:動作しているスレッドです。
  • ロガー名:クラス名です。
  • ログメッセージ:メッセージ本体です。

 

SpringBootのログ

 

commons.loggingを使っています。 

特定のロギングシステムに依存はしていません。 

デフォルトはLogBackになりますが、Log4j、Log4j2、java.util.loggingに変更もできます。(何か特別なことをするのでない限り、あえて、変更する必要はないですけど・・) 

ただ、デフォルトではログはコンソールのみしか出力されません。 

なので、ファイルに出力できるようにするのと、出力するログレベルの変更などができるように、src/main/resources/application.propertiesに書いておきます。

logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
logging.file=
logging.path=C:/sts/logs

上記のように書くと、C:/sts/logsフォルダに、spring.logというファイル名で出力されます。 

logging.file=my.log
logging.path=

fileとpathの部分をこのようにすると、プロジェクトのルートフォルダ(pom.xmlとかを置いているフォルダ)に、my.logが出力されます。 

ちなみに、logging.fileとlogging.pathの両方に書いて、指定のパスにmy.logを出力させようとしても、意図通りには動きません。 

logging.fileの方が勝ちます。つまり、logging.path= と同じ動作になります。 

あと、ログに出力するメッセージの量を減らしたい場合は、エラーレベルをあげていけばいいと思います。 

特に運用で動かすことを想定するなら、こんな感じの方がよさげです。

logging.level.root=WARN
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR

 いずれにしても、楽ちんではあります。 


 STS+Spring Boot+thymeleaf 関連記事

 

入力画面に関連する記事

画像をSUBMITボタン代わりに使う

ラジオボタンとラジオボタングループを使う 

ラジオボタンとラジオボタングループを使う 

チェックボックスを使う。 

HTMLのタグの閉じ忘れで例外が発生する!

プルダウンリストとマルチセレクトボックスを使う。

今度はテキストエリアで複数行入力する。 

テキストボックスの入力と基本的なチェックを使う。

 

参照画面・画面遷移に関連する記事

参照画面:テーブルを使い、行毎に色分けした一覧表を表示する。 

参照画面:条件に一致した時のみHTML要素を出力する。

セッションを使って画面間で情報を受け渡す 

画面遷移:GET時のリクエストパラメータを受け取る 

日本語しか使わなくても、i18N対応はする意味がある。

 

入力チェックに関連する記事

入力チェック:未入力時に空文字が渡される仕様を回避する。 

入力チェック:@Patternと正規表現で独自チェックする。

入力チェック:アノテーション定義を自分で作る。(再利用版)

入力チェック用アノテーション定義を自分で作る。(独自実装版)

入力チェック:複数項目の相関チェックアノテーションの作り方

 

データアクセス・その他に関連する記事

データアクセス:Jprepositoryを使って簡単にCRUDする。 

データアクセス:ネイティブなSQL文を実行する 

クラスパス内の静的ファイルにアクセスする 

SpringBootプロジェクトでJUNIT4を使った単体テストをする。