Spring Bootを使用して、ログ出力をファイルに書き込みたい。
ドキュメントによると、これは単に設定することで行われます
logging.file=filename.log
コンソール出力は正常に動作しますが、filename.log
は作成されません。また、ファイルを手動で作成しても、何も書き込まれません。私は何が恋しいですか?
私は解決策を見つけました。 logging.file
プロパティが尊重されない理由が元の質問にまだ答えていないため、私はあまり満足していません。
Georges ' answer からlogback-spring.xml
をapplication.properties
と同じディレクトリに作成しました。 documentation によると、Spring Bootはそこから取得します。どうやら、これは私の場合には起こりません。
Springで取得するためにlogging.config=classpath:logback-spring.xml
を追加する必要があります。 application.properties
の関連部分は現在
logging.config=classpath:logback-spring.xml
logging.file=logs/logfile.log
(logs
ディレクトリを手動で作成しました。)
ここでは、ローカルファイルファイルに出力を書き込む方法を説明します。コンソールロギングを無効にし、出力のみをファイルに書き込むには、カスタムlogback-spring.xml(call logback-spring.xmlが必要です。 console-appender.xmlの代わりにfile-appender.xmlをインポートする(Bootが提供するテンプレート機能(日付のフォーマットなど))を利用します。これを実現するには、以下のコードをlogback-spring.xmlファイルに貼り付ける必要があります。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${Java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
また、application.propertiesに次を追加する必要があります。
logging.file=myapplication.log
このログファイルmyapplication.logは、springbootによって生成されることに注意してください。
これは、私のアプリケーション構造ツリーがどのように見えるかです:
もっと楽しくしたい場合は、次のようにMavenの依存関係でbase.xmlを見つけることができます。
これがあなたに役立つかどうかはわかりませんが、Spring-Boot
プロジェクトと構造は以下のとおりです
ファイル:logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="logback.xsd">
<property resource="\application.properties"/>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${app.logPathPrefix}/myproject.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${app.logPathPrefix}/myproject.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n
</pattern>
</encoder>
</appender>
<logger name="org.springframework" level="INFO" />
<logger name="com.mycompany" level="INFO" />
<logger name="org.hibernate" level="DEBUG" />
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
ファイル:application.properties
app.logPathPrefix=/var/log/myproject
Mavenを使用している場合は、依存関係を追加します。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
次に、特定のディレクトリに配置する必要がある「log4j.properties」というファイルを指定する必要があります。「src/main/resources/log4j.properties」
ファイルの例を次に示します。
# Root logger option
log4j.rootLogger=INFO, file, stdout
log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE
log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE
# Direct log messages to stdout
log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.Apache.log4j.PatternLayout
# log4j.appender.springlog.Threshold=INFO
log4j.appender.springlog.layout=org.Apache.log4j.PatternLayout
log4j.appender.springlog.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
# Direct log messages to a log file
log4j.appender.file=org.Apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/example/filename.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.Apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
これらをインポートします:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
次のようなロガー変数を宣言します。
final static Logger logger = Logger.getLogger(TheClassYourIn.class);
そして、このようなクラスでそれを使用します:
logger.info("Well hello world then ");
このようにそれは私のために動作します。この答えがあなたの役に立つことを願っています。幸運を !
PS:log4j.appender.file.File = 'directory'は、ログの保存場所を指定する方法です。ディレクトリを指定せず、単にfilename.logとして残した場合、このファイルはプロジェクトディレクトリに自動的に作成されます。
Springブートが提供するロギングメカニズムを使用しました。 「logback.xml」ファイルに以下を書きました。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/file- appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
Application.propertiesファイルとlogback.xmlファイルの両方を同じパッケージ「src/main/resources」の下に配置します。 application.propertiesファイルにパラメーターを1つ追加しました。
logging.file = xyz.log
それは私にとって完全にうまくいきました。
Spring Bootを使用している場合は、直接application.propertiesに次のプロパティを追加ファイルを使用して、ログレベルを設定し、ログパターンをカスタマイズし、外部ファイルにログを保存できます。
これらは、異なるログレベルと、最小<<最大からの順序です。
OFF << FATAL <<エラー<< WARN << INFO << DEBUG << TRACE << ALL
# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace
# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, your logs it won't work.
logging.file=D:/spring_app_log_file.log
# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
ログをより鮮明にカスタマイズするには、このリンクを通過してください。
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html
私の場合、この問題の原因となったサブモジュールの1つに「logback.xml」というファイルを誤って追加しました。これを削除すると、すべて問題ありません。
同じ問題がありました。ファイルシステムのファイルアクセス許可が原因である可能性が高くなります。 rootが所有するアプリケーションフォルダーがありましたが、。/ logsはプロセス所有者が所有していました。そのため、以下は機能しませんでした。
logging.file = my.log
しかし、これはやった
logging.file =/opt/myapp/logs/my.log