質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Logback

Logbackは、Javaのログ生成ライブラリです。同じログ生成ライブラリであるlog4jの後継プロジェクトであり、log4jと同様にSLF4Jというインターフェースを実装しています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

11200閲覧

[SpringBoot]Logbackのログレベルを調整したい。

k499778

総合スコア599

Logback

Logbackは、Javaのログ生成ライブラリです。同じログ生成ライブラリであるlog4jの後継プロジェクトであり、log4jと同様にSLF4Jというインターフェースを実装しています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2018/11/09 09:55

編集2018/11/11 23:53

現在SpringBoot、ログはLogbackでアプリケーションを作っているのですが、
ログのレベルをWARNにした状態で、一部のログだけ出力したいです。

Java

1LOG.info("XXXXXXXXXX");

のようにして今ログを明示的に出しているところがありますが、
ログがモニタリングしづらいためWARNレベルにlogback.xmlは設定しています。

以下のリンクを参考にし、
https://qiita.com/tag1216/items/5c7271f5a90b7ab258b2

yml

1spring.main: 2 show-banner: false 3 log-startup-info: false 4logging.level: 5 org.springframework: WARN

も試しましたが、
log-startup-infoがプロパティとして存在せず、またドキュメントを確認しても対応できるものがありそうにありません。
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

なにかWARNレベルにしたままで、一部のログのみINFOレベル(またはERROR,WARNでないなにか)で出力する方法はないでしょうか?
もしわかる方がいればお願いいたします。
Markersもtryしましたが、いい方法は見つけられませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

全体のログレベルをWARNレベルにするには下記のようにします。

properties

1#LOGGING 2logging: 3 level: 4 root: warn

それから、たとえば開発しているアプリケーションが出力するログをINFOレベルにしたい場合は、アプリケーションのパッケージ名とログレベルを指定します。

開発しているアプリケーションのパッケージをcom.example.demoとした場合、プロパティの設定は下記のようになります。

properties

1logging: 2 level: 3 root: warn 4 com.example.demo: info

例として、次のようなコントローラクラスの場合、出力されるログはerrorレベル、warnレベル、infoレベルで、debugレベルは出力されません。

java

1package com.example.demo.controller; 2 3@Controller 4@RequestMapping(path = {"/", ""}) 5public class IndexController { 6 private static final Logger log = LoggerFactory.getLogger(IndexController.class); 7 8 @GetMapping 9 public String index(Model model) { 10 log.error("error level log"); 11 log.warn("warn level log"); 12 log.info("info level log"); 13 log.debug("debug level log"); 14 return "index"; 15 } 16 17}

また、show-banner log-startup-infoは、アプリケーションプロパティでは設定できないようなので、下記のようにコードで設定します。

java

1package com.example.demo; 2 3@SpringBootApplication 4public class Application { 5 6 public static void main(String[] args) { 7 new SpringApplicationBuilder(Application.class) 8 .bannerMode(Banner.Mode.OFF) 9 .logStartupInfo(false) 10 .run(args); 11 } 12 13}

2018/11/12 追記

質問文にあるこちらの文章を見落としていました。

ログがモニタリングしづらいためWARNレベルにlogback.xmlは設定しています。

logback.xmlがあるのであれば、application.ymlのログ周りの設定はすべてlogback.xmlに寄せてみてください。(application.ymlのログ周りの設定は一度コメントアウトしてください)

パッケージでログレベルを変えたい場合、たとえばcom.example.demoパッケージをinfoレベルにする場合は下記のようになるとおもいます。
(appender-refのCONSOLEは、標準出力するアペンダーという想定です。)

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<configuration> 3 4 <!-- 省略 --> 5 6 <logger name="com.example.demo" level="info" additivity="false"> 7 <appender-ref ref="CONSOLE"/> 8 </logger> 9 10 <root level="warn"> 11 <appender-ref ref="CONSOLE"/> 12 </root> 13 14</configuration>

コメント欄に書いていただいた次の点ですが、私の方の勘違いでした。

Logbackのロガーというのがわかりません。
logbackの設定はlogback.xmlで行っており、コード上で明示的にlogを表示させている
LOG.info("XXXXXXXXXX");の部分はslf4jを使っているので、slf4jのログを使っていると解釈させていただきました。

下記のようにslf4jのLoggerを使われているということですので、この点は問題ないように思います。

java

1Logger logger = LoggerFactory.getLogger(Main.class);

それと、補足になりますがlogback.xmllogback-spring.xmlとした方がいいようです。
どちらでも間違いではないのですが、Spring Boot 1.3より推奨するファイル名がlogback-spring.xmlだったと思います。

投稿2018/11/09 15:29

編集2018/11/12 12:48
rubytomato

総合スコア1752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2018/11/10 00:34

