Spring Boot - файл журнала не записан (logging.файл не соблюдается)

Я использую Spring Boot и хочу, чтобы он записывал вывод журнала в файл.

согласно документам, это просто делается путем установки

logging.file=filename.log

в то время как выход консоли работает нормально,filename.log не создается. Кроме того, если я создаю файл вручную, в него ничего не записывается. Что я упускаю?

8 ответов


Я нашел решение. Я не очень доволен этим, так как он все еще не отвечает на мой первоначальный вопрос, почему logging.file свойство не соблюдается.

Я создал logback-spring.xml от Georges' ответ в том же каталоге, где application.properties проживает. Согласно документация Spring Boot заберет его оттуда. Видимо, в моем случае этого не происходит.

мне нужно добавить logging.config=classpath:logback-spring.xml в целях его забирает Весна. Соответствующие части моего application.properties Теперь

logging.config=classpath:logback-spring.xml
logging.file=logs/logfile.log

(Я создал вручную.)


Я не знаю, поможет ли это вам, но я также использую Logback в моем Spring-Boot проект и структура, как показано ниже

enter image description here

: 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>

: приложение.свойства

app.logPathPrefix=/var/log/myproject

вот как мне удалось записать вывод в локальный файл файла. Чтобы отключить ведение журнала консоли и записать вывод только в файл, вам нужен пользовательский logback-весна.в XML ( назовем его logback-весна.в XML таким образом, вы воспользуетесь функциями шаблонов (форматирование даты и т. д..) предоставляется Boot) что импорт .в XML вместо console-appender.XML. Чтобы достичь этого, вы должны вставить этот код ниже в свой Logback так-весна.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> 

Вам также необходимо добавить в приложение следующее.свойства:

logging.file=myapplication.log

обратите внимание, что этот лог-файл myapplication.log будет генерироваться springboot.

вот как выглядит мое дерево структуры приложения:

enter image description here

Если вы хотите получить больше удовольствия, вы можете найти базу.xml в ваших зависимостях maven, как это:

enter image description here


если вы используете 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.свойства", которые вы должны поместить в определенный каталог: "src/main/resources / log4j.свойства'

вот как должен выглядеть файл, например:

# 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;

объявите переменную logger следующим образом:

final static Logger logger = Logger.getLogger(TheClassYourIn.class);

и использовать его в классе, как это :

logger.info("Well hello world then ");

таким образом, это работает для меня. Я надеюсь, что этот ответ поможет вам . Удачи !

PS: log4j.аппендер.файл.File= 'directory' - это то, как вы указываете, где должны храниться журналы. Если вы не указываете каталог и просто оставляете его как имя файла.log этот файл будет автоматически создан в проекте dir.


У меня была та же проблема. Это более чем вероятно из-за прав доступа к файлам в файловой системе. У меня была папка приложения, принадлежащая root, но ./ журналы, принадлежащие владельцу процесса. Таким образом, не сработало следующее:

ведение журнала.файл=мой.log

но это

ведение журнала.файл= / opt / myapp / logs / my.log


Я просто использовал механизм ведения журнала Spring-boot. Я написал ниже в своем "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>

Я поставил оба приложения.свойства и Logback так.xml-файл в том же пакете 'src/main/resources'. В применении.файл свойств просто добавил один параметр:

logging.file = xyz.log

это сработало отлично для меня.


в моем случае я добавил файл " logback.xml " в одном из моих субмодулей по ошибке, вызвавшей эту проблему, удалите его, и все будет в порядке.


Если вы находитесь на Spring Boot, то вы можете напрямую добавить следующие свойства в применении.свойства file для установки уровня ведения журнала, настройте шаблон ведения журнала и сохраните журналы во внешнем файле.

Это разные уровни ведения журнала и его порядок от минимального

ВЫКЛ

# 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