Log4jпредставлен,SLF4JТакже представлен, а затем следующий, вы знаете, Logback будет грандиозным дебютом, в конце концов, у его брата Са есть отец, этот гигантский парень Чеки Гулку.
Буквально вчера, услышав, какой крутой Logback, мой босс был в полном искушении и отдал мне приказ на смерть: «Такая хорошая система логирования, почему бы вам не поторопиться и не включить ее в наш проект!»
Log4j, использовавшегося в нашем проекте ранее, на мой взгляд, достаточно, ведь это небольшая компания, и требования к производительности не столь требовательны.
01. В чем силен Logback?
1) SLF4J реализован очень естественно, без добавления слоя адаптации, такого как Log4j и JUL.
2) Среда ведения журналов Spring Boot по умолчанию использует Logback. Как только библиотека инструментов становится вариантом по умолчанию, это означает, что этот инструмент превзошел другие конкурирующие продукты.
Обратите внимание на картинку ниже (улики найдены, изОфициальный сайт весенней загрузки):
Его также можно увидеть в виде исходного кода:
3) Поддержка автоматической перезагрузки файлов конфигурации, нет необходимости создавать дополнительные потоки сканирования для мониторинга.
4) Поскольку это новая работа гиганта, она должна иметь большое улучшение производительности, иначе?
02. Пример использования логбэка
первый шаг, добавьте зависимость Logback в файл pom.xml:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
Maven автоматически импортирует две другие зависимости:
logback-core — ядро Logback, logback-classic — реализация SLF4J.
второй шаг, к простейшему тестовому случаю:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author 微信搜「沉默王二」,回复关键字 PDF
*/
public class Test {
static Logger logger = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
logger.debug("logback");
}
}
И Logger, и LoggerFactory принадлежат SLF4J, поэтому, если проект переключится с Log4j + SLF4J на Logback, код в это время не изменится.
Запускаем тестовый класс, видим в консоли следующее сообщение:
12:04:20.149 [main] DEBUG com.itwanger.Test - logback
При отсутствии файла конфигурации все по умолчанию, а информация журнала Logback будет выводиться на консоль. Внутреннюю информацию Logback можно распечатать через StatusPrinter:
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
После добавления приведенного выше кода в метод main снова запустите класс Test, в консоли вы увидите следующую информацию:
12:59:22.314 [main] DEBUG com.itwanger.Test - logback
12:59:22,261 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:59:22,262 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
12:59:22,262 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:59:22,268 |-INFO in ch.qos.logback.classic.BasicConfigurator@5e853265 - Setting up default configuration.
То есть Logback сначала ищет файл logback-test.xml в пути к классам. Если он не найден, ищите файл logback.groovy. Если нет, ищите файл logback.xml. Если он есть не найдено, оно будет выведено на консоль.
В общем, мы настроим logback-test.xml в локальной среде и logback.xml в рабочей среде.
третий шагУвеличен ресурсный файл logback-test.xml в каталоге, содержимое следующее:
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %relative [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Файлы конфигурации в результате регистрации очень гибки, основная структура<configuration>
элемент, содержащий 0 или более<appender>
элемент, за которым следует 0 или более<logger>
элемент, за которым следует не более одного<root>
элемент.
1) Настроить приложение, то есть место назначения вывода журнала конфигурации, укажите имя через атрибут name и укажите место назначения через атрибут класса:
- ch.qos.logback.core.ConsoleAppender: вывод на консоль.
- ch.qos.logback.core.FileAppender: вывод в файл.
- ch.qos.logback.core.rolling.RollingFileAppender: создает новый файл, когда размер файла превышает пороговое значение.
Помимо вывода локально, он также может выводить на удаленные устройства через SocketAppender и SSLSocketAppender и выводить на почту через SMTPAppender. Его даже можно вывести в базу данных через DBAppender.
Кодер отвечает за преобразование информации журнала в массив байтов и запись массива байтов в выходной поток.
шаблон используется для указания формата вывода журнала:
-
%d
: формат времени вывода. -
%thread
: имя потока журнала. -
%-5level
: выходной уровень журнала, дополненный до 5 символов. Например, если в информации всего 4 символа, заполните ее пробелом, чтобы информация журнала была выровнена.
Пример счетчика (когда не указано -5):
-
%logger{length}
: имя регистратора, длина используется для сокращения имени. Если не указано, то означает полный вывод, 0 означает вывод только строки после крайней правой точки логера, остальные цифры указывают количество символов до последней точки десятичной точки. -
%msg
: Конкретная информация журнала. -
%n
: символ новой строки. -
%relative
: Выводит время в миллисекундах от запуска программы до создания записи журнала.
2) Настройте root, поддерживает только один атрибут - уровень, значение может быть: TRACE, DEBUG, INFO, WARN, ERROR, ALL, OFF.
appender-ref используется для указания конкретного приложения.
3) Просмотр внутренней информации о состоянии.
Вы можете распечатать внутреннюю информацию о состоянии Logback через StatusPrinter в коде или распечатать внутреннюю информацию о состоянии, включив отладку в конфигурации.
Перезапустив класс Test, вы увидите в консоли следующую информацию:
13:54:54,718 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:/Users/maweiqing/Documents/GitHub/JavaPointNew/codes/logbackDemo/target/classes/logback-test.xml]
13:54:54,826 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
13:54:54,828 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
13:54:54,833 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
13:54:54,850 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
13:54:54,850 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
13:54:54,850 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
13:54:54,851 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@f8c1ddd - Registering current configuration as safe fallback point
13:54:54.853 [main] DEBUG com.itwanger.Test - logback
4) Конфигурация автоматической перезагрузки.
Как упоминалось ранее, одной из сильных сторон Logback является поддержка конфигурации автоматической перезагрузки.Включить эту функцию очень просто, просто добавьте ее в элемент конфигурации.scan=true
Вот и все.
<configuration scan="true">
...
</configuration>
По умолчанию интервал сканирования составляет одну минуту. Если вы хотите настроить временной интервал, вы можете настроить его через свойство scanPeriod, которое может быть в миллисекундах (миллисекундах), секундах (секундах), минутах (минутах) или часах (часах).
В следующем примере указан временной интервал в 30 секунд:
<configuration scan="true" scanPeriod="30 seconds"
...
</configuration>
Примечание. Если указан временной интервал и не заданы единицы времени, единицей времени по умолчанию являются миллисекунды.
когда установленоscan=true
После этого Logback запустит задачу ReconfigureOnChangeTask для отслеживания изменений файла конфигурации.
03, превратите log4j.properties в logback-test.xml
Если в вашем проекте раньше использовался Log4j, вы можете преобразовать log4j.properties в logback-test.xml по следующему URL-адресу:
Сделайте копию предыдущего содержимого log4j.properties:
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
Вставьте в текстовое поле этого URL:
Нажмите «Перевести», чтобы получить следующее:
<?xml version="1.0" encoding="UTF-8"?>
<!-- For assistance related to logback-translator or configuration -->
<!-- files in general, please contact the logback user mailing list -->
<!-- at http://www.qos.ch/mailman/listinfo/logback-user -->
<!-- -->
<!-- For professional support please see -->
<!-- http://www.qos.ch/shop/products/professionalSupport -->
<!-- -->
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<encoder>
<pattern>[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n</pattern>
</encoder>
</appender>
<appender name="D" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--See http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
<!--and http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy-->
<!--for further documentation-->
<Append>true</Append>
<File>debug.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
</appender>
<appender name="E" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--See http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
<!--and http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy-->
<!--for further documentation-->
<File>error.log</File>
<Append>true</Append>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root level="debug">
<appender-ref ref="stdout"/>
<appender-ref ref="D"/>
<appender-ref ref="E"/>
</root>
</configuration>
Вы можете подтвердить содержимое и обнаружить, что присутствуют все три приложения.
Однако преобразованные файлы нельзя использовать напрямую, и требуются некоторые корректировки, потому что:
Во-первых, формат бревна немного отличается, и нет ввода нет.%l
.
Во-вторых, RollingFileAppender должен указать RollingPolicy и TriggeringPolicy.Первый отвечает за функцию прокрутки журнала, а второй отвечает за время прокрутки журнала. Если RollingPolicy также реализует интерфейс TriggeringPolicy, то необходимо задать только RollingPolicy.
TimeBasedRollingPolicy и SizeAndTimeBasedRollingPolicy — две наиболее часто используемые скользящие политики.
TimeBasedRollingPolicy реализует оба интерфейса RollingPolicy и TriggeringPolicy, поэтому при использовании TimeBasedRollingPolicy нельзя указать TriggeringPolicy.
TimeBasedRollingPolicy может указывать следующие свойства:
-
FileNamePattern, используемый для определения имени файла (обязательный параметр). Его значение должно быть дополнено именем файла
%d
Игра заполнителей.%d
должен содержатьjava.text.SimpleDateFormat
Формат даты, указанный в , по умолчаниюyyyy-MM-dd
. Период прокрутки выводится из fileNamePattern. -
maxHistory, максимальное количество сохраняемых файлов журнала (необязательно). Старые файлы будут удаляться асинхронно. Например, если вы указываете ежемесячную скользящую дату, укажите
maxHistory = 6
, файлы журнала старше 6 месяцев будут сохранены, а те, что старше 6 месяцев, будут удалены. -
totalSizeCap, размер всех файлов журналов (необязательно). При превышении этого размера старые файлы журналов будут асинхронно удалены. Его необходимо использовать вместе со свойством maxHistory, и это второе условие.
Взгляните на следующую конфигурацию RollingFileAppend:
<appender name="D" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天滚动 -->
<fileNamePattern>debug.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存 30 天的历史记录,最大大小为 30GB -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%relative [%thread] %level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
В соответствии с политикой хранения файлов по дням срок хранения составляет до 30 дней, а максимальный размер — 30 ГБ.
SizeAndTimeBasedRollingPolicy имеет еще одно свойство настройки размера файла журнала, чем TimeBasedRollingPolicy: maxFileSize, остальные точно такие же.
Основываясь на том, что мы знаем о RollingPolicy, мы можем настроить содержимое logback-test.xml следующим образом:
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="D" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Append>true</Append>
<File>debug.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天轮转 -->
<fileNamePattern>debug.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存 30 天的历史记录,最大大小为 30GB -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name="E" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天轮转 -->
<fileNamePattern>error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存 30 天的历史记录,最大大小为 30GB -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root level="debug">
<appender-ref ref="stdout"/>
<appender-ref ref="D"/>
<appender-ref ref="E"/>
</root>
</configuration>
Измените содержимое класса Test:
public class Test {
static Logger logger = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
logger.debug("logback");
logger.error("logback");
}
}
После запуска вы увидите два файла в целевом каталоге: debug.log и error.log.
На данный момент проект был переведен с Log4j на Logback, процесс очень плавный, эй.
04, обратно вручную
На официальном сайте Logback есть инструкция, очень подробная, более 200 страниц, но только на английском языке. Друзья, вы можете перейти по следующему адресу, чтобы увидеть официальное руководство после прочтения учебника Logback для начала работы с этой статьей.
Если у вас ограниченные способности к чтению на английском языке, вы можете проверить китайскую версию, переведенную Лэй Фэном, на GitHub:
Конечно, есть еще друзья, которые любят смотреть офлайн-версию PDF, я их разобрал:
Ссылка на сайт:Блюдо Baidu.com/is/16FR BW Ycy...Пароль: bptl
Будем честны,Он чувствует себя комфортно, и загрузите его прямо сейчас! Прошу три дня подряд, спасибо за трудолюбивые пальцы, хе-хе.