67346


  * [java - logback show logs with line number - Stack Overflow](https://stackoverflow.com/questions/23123934/logback-show-logs-with-line-number)
  * [Logback 使い方メモ - Qiita](https://qiita.com/opengl-8080/items/49719f2d35171f017aa9)
  * [Best practices for loggers - Kotlin Discussions](https://discuss.kotlinlang.org/t/best-practices-for-loggers/226/15)

上記を参考に下記の `logback.xml` を作りました。  
本当は用意してないデフォルトの出力でもそこまで不満がなかったのですが、行番号を表示させたいので作成しました。

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE logback>
    <configuration>
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
          <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M\(%line\) - %msg%n</pattern>
        </encoder>
      </appender>
    
      <root>
        <appender-ref ref="STDOUT" />
      </root>
    </configuration>
    
[/code]

すると

[code]

    [THYMELEAF]         * #numbers
    [THYMELEAF]         * #objects
    [THYMELEAF]         * #strings
    [THYMELEAF]         * #arrays
    [THYMELEAF]         * #lists
    [THYMELEAF]         * #sets
    
[/code]

このように今まで出ていなかったthymeleafに関するログまで出力されるようになりました。  
まったくもって勘ですが、いままでINFOレベルくらいまでのログまでしか出ていなかったのが、DEBUGレベルまで出力されるようになったのではないかと考えています（もしかしたらDEBUGレベル+αのイキオイ）。

どのようにすれば、自分のログとSpring Bootのログレベル（？）を切り離せますか？  
念の為、コントローラのKotlinファイルを抜粋しておきます。

[code]

    private val logger = LoggerFactory.getLogger(javaClass)
    
    @GetMapping
    fun index(model: Model): String {
        model["title"] = "タイトル"
    
        logger.info("{}", model)
    
        return "foos/index"
    }
    
[/code]


CC BY-SA 4.0
2020-06-04T14:10:59.003
67289
2020-06-06T11:29:32.200
2020-06-04T14:18:04.393
9008
9008
question
spring kotlin spring-boot
logback.xmlを用意するとSpring Bootのログ出力まで影響をうけてしまう


# application.propertiesで簡易的にやる方法

パッケージごと（？）にログレベルを分ける方法を見つけました。  
`logback.xml`でも同様のことができると思いますが、`application.properties`に書いた方がシンプルなので、`application.properties`に下記を記載しました（`logback.xml`は削除しました）。

[code]

    logging.level.root=info
    logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M[L%line] - %msg%n
    logging.level.org.springframework.web=INFO
    logging.level.org.hibernate=ERROR
    
[/code]

* * *

これだと`logging.pattern.console` が全パッケージ(?)に適用されてしまいます。  
自分のパッケージ以外はデフォルトのまま本当は使いたいんですけどね....

# logback.xmlで本格的にやる方法

  * [Configuring Logback with Spring Boot | Lanky Dan Blog](https://lankydan.dev/2019/01/09/configuring-logback-with-spring-boot)
  * [“How-to” Guides](https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-logging)
  * [java - logback: Two appenders, multiple loggers, different levels - Stack Overflow](https://stackoverflow.com/questions/10734025/logback-two-appenders-multiple-loggers-different-levels)

上記サイトが参考になりました。  
Spring
Bootのデフォルト設定のXMLをインクルードし、`logger`で自分用パッケージを指定するなどして下記のように書くとうまくいきました（自分のパッケージ専用のパターンを作れました）。

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>
                    %d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger{36}.%M\(%line\) - %msg%n
                </pattern>
            </encoder>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
        </root>
        <logger name="自分のパッケージ" additivity="false" level="DEBUG">
            <appender-ref ref="STDOUT" />
        </logger>
    </configuration>
    
[/code]


CC BY-SA 4.0
2020-06-06T02:38:10.287
67346
2020-06-06T11:29:32.200
2020-06-06T11:29:32.200
9008
9008
67289
answer