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
проект и структура, как показано ниже
: 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.
вот как выглядит мое дерево структуры приложения:
Если вы хотите получить больше удовольствия, вы можете найти базу.xml в ваших зависимостях maven, как это:
если вы используете 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