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ディレクトリを作成するにはどうすればよいですか?
あなたの場合、LOG_PATH
は起動時に定義されていません。代わりに${LOG_PATH:-.}
を使用する必要があります See 。
ただし、logging.path
でapplication.properties
を定義すると、.
および${logging.path}
ディレクトリに2つのログファイルが表示されます。
SpringコンテナーはLOG_PATH
をLogbackの初期化後に設定します...私が知る限り、Logbackは遅延ファイル作成をサポートしていません。この場合、logback-spring.xml
の代わりにlogback.xml
を使用する必要があります。
私は同様の問題に直面し、それを簡単に解決できました。基本的に、コンセプトは、Spring Bootがシステムプロパティ-LOG_PATH
for Spring Bootプロパティ-logging.path
を既に提供しているので、application.propertiesでlogging.path
を定義し、単純にLOG_PATH
を使用することです。ログバック設定-logback-spring.xml
。
<property ...>
に対してlogback LOG_PATH
を宣言するのではなく、いつでも好きなときに使用してください。
下部近くを参照してください こちら
同じ問題が発生しました。独自の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
という空のファイルを作成することです。しかし、私のプロパティの実際のログファイルは作成され、正しく追加されます。
アンドリュー
同じ問題が発生しました。 logback.xmlにエントリを配置します
<property resource="application.properties" />
Application.propertiesで
FILE_LOG_PATTERN=###
LOG_FILE=###
アプリケーションが起動すると、作成されるディレクトリの名前はプロパティファイルで定義したものになります。
あなたの場合ではないかもしれませんが、bootstrap.properties
確認してください logging.path
はそこにのみ定義されています。
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を設定します。
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
で自由に使用できる変数として。
Spring Boot環境が準備される前に、Spring BootメインクラスまたはSpringApplication
がロガーファクトリを初期化し、デフォルトの設定ファイル(logback.groovy
、logback.xml
、logback-test.xml
を検出します)、ただし現時点では、Spring Bootアプリケーションはまだ開始されていません。つまり、変数LOG_PATH
は設定されていません。そのため、最初にログバック設定ファイルの名前を変更し、Spring Boot設定でファイル名をlogging.config
として手動で設定する必要があります。この方法により、ログバックはデフォルトでファイルアペンダーを作成する代わりにコンソールアペンダーを構成し、Spring Boot環境の準備ができたらenviromentreadyイベントを起動し、LoggingApplicationListener
によるログバック再構成を引き起こします。この問題は、springbootのページで見つけることができます https://github.com/spring-projects/spring-boot/issues/2558
以下を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>
エラーファイルが含まれていると思います。変更してください
<include resource="org/springframework/boot/logging/logback/basic.xml" />
に
<include resource="org/springframework/boot/logging/logback/base.xml"/>
試してみてください。
ログバックにエントリを配置します。
<property name="DEV_HOME" value="c:/application_logs/ps-web" />
それを参照してください:
<fileNamePattern>${DEV_HOME}.%d{yyyy-MM-dd}.log</fileNamePattern>
Logback.xmlでプロパティLOG_PATHを宣言します
<property name="LOG_PATH" value="" />
ここで、ログファイルが作成されるディレクトリを指定する必要があります。このフィールドを空のままにすると、logbackはプログラム実行で新しいディレクトリを作成します。作成されるディレクトリの名前はLOG_PATH_IS_UNDEFINEDです
バージョン:1.5.9
bootstrap.yml
spring:
application:
name: awesome-app
# profile:
# active: dev
logging:
path: /code/awesome-app
spring-logback.xml
${LOG_PATH}/awesome-app.log
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
Dev/logディレクトリのみを作成するには、以下を実行します。 log.path
にapplication.properties
を追加しないでください
log.path=dev/logs
にbootstrap.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"/>
.ymlファイルの外部パスからログバックを呼び出すには、次のように機能しました。
ロギング:config:C:/folder/logback.xml
私も同様の問題を抱えていました。 logback-spring.xmlの名前をlogback-whatever.xmlに変更して解決し、以下のapplication.propertiesに追加しました。
logging.config = classpath:logback-whatever.xml
また、この問題は、次のようなロギングの目的でユーザー定義のプロパティを使用する場合に発生します。
log.path = logs log.archive.path = archived