web-dev-qa-db-ja.com

LOG_PATH_IS_UNDEFINEDフォルダーを作成するLogBackを使用したSpring Boot

LogBootでSpringBootを使用し、ymlファイルで以下の構成を使用しています。

logging:
    path: C:/var/log/pincode

Logging.path Spring環境変数はLOG_PATH環境変数に転送され、ログファイルは適切な場所に配置されますが、プロジェクトのルートディレクトリにLOG_PATH_IS_UNDEFINEDというディレクトリも作成されます。

これは、環境変数でLogBackを構成するためにSpringBootが使用するさまざまなフェーズが原因であると思われます。

17:29:21,325 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:29:21,337 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern LOG_PATH_IS_UNDEFINED/catalina.out.%d{yyyy-MM-dd} for the active file
17:29:21,340 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'LOG_PATH_IS_UNDEFINED/catalina.out.%d{yyyy-MM-dd}'.
17:29:21,340 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
17:29:21,343 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Mon Aug 11 17:24:07 BRT 2014
17:29:21,346 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - Active log file name: LOG_PATH_IS_UNDEFINED/catalina.out
17:29:21,346 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - File property is set to [LOG_PATH_IS_UNDEFINED/catalina.out]
...
17:29:21,358 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

そしてその後、再びログバックの設定を開始しますが、今回は設定したパスを使用します:

17:29:21,672 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:29:21,673 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
17:29:21,673 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern C:/var/log/pincode//catalina.out.%d{yyyy-MM-dd} for the active file
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'C:/var/log/pincode//catalina.out.%d{yyyy-MM-dd}'.
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Mon Aug 11 17:29:21 BRT 2014
17:29:21,674 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - Active log file name: C:/var/log/pincode//catalina.out
17:29:21,674 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - File property is set to [C:/var/log/pincode//catalina.out]
...
17:29:21,685 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

私のlogback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<include resource="org/springframework/boot/logging/logback/basic.xml" />
<property name="FILE_LOG_PATTERN"
    value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%t] --- %-40.40logger{39} : %m%n%wex" />

<appender name="serverConsole"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <Append>true</Append>
    <File>${LOG_PATH}/catalina.out</File>
    <encoder>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/catalina.out.%d{yyyy-MM-dd}
        </fileNamePattern>
        <maxHistory>15</maxHistory>
    </rollingPolicy>
</appender>

<!-- Plain Text Rolling Appender -->
<appender name="server"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <Append>true</Append>
    <File>${LOG_PATH}/pincode.log</File>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/pincode.log.%d{yyyy-MM-dd}
        </fileNamePattern>
        <maxHistory>15</maxHistory>
    </rollingPolicy>
</appender>

<!-- Plain Text Rolling Appender -->
<appender name="server-error"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <Append>true</Append>
    <File>${LOG_PATH}/pincode-error.log</File>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/pincode-error.log.%d{yyyy-MM-dd}
        </fileNamePattern>
        <maxHistory>15</maxHistory>
    </rollingPolicy>
</appender>

<logger name="com.app" level="INFO">
    <appender-ref ref="server" />
    <appender-ref ref="server-error" />
</logger>

<root level="INFO">
    <appender-ref ref="serverConsole" />
</root> 

プロジェクトからlogback.xmlファイルを削除してもフォルダーは作成されないため、Springはymlを解析する前にxmlをロードしていますか?

Logbackを回避してこのLOG_PATH_IS_UNDEFINEDディレクトリを作成するにはどうすればよいですか?

19
Davi Alves

あなたの場合、LOG_PATHは起動時に定義されていません。代わりに${LOG_PATH:-.}を使用する必要があります See

ただし、logging.pathapplication.propertiesを定義すると、.および${logging.path}ディレクトリに2つのログファイルが表示されます。

