77509


SpringBootのLogbackでログを出力しており、固定の文字列（例：spring）をログファイル名に含めることはできています（例：
spring_XXX.log）。

例えば、ログ出力を実行するJavaプログラムが ABC.java の時はログファイル名を ABC_XXX.log、DEF.java の時はログファイル名を
DEF_XXX.log のようにしたいです。  
ご教示よろしくお願いします。


CC BY-SA 4.0
2021-06-11T10:55:37.380
77488
2021-06-12T11:56:41.437
2021-06-11T11:14:11.573
3060
29699
question
java spring-boot
SpringBootのLogbackで出力するログファイル名を、呼び出し元のプログラム名に応じて動的に変更したい


クラス名は取得できないので別のもの(以下の例ではロガー名)で代替する必要がありますが、[`SiftingAppender`](http://logback.qos.ch/manual/appenders_ja.html#SiftingAppender)
が利用可能かと思います。

[code]

    package com.example.jaso77488;
    
    import ch.qos.logback.classic.spi.ILoggingEvent;
    import ch.qos.logback.core.sift.AbstractDiscriminator;
    
    public class MyDiscriminator extends AbstractDiscriminator<ILoggingEvent> {
    
        @Override
        public String getDiscriminatingValue(final ILoggingEvent e) {
    
            // ファイル名として利用可能な文字チェックが必要
            final String name = e.getLoggerName().replaceAll("[/\\\\]", "_");
            return name;
        }
    
        @Override
        public String getKey() {
            return "name";
        }
    
    }
    
[/code]

`logback-spring.xml`:

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration>
    
    <!-- http://logback.qos.ch/manual/appenders_ja.html#SiftingAppender -->
    <!-- http://logback.qos.ch/manual/loggingSeparation_ja.html -->
    <configuration>
        <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
            <discriminator class="com.example.jaso77488.MyDiscriminator" />
            <sift>
                <appender name="FILE-${name}" class="ch.qos.logback.core.FileAppender">
                    <file>logs/log-${name}.log</file>
                    <append>false</append>
                    <layout class="ch.qos.logback.classic.PatternLayout">
                        <pattern>%d [%thread] %level %logger{35} - %msg%n</pattern>
                    </layout>
                </appender>
            </sift>
        </appender>
    
        <root level="DEBUG">
            <appender-ref ref="SIFT" />
        </root>
    </configuration>
    
[/code]

[実装サンプル](https://github.com/yukihane/stackoverflow-qa/tree/master/jaso77488)


CC BY-SA 4.0
2021-06-12T11:56:41.437
77509
2021-06-12T11:56:41.437
2808
77488
answer