Заявление автораНа это содержимое ссылаетсяофициальный сайти одинзарубежный блог, среди которых автор не успел попробовать запись лога на удаленный сервер, а просто перевел официальный документ, причем часть грамматики была не точной. Каждая из этих частей имеет адрес главы официального сайта.Рекомендуется читать официальный сайт напрямую, если вы не понимаете его. (Статья на официальном сайте еще не переведена, переведена только ее часть, и автор тоже усердно работает над кодированием слов, продолжение следует...)
Он был организован в gitbook, подробности читайте по ссылке: mingrn.gitbooks.io
Spring-Boot как микросервисное приложение, интегрированное по умолчанию
logback
лесопильная рама.logback
Это фреймворк нового поколения, разработанный автором фреймворка log4j, он более эффективен, может адаптироваться ко многим операционным средам и, естественно, поддерживает SLF4J.Автор недавно познакомился со SpringBoot.Я использовал log4j2 при разработке с помощью Spring, и стиль журнала logback framework, интегрированный SpringBoot по умолчанию, очень хорош. Поэтому я решил прочитать официальный сайт и сделал простой перевод того, что я понял, и исходный текст, который можно использовать для дальнейшего использования, и я надеюсь, что он также может помочь детской обуви, которая мало что знает о логбэке. . . . .
Что касается проблемы путаницы в таблицах: поскольку редактор уценки, используемый автором, представляет собой заметки летающих слонов, синхронизацияgithub(Если вам кажется, что читать на этой странице недостаточно комфортно, можете перейти на github. Я переделал markdown в html, скачал напрямую и открыл в браузере для чтения [эффект отличный! См. картинку ниже] ) Пересажу позже на Наггетс. Поэтому будут некоторые проблемы с форматированием.Если я обнаружу, что автор будет исправлять это без остановки, я также благодарю старших за их напоминания!
уценка для html-рендеринга
Отображение печати журнала журналов по умолчанию
Как видно из рисунка выше, элементы содержимого вывода журнала следующие:
- Дата времени: с точностью до миллисекунд
- Уровень журнала: ERROR, WARN, INFO, DEBUG или TRACE.
- Идентификатор процесса
- Разделитель :
---
Идентифицирует начало фактического журнала- threadname: заключено в квадратные скобки (может обрезать вывод консоли
- Имя регистратора: обычно используется имя класса исходного кода.
Как говорится на официальном сайте: Предполагая, что файлы конфигурации logback-test.xml или logback.xml отсутствуют, logback по умолчанию вызовет BasicConfigurator, который установит минимальную конфигурацию.Эта минимальная конфигурация состоит из ConsoleAppender, подключенного к корневому регистратору.Вывод форматируется с использованием Для PatternLayoutEncoder установлен шаблон %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n, причем по умолчанию корневому регистратору назначается уровень DEBUG.
базовая конфигурация logback
Создайте logback.xml
Spting-Boot интегрирован по умолчанию
logback
Хотя некоторая информация журнала печатается, она недостаточно удобна. Он не может удовлетворить наши ежедневные потребности в развитии. Поэтому мы можем создать в корневом каталогеlogback.xml
илиlogback-spring.xml
файл для пользовательской конфигурацииIn a Spring Boot application, you can specify a Logback XML configuration file as logback.xml or logback-spring.xml in the project classpath. The Spring Boot team however recommends using the -spring variant for your logging configuration, logback-spring.xml is preferred over logback.xml. If you use the standard logback.xml configuration, Spring Boot may not be able to completely control log initialization.
Spring-Boot интегрирован по умолчанию
logback
Мне лично нравится стиль печатного журнала, а печатного журнала по умолчанию недостаточно для удовлетворения наших повседневных потребностей в разработке. Однако мы можем напрямую внести некоторые дополнительные изменения на его основе, чтобы добиться желаемого вывода журнала.Более того, если мы напрямую настраиваем вывод журнала, мы хотим выводить информацию разного цвета для разной информации в консоли.Если вы снимаете твои штаны, это совершенно не нужно, не так ли? Более того, Spring-Boot выполняет эти стандартные операции по умолчанию, так что мы можем напрямую ссылаться на него!Версия разработки SpringBoot, используемая автором,
2.0.2.REALEASE
версия, поэтому найдите ее напрямуюspring-boot-2.0.2.REALEASE
Пакет зависимостей. Вы можете видеть это в пакете зависимостейorg.springframework.boot
Каталог уровня пакета имеет много классов пакетов, зависящих от конфигурации по умолчанию.
Конечно, здесь в основном, чтобы увидеть
logging
пакет, в котором находитсяlogback
пакет, вот по умолчаниюlogback
Файл конфигурации журнала.
Есть в основном четыре
xml
config, я могу просто создать его в нашемlogback-spring.xml
Внесено в файл конфигурацииbase.xml
конфигурационный файл.
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
</configuration>
Теперь, когда мы перезапустим проект, мы обнаружим, что напечатанная информация журнала такая же, как если бы пользовательский файл конфигурации журнала не был создан. это потому что
springboot
распределение по умолчаниюlogback
это тот файл конфигурации.Давайте посмотрим сейчас
base.xml
Что находится в файле конфигурации.
<included>
<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/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
Наиболее заметными из них являются три
<include>
defaults.xml
-
console-appender.xml
: информация журнала вывода консоли -
file-appender.xml
: хранилище файлов журнала
Поэтому, если прямо не цитировать
base.xml
Файл конфигурации, ссылающийся на три других файла конфигурации, имеет тот же эффект. Рекомендуется цитировать документы по отдельности и толькоdefaults.xml
иconsole-appender.xml
. Поскольку несколько приложений, развернутых в одной среде, могут вызвать проблемы с разрешениями на вывод журнала.
основные свойства журнала
Теперь давайте взглянем на пользовательскую конфигурацию.
logback
Формат, который необходимо соблюдать при выводе журнала
Базовый пример (только для справки)
<configuration debug="true">
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<property name="APP_NAME" value="Logback"/>
<property name="APP_HOME" value="/home/logback"/>
<property name="LOG_HOME_PATH" value="${APP_HOME}/logs"/>
<property name="DEBUG_LOG_FILE" value="${LOG_HOME_PATH}/debug/${APP_NAME}_debug" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${DEBUG_LOG_FILE}.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>60</MaxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<root level="INFO">
<appender-ref ref="DEBUG_FILE" />
</root>
<logger name="com.mingrn.logback" level="DEBUG">
<appender-ref ref="DEBUG_FILE"/>
</logger>
<logger name="com.mingrn.logback.repository" level="DEBUG" />
</configuration>
тег конфигурации
configurationПринадлежит метке глобальной конфигурации, в конфигурации
logback
При регистрации все свойства конфигурации должны быть включены в этот тег конфигурации! Тег конфигурации имеет в общей сложности четыре атрибута узла.
scan
По умолчанию: файл конфигурации будет сканироваться на наличие изменений каждую минуту, файл конфигурации будет перезагружен, если он изменится, значение по умолчанию — true (Описание официального сайта)
<configuration scan="true">
<!--do something-->
</configuration>
scanPeriod
Период сканирования конфигурационного файла, когда единица измерения не задана, по умолчанию миллисекунды. может сотрудничать
scan
используется при включенииscan
При установке этого значения оно используется для управления циклом сканирования файла конфигурации, например сканирование файла конфигурации каждые 30 секунд (Описание официального сайта)
<configuration scan="true" scanPeriod="30 seconds" >
<!--do something-->
</configuration>
###packagingData
Включить ли упаковку данных в трассировке стека, по умолчанию — false. Если установлено значение TRUE, распечатать информацию о данных стека (Описание официального сайта)
<configuration packagingData="true">
<!--do something-->
</configuration>
Журнал выглядит следующим образом
14:28:48.835 [btpool0-7] INFO c.q.l.demo.prime.PrimeAction - 99 is not a valid value
java.lang.Exception: 99 is invalid
at ch.qos.logback.demo.prime.PrimeAction.execute(PrimeAction.java:28) [classes/:na]
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) [struts-1.2.9.jar:1.2.9]
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) [struts-1.2.9.jar:1.2.9]
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) [struts-1.2.9.jar:1.2.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) [servlet-api-2.5-6.1.12.jar:6.1.12]
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) [jetty-6.1.12.jar:6.1.12]
at ch.qos.logback.demo.UserServletFilter.doFilter(UserServletFilter.java:44) [classes/:na]
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) [jetty-6.1.12.jar:6.1.12]
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) [jetty-6.1.12.jar:6.1.12]
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) [jetty-6.1.12.jar:6.1.12]
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) [jetty-6.1.12.jar:6.1.12]
debug
Просмотр состояния выполнения журнала в режиме реального времени Значение по умолчанию — false. Если установлено значение TRUE, внутренняя информация журнала обратного входа будет распечатана, а состояние выполнения журнала можно будет просмотреть в режиме реального времени. (Описание официального сайта)
<configuration debug="true">
<include resource="org/springframework/boot/logging/logback/base.xml" />
</configuration>
Метка прослушивателя состояния
statusListener
Дочерний элемент конфигурации. Является прослушивателем состояния путем регистрации прослушивателя состояния, чтобы можно было предпринять немедленные действия в ответ на сообщения о состоянии, особенно сообщения, которые появляются после настройки журнала. Регистрация прослушивателя состояния — это удобный способ отслеживать внутреннее состояние логбэка без вмешательства человека (Описание официального сайта)
<configuration>
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
<!--do something-->
</configuration>
тег регистратора
<logger>
Дочерний элемент конфигурации. Используется для установки вывода журнала пакета или определенного класса и указания<appender>
,logger
Используйте только одно имя,level
и необязательныйaddtivity
Атрибуты(Описание официального сайта)
name
name
атрибуты используются для указанияlogger
Ограниченный пакет или конкретный класс.
<!--指定包-->
<logger name="com.mingrn.repository"/>
<!--指定类-->
<logger name="com.mingrn.repository.UserRepository"/>
level
level
Свойство задает уровень печати журнала. TRACE, DEBUG, INFO, WARN, ERROR, ALL и OFF, а также специальное значение INHERITED или синоним NULL представляют уровень, на котором применяется вышестоящий уровень. Если это свойство не установлено, текущий регистратор наследует вышестоящий уровень (корневой).
<!--指定包-->
<logger name="com.mingrn.repository" level="DEBUG"/>
<!--指定类-->
<logger name="com.mingrn.repository.UserRepository" level="DEBUG"/>
addtivity
addtivity
Следует ли передавать информацию о печати вышестоящему регистратору, значение по умолчанию — true. и если здесь установлено значение true
<logger name="com.mingrn.repository" level="DEBUG" additivity="true"/>
При выводе журнала вы обнаружите, что консоль будет выводить обе стороны, потому что это свойство установлено. Так вообще укажите
<logger>
Это свойство имеет значение FALSE, если указан пакет или конкретный класс.
<logger name="com.mingrn.repository" level="DEBUG" additivity="true"/>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="RUN_FILE" />
</root>
корневой тег
<root>
Дочерний элемент конфигурации. Этикетка на самом деле<logger>
, но он корень<logger>
. Тег имеет только один атрибутlevel
то есть уровень журнала печати. как<logger >
или<appender>
Когда метка установлена на выходной уровень, она унаследует уровень, установленный меткой по умолчанию! При этом, если установлено<logger >
после иadditivity
Когда установлено значение true, проход заставит регистратор распечатать журнал, а затем корень снова распечатает журнал! (Описание официального сайта)
тег appender-ref
<appender-ref>
Дочерний элемент корня или регистратора. Этикетка принадлежитlogger
иroot
Внутренняя справочная этикетка. Тег имеет только один атрибутref
используется для указания<appender>
помеченname
ценность! это обозначеноappender
Выходной уровеньroot
,logger
указанный уровень, еслиappender
Вывод только после указанного уровняappender
Указанный уровень ведения журнала.
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="RUN_FILE" />
</root>
<logger name="com.uhope.rl.electornic" level="DEBUG">
<appender-ref ref="DEBUG_FILE"/>
</logger>
ref
указать конкретное
appender
.ref
значение<appender>
изname
значение атрибута
<logger name="com.uhope.rl.electornic" level="DEBUG">
<appender-ref ref="DEBUG_FILE"/>
</logger>
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--do something-->
</appender>
тег contextName
<contextName>
: дочерний элемент конфигурации. Используется для определения контекста, с которым связан логер Имя контекста по умолчанию — default. Однако этой метке можно присвоить другие имена, чтобы различать записи разных эталонных программ.После установки ее нельзя изменить.
<configuration>
<contextName>myAppName</contextName>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %contextName [%t] %level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
тег свойства
<property>
Дочерний элемент конфигурации. является тегом атрибута.определение значения
<configuration debug="true">
<!--路径-->
<property name="USER_HOME" value="/home/sebastien" />
<!--日志输出规则-->
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
</configuration>
Цитирование ресурсов
<configuration>
<property resource="resource.properties" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
Справочные материалы
variable.properties — это файл
содержание документа:
USER_HOME=/home/sebastien
<configuration>
<property file="src/main/java/chapters/configuration/variables.properties" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
тег добавления
appender
Дочерний элемент конфигурации. На самом деле этоlogger
, но это компонент, отвечающий за запись логов. Компонент применяет два значения свойств:name
иclass
.
name
: имя аппендера, это значение в основном используется для<appender-ref>
изref
.class
: Определите права добавления для имени или вызова компонента!
описание ключа группы добавления
Групповой ключ приложения в основном относится к классу пакета, на который ссылается класс метки приложения. Компоненты делятся на два типа: один предназначен для локальной записи, а другой — для удаленной записи.
- Местные, такие как:
ConsoleAppender
,FileAppender
...- Удаленные, такие как:
SocketAppender
,SSLSocketAppender
ConsoleAppender
первичный ключ
Описание официального сайта ConsoleAppender
Класс пакета компонента ConsoleAppender:
ch.qos.logback.core.ConsoleAppender
Основная функция ConsoleAppender — вывод логов в консоль, что подходит дляместный.Имеет следующие свойства узла
Имя свойства | тип | инструкция |
---|---|---|
encoder | Encoder | кодирование |
target | String | System.out или System.err , по умолчанию System.out |
withJansi | boolean | Атрибут jansi по умолчанию имеет значение false. Установка для Jansi значения true активирует библиотеку Jansi, которая обеспечивает поддержку цветовых кодов ANSI на компьютерах с Windows. |
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type -->
<!-- ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
FileAppender
групповой ключ
Описание официального сайта FileAppender
Класс пакета компонента FileAppender
ch.qos.logback.core.FileAppender
Основная функция FileAppender — запись логов в файл. Целевой файл задается параметром файла. Если файл уже существует, он либо добавляется, либо усекается в зависимости от значения добавленного атрибута, подходящего дляместный.Имеет следующие свойства узла
Имя свойства | тип | инструкция |
---|---|---|
file | String | Записываемое имя файла может быть относительным или абсолютным каталогом.Если каталог верхнего уровня не существует, он будет создан автоматически, и значение по умолчанию отсутствует. |
append | boolean | Если установлено значение true, журнал будет увеличиваться в конце файла. Если false, то очистите существующие файлы. По умолчанию истинно |
encoder | String | кодирование |
prudent | boolean | Запишите журнал в указанный файл безопасно и незаметно, даже если есть другие FileAppenders, которые также записывают журнал в этот файл. Неэффективный, этот режим по умолчанию имеет значение false. Примечание: когда для этого значения установлено значение true, для добавления по умолчанию будет установлено значение true. |
инструкцияПо умолчанию журналы немедленно записываются в базовый выходной поток. Это значение по умолчанию является безопасным, поскольку журнал имен не теряется, если приложение закрывается без надлежащего завершения работы. Однако, чтобы значительно увеличить пропускную способность журналов,
<immediateFlush>
Displayed имеет значение false.
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<!-- 为了更高的日志吞吐量应将 immediateFlush 设为 false -->
<immediateFlush>true</immediateFlush>
<!-- encoders are assigned the type -->
<!-- ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
RollingFileAppender
групповой ключ
Описание официального сайта RollingFileAppender
Класс пакета компонента RollingFileAppender
ch.qos.logback.core.rolling.RollingFileAppender
RollingFileAppender расширяет FileAppender. При выполнении определенных условий он имеет функцию прокрутки для записи файлов. Говорят, что это наиболее часто используемое разрешение на запись файла, подходящее дляместный. Этот компонент состоит из двух очень важных компонентов:RollingPolicy
иTriggeringPolicy
Имеет следующие свойства узла
Имя свойства | тип | инструкция |
---|---|---|
file | String | Записываемое имя файла может быть относительным или абсолютным каталогом.Если каталог верхнего уровня не существует, он будет создан автоматически, и значение по умолчанию отсутствует. |
append | boolean | Если установлено значение true, журнал будет увеличиваться в конце файла. Если false, то очистите существующие файлы. По умолчанию истинно |
encoder | String | кодирование |
prudent | boolean | Запишите журнал в указанный файл безопасно и незаметно, даже если есть другие FileAppenders, которые также записывают журнал в этот файл. Неэффективный, этот режим по умолчанию имеет значение false. Примечание: когда для этого значения установлено значение true, для добавления по умолчанию будет установлено значение true. |
rollingPolicy | RollingPolicy | Политика непрерывного удаления определяет поведение RollingFileAppender, включая перемещение и переименование файлов.увидеть ниже |
triggeringPolicy | TriggeringPolicy | Скажите RollingFileAppender активировать прокрутку соответствующим образом.увидеть ниже |
RollingFileAppender
групповой ключRollingPolicy
стратегия пролонгации
Описание официального сайта RollingPolicy
Политика прокрутки RollingPolicy отвечает за пути к файлам и переименование или наименование во время прокрутки.
RollingPolicy
перевернутая стратегияTimeBasedRollingPolicy
стратегия пролонгации
Класс пакета TimeBasedRollingPolicy
ch.qos.logback.core.rolling.TimeBasedRollingPolicy
Политика пролонгации TimeBasedRollingPolicy, вероятно, является самой популярной политикой пролонгации. Он определяет стратегии пролонгации на основе времени, такие как день, месяц и т. д.! TimeBasedRollingPolicy имеет обязательное свойство<fileNamePattern>
и несколько необязательных свойств.Имеет следующие свойства узла
Имя свойства | тип | инструкция |
---|---|---|
fileNamePattern | String |
обязательный атрибут, значение которого должно включать имя файла с правильно размещенным спецификатором преобразования %d. Спецификатор преобразования %d может содержатьjava.text.SimpleDateFormat Укажите шаблон даты и времени, например %d{гггг-ММ}. Если шаблон даты и времени, такой как %d, опущен, формат времени по умолчанию — гггг-ММ-дд. Период переноса выводится из значения fileNamePattern. |
maxHistory | int | Максимальное время хранения для количества журналов, таких как установленный режим времени (fileNamePattern ) — гггг-ММ, а для параметра maxHistory установлено значение 6. Это означает, что файлы журналов хранятся не более 6 месяцев. Обратите внимание, что при удалении старых заархивированных файлов журнала все папки, созданные для архивирования файлов журнала, будут соответствующим образом удалены. |
maxFileSize | int | Максимальный размер сохранения каждого файла, например 10M, 100M |
totalSizeCap | int | Контролируйте общий размер хранилища файлов журнала, например 3 ГБ, 100 МБ. |
cleanHistoryOnStart | boolean | Выполните удаление архива при запуске приложения, установив для очистки истории значение true. По умолчанию ложь |
Список значений TimeBasedRollingPolicy fileNamePattern:
fileNamePattern | Rollover schedule | file |
---|---|---|
/wombat/foo.%d | По умолчанию: гггг-ММ-дд выбирается ежедневно. | /ставим/foo.2018-6-1, /ставим/foo.2018-6-2 |
/wombat/%d{yyyy/MM}/foo.txt | скользящий ежемесячно | /вомбат/2018/1/foo.txt , /вомбат/2018/2/foo.txt |
/wombat/foo.%d{yyyy-ww}.log | еженедельно | |
/wombat/foo%d{yyyy-MM-dd_HH}.log | пролистывать каждый раз | |
/wombat/foo%d{yyyy-MM-dd_HH-mm}.log | Рулон в минуту | |
/wombat/foo.%d.gz | Ежедневная прокрутка, автоматически сжатая в формат GZIP | /wombat/foo.2018-6-1.gz |
Установите максимальное время хранения журнала и максимальную емкость
<file>logFile.log</file>
не может быть установлен
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logFile.log</file>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
Разрешить нескольким программам записывать в один и тот же файл журнала
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- Support multiple-JVM writing to the same log file -->
<prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
Установите максимальный размер каждого файла для сохранения
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="ROLLING" />
</root>
</configuration>
RollingPolicy
перевернутая стратегияFixedWindowRollingPolicy
стратегия пролонгации
Класс пакета FixedWindowRollingPolicy
ch.qos.logback.core.rolling.FixedWindowRollingPolicy
FixedWindowRollingPolicy переименовывает файлы в соответствии с алгоритмом фиксированного окна при прокрутке FixedWindowRollingPolicy имеет обязательное свойство<fileNamePattern>
и несколько необязательных свойств.Имеет следующие свойства узла
Имя свойства | тип | инструкция |
---|---|---|
fileNamePattern | String | обязательный атрибут, этот параметр указывает, что при переименовании файлов журналов будет использоваться шаблон FixedWindowRollingPolicy. Он должен содержать строку %i, указывающую, куда вставить текущее значение индекса окна. Например, MyLogFile%i.log создаст файлы MyLogFile1.log, MyLogFile2.log и MyLogFile3.log с минимальным индексом 1 и максимальным индексом 3. |
minIndex | int | минимальный индекс |
maxIndex | int | максимальный индекс |
Перечисление значения TimeBasedRollingPolicy fileNamePattern
Number of rollovers | Active output target | Archived log files | file |
---|---|---|---|
0 | foo.log | - | Нет файлов прокрутки, журнал будет записывать исходный файл |
1 | foo.log | foo1.log | При первом смене файл foo.log будет называться foo1.log, а новый файл foo.log будет создан и станет активной целью вывода. |
2 | foo.log | foo1.log, foo2.лог | При втором переносе файл foo1.log будет называться foo2.log, файл foo.log будет называться foo1.log, а новый файл foo.log будет создан и станет активной целью вывода. |
3 | foo.log | foo1.log, foo2.log, foo3.log | То же |
4 | foo.log | foo1.log, foo2.log, foo3.log, foo4.log | То же |
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
RollingFileAppender
групповой ключtriggeringPolicy
триггерная стратегия
Описание официального сайта triggeringPolicy
Реализация инициирующей политики RollingPolicy отвечает за указание RollingFileAppender, когда нужно выполнить пролонгацию.
triggeringPolicy
триггерная стратегияSizeBasedTriggeringPolicy
триггерная стратегия
Описание официального сайта триггерной политики SizeBasedTriggeringPolicy
Класс пакета SizeBasedTriggeringPolicy
ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy
SizeBasedTriggeringPolicy Просмотрите размер текущего активного файла, если он превышает указанный размер, он сообщит RollingFileAppender, чтобы активировать текущий активный файл. Политика срабатывания SizeBasedTriggeringPolicy принимает только один атрибутmaxFileSize
, значение по умолчанию — 10 МБ.maxFileSize
Параметры можно указать в байтах, килобайтах, мегабайтах или гигабайтах, установив значения в КБ, МБ и ГБ соответственно. Например, 5000000, 5000 КБ, 5 МБ и 2 ГБ являются допустимыми значениями, а первые три эквивалентны.
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>test.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
SocketAppender and SSLSocketAppender
групповой ключ
Описание официального сайта SocketAppender и SSLSocketAppender
Класс пакета SocketAppender
ch.qos.logback.classic.net.SocketAppender
Класс пакета SSLSocketAppenderch.qos.logback.classic.net.SSLSocketAppender
Перевод ниже приведен только для ознакомления, пожалуйста, прочитайте инструкции на официальном сайте для получения подробной информации.
Именование разрешений SocketAppender и SSLSocketAppender в основном применимо к удаленным. Упомянутое выше назначение полномочий в основном предназначено для записи журнала на локальном компьютере текущего сервера. Разрешения SocketAppender и SSLSocketAppender могут отлично записывать журналы на удаленный компьютер.
SocketAppender может записывать журналы на удаленные машины главным образом потому, что SocketAppender предназначен для передачи сериализованных данных по сети.журнал событийТело (не знаю, что тут сказать) сущность. События журнала отправляются в открытом виде при использовании SocketAppender по сети. Однако, когда мы используем SSLSocketAppender, журналы будут отправляться по защищенному каналу. Сериализованный тип объектаLoggingEventVO, он достигает
ILoggingEvent
интерфейс.Однако, что касается регистрации событий, регистрация через удаленный доступ является взломом, на десериализованном приемнике событие может быть зарегистрировано, как если бы оно было сгенерировано локально. Несколько экземпляров SocketAppender, работающих на разных компьютерах, могут направлять вывод своих журналов на центральный сервер журналов, формат которого является фиксированным. SocketAppender не использует связанный макет, поскольку он отправляет сериализованные события на удаленный сервер.
SocketAppender работает поверх уровня протокола управления передачей (TCP), который обеспечивает надежный, упорядоченный сквозной поток октетов с контролируемым потоком. Поэтому, если удаленный сервер доступен, события журнала в конечном итоге попадут туда. В противном случае, если удаленный сервер выйдет из строя или станет недоступен, события журнала будут просто удалены. Если сервер перезапущен, передача событий будет возобновлена прозрачно. Это прозрачное переподключение выполняется потоком соединителя, который периодически пытается подключиться к серверу.
События журнала автоматически буферизируются собственной реализацией TCP. Это означает, что если соединение с сервером медленнее, но по-прежнему генерирует события быстрее, чем клиент, на клиенте не влияет медленное сетевое соединение. Однако, если сетевое соединение медленнее, чем скорость генерации событий, клиент может работать только со скоростью сети.
Особенно в крайних случаях, когда сеть подключена к серверу, клиент оказывается заблокированным. В качестве альтернативы, если сетевое соединение работает, но сервер не работает, клиент не будет заблокирован, хотя события журнала будут потеряны из-за недоступности сервера. Даже если SocketAppender больше не подключен к каким-либо средствам ведения журнала, он не будет собирать мусор при наличии потока соединителя. Поток соединителя существует только тогда, когда соединение с сервером закрыто.
Чтобы избежать этой проблемы со сборкой мусора, SocketAppender следует закрыть явно. Долгосрочные приложения, создающие и уничтожающие множество экземпляров SocketAppender, должны знать об этой проблеме сборки мусора. Большинство других приложений могут спокойно его игнорировать. Если JVM, на которой размещается SocketAppender, завершает работу до того, как SocketAppender будет закрыт, явно или посредством последующей сборки мусора, непереданные данные могут быть потеряны в конвейере. Это распространенная проблема с системами на базе Windows.
Чтобы избежать потери данных, обычно перед выходом из приложения, socketAppender можно закрыть явно или вызвав метод остановки красного контекста.
Удаленные серверы идентифицируются по параметрам remoteHost и port. Свойства SocketAppender перечислены в таблице ниже. SSLSocketAppender поддерживает ряд дополнительных свойств конфигурации, подробно описанных ниже.
Имеет следующие свойства узла
Имя свойства | тип | инструкция |
---|---|---|
port | int | порт удаленного сервера |
remoteHost | String | имя удаленного сервера |
ssl | SSLConfiguration | Поддерживается только SSLSocketAppender, это свойство предоставляет конфигурацию SSL, которая будет использоваться приложением, см.:Официальный сайт SSL |
includeCallerData | boolean | Если true, данные вызывающего абонента будут доступны удаленному хосту. По умолчанию данные о вызывающем абоненте не отправляются на сервер. |
reconnectionDelay | Duration | строка задержки продолжительности, например10 seconds Указывает время ожидания между каждой неудачной попыткой подключения к серверу. Значение по умолчанию для этого параметра составляет 30 секунд. Установка для этого параметра значения 0 отключает функцию повторного подключения. Обратите внимание, что поток соединителя не отображается, если соединение с сервером установлено успешно. |
queueSize | int |
целое число больше 0Указывает количество событий журнала, которые необходимо сохранить для удаленных получателей. Когда размер очереди равен 1, доставка событий удаленным получателям является синхронной. Когда размер очереди больше 1, новые события помещаются в очередь, если в столбце есть свободное место. Использование длины очереди больше 1 может повысить производительность за счет устранения задержек, вызванных временными сетевыми задержками. Ссылаться наeventDelayLimit Атрибуты |
eventDelayLimit | Duration | строки длительности, такие как10 seconds . Он представляет собой время ожидания перед удалением события, если локальная очередь заполнена, т. е. уже содержит события в очереди. Это может произойти, если удаленный хост продолжает медленно принимать события. Значение по умолчанию для этого параметра составляет 100 миллисекунд. |
Параметры сервера журналов
Стандартный дистрибутив Logback Classic включает два сервера, которые можно использовать для получения событий журнала от SocketAppender или SSLSocketAppender.
ServerSocketReceiver
SimpleSocketServer
SocketAppender
компонентовSimpleSocketServer
Описание официального сайта SimpleSocketServer
Приложение SimpleSocketServer принимает два аргумента командной строки:
port
иconfigFile
порт - это порт для прослушивания,configFile
представляет собой скрипт конфигурации в формате XML.
<configuration>
<appender name="SOCKET" class="ch.qos.logback.classic.net.SocketAppender">
<remoteHost>${host}</remoteHost>
<port>${port}</port>
<reconnectionDelay>10000</reconnectionDelay>
<includeCallerData>${includeCallerData}</includeCallerData>
</appender>
<root level="DEBUG">
<appender-ref ref="SOCKET" />
</root>
</configuration>
SSLSocketAppender
компонентовSimpleSSLSocketServer
Описание официального сайта SimpleSSLSocketServer
SimpleSSLSocketServer требует, чтобы порт, используемый SimpleSocketServer, совпадал с параметром командной строки configFile. Кроме того, вы должны указать местоположение и пароль сертификата сервера журналов x.509, используя системные свойства, указанные в командной строке.
Сервер настроен с помощью параметра debug="true", указанного в корневом элементе, и конфигурацию SSL, которая будет использоваться, можно увидеть в журнале запуска сервера. Это помогает убедиться, что локальные политики безопасности реализованы правильно!
<configuration debug="true">
<appender name="SOCKET" class="ch.qos.logback.classic.net.SSLSocketAppender">
<remoteHost>${host}</remoteHost>
<port>${port}</port>
<reconnectionDelay>10000</reconnectionDelay>
<ssl>
<trustStore>
<location>${truststore}</location>
<password>${password}</password>
</trustStore>
</ssl>
</appender>
<root level="DEBUG">
<appender-ref ref="SOCKET" />
</root>
</configuration>
ServerSocketAppender and SSLServerSocketAppender
компоненты
Описание официального сайта ServerSocketAppender и SSLServerSocketAppender
Класс пакета ServerSocketAppender
ch.qos.logback.classic.net.server.ServerSocketAppender
Класс пакета SSLServerSocketAppenderch.qos.logback.classic.net.server.SSLServerSocketAppender
SocketAppender
иSSLSocketAppender
Компонент предназначен для подключения приложения к удаленному серверу журналов по сети с целью доставки событий журнала на сервер. В некоторых случаях может оказаться неудобным или невозможным, чтобы приложение инициировало соединение с удаленным сервером журналов. Для этих случаев Logback предоставляетServerSocketAppender
- ServerSocketAppender: пассивно прослушивает сокет TCP, ожидая подключения от удаленных клиентов. События журнала рассылаются каждому подключенному клиенту. События журнала, которые происходят, когда ни один клиент не подключен, немедленно отбрасываются.
- SSLSocketAppender: Рассылает события журнала каждому подключенному клиенту, используя безопасный зашифрованный канал. Кроме того, приложения с поддержкой SSL полностью поддерживают аутентификацию на основе сертификатов, которую можно использовать для обеспечения того, чтобы только авторизованные клиенты могли подключаться к устройству добавления для получения событий регистрации.
ServerSocketAppender, SSLServerSocketAppender имеют следующие атрибуты узла
Имя свойства | тип | инструкция |
---|---|---|
address | String | Адрес локального сетевого интерфейса, на котором приложение будет прослушивать. Если это свойство не указано, приложение будет прослушивать все сетевые интерфейсы. |
port | int | Порт, который прослушивает приложение |
includeCallerData | boolean | Если true, данные вызывающего абонента будут доступны удаленному хосту. По умолчанию данные о вызывающем абоненте не отправляются клиенту. |
ssl | SSLConfiguration | поддерживается толькоSSLServerSocketAppender компонент, это свойство предоставляет конфигурацию SSL, которая будет использоваться приложением |
Пример компонента ServerSocketAppender
<configuration debug="true">
<appender name="SERVER" class="ch.qos.logback.classic.net.server.ServerSocketAppender">
<port>${port}</port>
<includeCallerData>${includeCallerData}</includeCallerData>
</appender>
<root level="debug">
<appender-ref ref="SERVER" />
</root>
</configuration>
Примечание. При отсутствии атрибута remoteHost этот модуль пассивно ожидает входящих подключений от удаленного хоста вместо открытия подключения к удаленному серверу журналов.
Пример компонента SSLServerSocketAppender
<configuration debug="true">
<appender name="SERVER" class="ch.qos.logback.classic.net.server.SSLServerSocketAppender">
<port>${port}</port>
<includeCallerData>${includeCallerData}</includeCallerData>
<ssl>
<keyStore>
<location>${keystore}</location>
<password>${password}</password>
</keyStore>
</ssl>
</appender>
<root level="debug">
<appender-ref ref="SERVER" />
</root>
</configuration>