回答ありがとうございます。 ルートとパッケージのログレベルを分けることで、tomcat起動時や共通のINFOログを抑えたまま、自分のパッケージないの出したいログだけ出せるということですよね new SpringApplicationBuilder(Application.class) .bannerMode(Banner.Mode.OFF) .logStartupInfo(false) .run(args); は試したのですが効きませんでした。 またログレベルに関しても パッケージを指定する方法をしたのですが効きませんでした。 logbackが何か影響してるのか、またどこか漏れているのか。など考えていました。 再度確認はしてみます。
rubytomato

2018/11/10 05:46

プロファイル別にapplication.ymlが存在しているなどないでしょうか? もう少し情報(Java, Spring Bootのバージョン、pom.xml (またはbuild.gradle)の内容など)をご提示頂ければ、まだお答えできることがあるかもしれません。 それと、質問文にある"LOG.info("XXXXXXXXXX");"のLOGの実装コード(定義)はどうなっていますか? Spring Bootの場合はslf4jのロガーを使うことが多いようですが、この質問ではLogbackのロガーを使われているのでしょうか?
k499778

2018/11/11 21:56

返答ありがとうございます。 はい、プロファイル別に存在しています。「application-dev.yml」といったように。その上で共通の設定をしている「application.yml」にログの設定は記載しました。 build.gradleを使っています。
k499778

2018/11/11 21:57

dependencies { // spring boot base compile('org.springframework.boot:spring-boot-starter-web') compile('org.springframework.boot:spring-boot-starter-mail') compile('org.springframework.boot:spring-boot-starter-thymeleaf') compile('org.springframework.boot:spring-boot-starter-actuator') compile('org.springframework.boot:spring-boot-starter-logging') compile('org.springframework.boot:spring-boot-starter-aop') // compile('org.springframework.boot:spring-boot-starter-security') compile('org.springframework.boot:spring-boot-devtools') // compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity4', version: '3.0.2.RELEASE' compile group: 'org.springframework.session', name: 'spring-session', version: '1.3.3.RELEASE' // db compile group: 'org.seasar.doma.boot', name: 'doma-spring-boot-starter', version: '1.1.1' compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.46' compile group: 'org.codehaus.janino', name: 'janino', version: '3.0.8' compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.4' // test testCompile('org.springframework.boot:spring-boot-starter-test') testCompile group: 'org.spockframework', name: 'spock-core', version:'1.1-groovy-2.4' testCompile("org.gebish:geb-spock:2.2") // selenium testCompile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.14.0' testCompile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.14.0' testCompile group: 'org.seleniumhq.selenium', name: 'selenium-firefox-driver', version: '3.14.0' testCompile group: 'org.seleniumhq.selenium', name: 'selenium-support', version: '3.14.0' testCompile group: 'org.seleniumhq.selenium', name: 'selenium-api', version: '3.14.0' testCompile group: 'org.seleniumhq.selenium', name: 'selenium-remote-driver', version: '3.14.0' testCompile group: 'org.seleniumhq.selenium', name: 'selenium-htmlunit-driver', version: '2.52.0' }
k499778

2018/11/11 22:02

springBootVersion = '2.0.4.RELEASE' javaは1.8を使っています。
k499778

2018/11/11 22:04

slf4jのロガーを使っています。 確認してみますが、たしか以下のサイトのように使っていたと思います。 https://qiita.com/opengl-8080/items/49719f2d35171f017aa9 package sample.logback; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Main { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(Main.class); logger.info("Hello Logback!!"); } }
k499778

2018/11/11 22:10

>Spring Bootの場合はslf4jのロガーを使うことが多いようですが、この質問ではLogbackのロガーを使われているのでしょうか? Logbackのロガーというのがわかりません。 logbackの設定はlogback.xmlで行っており、コード上で明示的にlogを表示させているLOG.info("XXXXXXXXXX");の部分はslf4jを使っているので、slf4jのログを使っていると解釈させていただきました。
退会済みユーザー

退会済みユーザー

2018/11/12 00:25

spring-boot のクラスローダーを介さない場合のログレベルは logback.xml(だったかな)作成してね
rubytomato

2018/11/12 12:48

コメントありがとうございます。回答に追記しましたのでご確認ください。
k499778

2018/11/12 16:40

回答ありがとうございました。 logback.xmlに以下のように指定してアプリケーションのログのみINFOレベルで出力することができました。 <logger name="com.example.Processor" level="INFO" /> application.ymlでもFWのログはWARNレベル、アプリケーションのログはINFOレベルで出すことができました。 指定するパッケージをもう一階層深く設定するとINFOレベルで出す部分を限定できました。 たくさんのナレッジをありがとうございました。 参考 https://ja.stackoverflow.com/questions/36851/%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E7%9B%AE%E7%9A%84%E3%81%A7-%E7%89%B9%E5%AE%9A%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A0%E3%81%91%E3%83%AD%E3%82%B0%E3%82%92-trace-%E5%87%BA%E5%8A%9B%E3%81%97%E3%81%9F%E3%81%84
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問