Весна загрузки - файл журнала записывается (лесозаготовки.файл не соблюдается)
Я использую Spring Boot и хочу, чтобы он записывал выходные данные журнала в файл.
Согласно документам, это просто делается путем установки
logging.file=filename.log
Хотя вывод консоли работает нормально, filename.log
не создается. Кроме того, если я создаю файл вручную, в него ничего не записывается. Чего мне не хватает?
8 ответов:
Я нашел решение. Я не очень доволен им, так как он все еще не отвечает на мой первоначальный вопрос, почему не соблюдается свойство
logging.file
.Я создал
logback-spring.xml
из ответа Жоржа в том же каталоге, где находитсяapplication.properties
. Согласно документации Spring Boot заберет его оттуда. Видимо, в моем случае этого не происходит.Мне нужно дополнительно добавить
logging.config=classpath:logback-spring.xml
, чтобы он был поднят весной. Соответствующие части моегоapplication.properties
являются теперьlogging.config=classpath:logback-spring.xml logging.file=logs/logfile.log
(я создал каталог
logs
вручную.)
Я не знаю, поможет ли это вам, но я также использую 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
Вот как мне удалось записать выходные данные в локальный файл file. Чтобы отключить ведение журнала консоли и записывать выходные данные только в файл, вам нужен пользовательский logback-spring.xml ( назовем его logback-spring.xml таким образом, вы воспользуетесь преимуществами шаблонов (форматирование даты и т. д..) обеспечивается загрузкой) , которая импортирует файл-аппендер.xml вместо консольного аппендера.XML. Чтобы достичь этого, вы должны вставить этот код ниже в свой 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>
Вам также необходимо добавить в приложение следующее.свойства:
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. 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;
Объявите переменную logger следующим образом:
final static Logger logger = Logger.getLogger(TheClassYourIn.class);
И использовать его в классе следующим образом:
logger.info("Well hello world then ");
Таким образом, это работает для меня. Я надеюсь, что это ответ поможет вам . Удачи вам !
PS: log4j. appender.файл.File= 'directory' - это способ указания места хранения журналов. Если вы не указываете каталог и просто оставляете его в качестве имени файла.log этот файл будет автоматически создан в проекте dir.
У меня была та же проблема. Скорее всего, это связано с правами доступа к файлам в файловой системе. У меня была папка приложения, принадлежащая root, но ./ журналы, принадлежащие владельцу процесса. Таким образом, не сработало следующее:
Ведение журнала.файл=мой.log
Но это было
Ведение журнала.file= / opt / myapp / logs / my.log
Я только что использовал механизм регистрации с пружинным загрузчиком. Я писал ниже в 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, то вы можете непосредственно добавить следующие свойства в приложении.свойства файл для установки уровня ведения журнала, настроить шаблон ведения журнала и хранить журналы во внешнем файле.
Это разные уровни ведения журнала и его порядок от минимального
ВЫКЛ
# 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