SpringコンテナーはLOG_PATHをLogbackの初期化後に設定します...私が知る限り、Logbackは遅延ファイル作成をサポートしていません。この場合、logback-spring.xmlの代わりにlogback.xmlを使用する必要があります。

13
Igor Tytar

私は同様の問題に直面し、それを簡単に解決できました。基本的に、コンセプトは、Spring Bootがシステムプロパティ-LOG_PATH for Spring Bootプロパティ-logging.pathを既に提供しているので、application.propertiesでlogging.pathを定義し、単純にLOG_PATHを使用することです。ログバック設定-logback-spring.xml

<property ...>に対してlogback LOG_PATHを宣言するのではなく、いつでも好きなときに使用してください。

下部近くを参照してください こちら

4
Sabir Khan

同じ問題が発生しました。独自のlogback.xmlを定義しようとしましたが、application.propertiesファイルで定義されているlogging.pathおよびlogging.fileプロパティの使用に問題がありました。問題を解決した(および回避した)方法は次のとおりです。

最初に、logging.pathプロパティとlogging.fileプロパティの両方を定義できないことを学びました。複数のファイルを複数日にわたって生成するRollingFileAppenderを使用しているため、logging.fileを定義しますが、ファイルプレフィックスのように使用します。

application.properties

# Don't add the file type at the end.  This will be added in logback.xml
logging.file=logs/my-app-name

Src/main/resources/logback.xml

<configuration>

    <property name="FILE_LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder> 
          <Pattern>${FILE_LOG_PATTERN}</Pattern>
        </encoder> 
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder> 
          <Pattern>${FILE_LOG_PATTERN}</Pattern>
        </encoder> 
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

これはほとんどの部分で機能するようです。ファイルで独自のFILE_LOG_PATTERNを定義しましたが、これはオプションだと思います。興味深い部分はfileNamePatternです。 logging.fileをapplication.propertiesファイルから変数LOG_FILEに正しく変換します。ここで唯一の本当のさは、起動時にLogbackがログファイルが未定義であることを訴え、現在のディレクトリにLOG_FILE_IS_UNDEFINED_XXXという空のファイルを作成することです。しかし、私のプロパティの実際のログファイルは作成され、正しく追加されます。

アンドリュー

2
anschoewe

同じ問題が発生しました。 logback.xmlにエントリを配置します

<property resource="application.properties" />

Application.propertiesで

FILE_LOG_PATTERN=###
LOG_FILE=###

アプリケーションが起動すると、作成されるディレクトリの名前はプロパティファイルで定義したものになります。

2
Chaucer

あなたの場合ではないかもしれませんが、bootstrap.properties 確認してください logging.pathはそこにのみ定義されています。

1
prettyvoid

Application.propertiesでlogging.pathおよびlogging.fileを構成したのと同じ問題がありましたが、Spring Boot LogBack構成の前にいくつかのログが生成されたため、LOG_PATH_IS_UNDEFINED/LOG_FILE_IS_UNDEFINEDファイルに書き込まれ、ログは正しい場所に切り替わりました。

私は2つの可能な解決策を見つけました:

1)bootstrapの設定が前に行われるため、bootstrap.propertiesのlogging.pathおよびlogging.fileを設定します

または

2)アプリケーションの起動時に、-Dlogging.path = ... -Dlogging.file = ...を使用してシステムプロパティとしてlogging.pathおよびlogging.fileを設定します。

1
Massimo Da Ros

spring Boot Finchley(2.x)を使用している場合は、spring.application.nameあなたのapplication.propertiesまたはapplication.ymlファイルを作成し、Logback構成に以下を追加します。

<configuration>
  <springProperty scope="context" name="springAppName" source="spring.application.name"/>
</configuration>

これで${springAppName}は、ログpatternで自由に使用できる変数として。

1
Dexter Legaspi

