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

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

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

logging.file=filename.log

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

Ответ 1

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

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

Мне нужно дополнительно добавить logging.config=classpath:logback-spring.xml, чтобы его подхватили Spring. Соответствующие части моего application.properties теперь

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

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

Ответ 2

Я не знаю, поможет ли это вам, но я также использую Logback в моем проекте 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

Ответ 3

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

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

введите описание изображения здесь

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

введите описание изображения здесь

Ответ 4

Если вы используете 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, этот файл будет автоматически создан в директории проекта.

Ответ 5

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

logging.file = my.log

но это сделало

logging.file =/опт/MyApp/журналы/my.log

Ответ 6

Я использовал только 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>

Я помещаю оба файла application.properties и logback.xml в тот же пакет 'src/main/resources'. В файле application.properties добавлен только один параметр:

logging.file = xyz.log

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

Ответ 7

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