Spring Boot環境が準備される前に、Spring BootメインクラスまたはSpringApplicationがロガーファクトリを初期化し、デフォルトの設定ファイル(logback.groovylogback.xmllogback-test.xmlを検出します)、ただし現時点では、Spring Bootアプリケーションはまだ開始されていません。つまり、変数LOG_PATHは設定されていません。そのため、最初にログバック設定ファイルの名前を変更し、Spring Boot設定でファイル名をlogging.configとして手動で設定する必要があります。この方法により、ログバックはデフォルトでファイルアペンダーを作成する代わりにコンソールアペンダーを構成し、Spring Boot環境の準備ができたらenviromentreadyイベントを起動し、LoggingApplicationListenerによるログバック再構成を引き起こします。この問題は、springbootのページで見つけることができます https://github.com/spring-projects/spring-boot/issues/2558

1
Johnson

以下をPOMファイルに追加してみてください

<plugin>
            <artifactId>maven-clean-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <filesets>
                    <fileset>
                        <directory>${basedir}/catalina.base_IS_UNDEFINED</directory>
                        <includes>
                            <include>**/*.log</include>
                        </includes>
                        <followSymlinks>false</followSymlinks>
                    </fileset>
                </filesets>
            </configuration>
        </plugin>
0
Maro

エラーファイルが含まれていると思います。変更してください

<include resource="org/springframework/boot/logging/logback/basic.xml" />

<include resource="org/springframework/boot/logging/logback/base.xml"/>

試してみてください。

0
Solar

ログバックにエントリを配置します。

<property name="DEV_HOME" value="c:/application_logs/ps-web" />

それを参照してください:

<fileNamePattern>${DEV_HOME}.%d{yyyy-MM-dd}.log</fileNamePattern>

0
dsfere

Logback.xmlでプロパティLOG_PATHを宣言します

<property name="LOG_PATH" value="" />

ここで、ログファイルが作成されるディレクトリを指定する必要があります。このフィールドを空のままにすると、logbackはプログラム実行で新しいディレクトリを作成します。作成されるディレクトリの名前はLOG_PATH_IS_UNDEFINEDです

0
Dheeraj Arora

バージョン:1.5.9

  1. springcloud:

bootstrap.yml

spring:
  application:
    name: awesome-app
# profile:
#   active: dev
logging:
  path: /code/awesome-app

spring-logback.xml

${LOG_PATH}/awesome-app.log
  1. springboot:

application.yml

spring:
  application:
    name: awesome-app
# profile:
#   active: dev
logging:
  path: /code/awesome-app

spring-logback.xml

${LOG_PATH}/awesome-app.log

custom-log-configuration: https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/htmlsingle/#boot-features-custom-log-configuration

0
Zed

Dev/logディレクトリのみを作成するには、以下を実行します。 log.pathapplication.propertiesを追加しないでください

log.path=dev/logsbootstrap.propertiesを追加します。

Logback-spring.xmlに以下の行を追加します。

<springProperty scope="context" name="LOG_PATH" source="log.path"/>
<property name="LOG_FILE" value="${LOG_PATH}/app/current"/>

以下の行のみを含めるようにしてください。

<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

以下の行を使用しないでください。そうしないと、コンソールログは無効にならず、spring.logファイルが一時ディレクトリに作成されます(application.propertiesにlogging.pathを指定しない場合)。詳細については、以下のファイルのコードを確認してください。

 <include resource="org/springframework/boot/logging/logback/base.xml"/>
0
Ravi Gupta

.ymlファイルの外部パスからログバックを呼び出すには、次のように機能しました。

ロギング:config:C:/folder/logback.xml

0
bernardo

私も同様の問題を抱えていました。 logback-spring.xmlの名前をlogback-whatever.xmlに変更して解決し、以下のapplication.propertiesに追加しました。

logging.config = classpath:logback-whatever.xml

また、この問題は、次のようなロギングの目的でユーザー定義のプロパティを使用する場合に発生します。

log.path = logs log.archive.path = archived

0
khush