Обработка журнала является необходимой функцией формального проекта.Журнал должен иметь возможность сохранять указанный журнал в соответствии с временем, типом и другими факторами в соответствии с указанным форматом, чтобы мы могли наблюдать за работой программы и находить ошибка программы.
Инфраструктура ведения журнала Logback рекомендуется в SpringBoot.
Пример проекта в этом разделе находится вGitHub.com/lawrence/tickets…
slf4j: унифицированная фасадная абстракция для различных фреймворков ведения журналов Java.
Общая структура ведения журналов Java: java.util.logging, log4j, logback, commons-logging.
Logback — это среда ведения журналов нового поколения, разработанная автором log4j, которая в настоящее время наиболее широко используется. SpringBoot использует logback по умолчанию, уровень INFO по умолчанию
Логбэк:
Порядок загрузки журнала: logback.xml -> application.properties -> logback-spring.xml
1. Уровень журнала
Уровень журнала, определенный log4j: отладка/информация/предупреждение/ошибка/фатальный
предупреждение, возможная ошибка; ошибка, ошибка, может привести к завершению программы; фатальная, серьезная ошибка, программа завершится
Также есть два специальных уровня: OFF — самый высокий уровень, ALL — самый низкий уровень.
log4j рекомендует использовать только четыре уровня отладки/информации/предупреждения/ошибки.
Уровень журнала: ОШИБКА -> ПРЕДУПРЕЖДЕНИЕ -> ИНФОРМАЦИЯ -> ОТЛАДКА
Если настроен уровень журнала INFO, журналы уровня INFO и выше будут выводиться, в то время как журналы ниже уровня INFO (журнал отладки) не будут выводиться.
2. SpringBoot представляет регистратор
Импортировать напрямую:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.1.11.RELEASE</version>
<scope>compile</scope>
</dependency>
Косвенный импорт:
Внедрение spring-boot-starter автоматически представит spring-boot-starter-loging
Введение spring-boot-starter-web автоматически представит spring-boot-starter
3. Настройте логбэк через конфигурационный файл springboot
Настройте журнал вывода в файл:
logging:
file: logback-demo.log # 输出到项目目录下
По умолчанию используется наложенный вывод, то есть каждый раз при запуске проекта предыдущий файл журнала не будет удаляться, а текущий используемый файл журнала не будет очищаться, а будет создаваться новая строка ниже.
уровень журнала:logging.level.*: level-name
* Относится к имени пакета или имени журнала, имя журнала, например root, означает системный журнал.
имя-уровня относится к уровню журнала, обычно используется debug/info/warn/error
Например:
logging:
level:
com.example.logbackdemo: debug # 指定包下日志以debug级别输出
#root: warn # root日志以warn级别输出,不要用debug级别!!---会卡的!
В-четвертых, настройте конфигурацию журнала через файл XML.
Приведенная выше конфигурация сохраняет журнал в файл, но это не очень полезно для реального проекта.
Например, файл журнала очень большой, и размер журнала, создаваемого каждый день, составляет сотни МБ. Можно ли обработать один файл? Что делать, если журналы нужно сохранять по типу? Как насчет пользовательских форматов журналов?
Это вопросы.
К счастью, большинство фреймворков ведения журналов, включая logback, предоставляют функции файла конфигурации, наиболее распространенной из которых является использование XML-файлов для настройки.
Файл конфигурации фреймворка по умолчанию:
- Журнал: logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
- Log4j: log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
- Log4j2: log4j2-spring.xml, log4j2.xml
- JDK (Java Util Logging): logging.properties
Порядок загрузки журнала: logback.xml -> application.properties -> logback-spring.xml
В рамках логбэка:
Рекомендуется использовать logback-spring.xml или указать файл конфигурации в приложении с помощью logging.config=classpath:xxx.xml.
Пример:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<contextName>logback-spring-demo-dev</contextName>
<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
<property name="pattern-color" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>
<property name="LOG_HOME" value="logs"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 控制台输出-带颜色 -->
<appender name="CONSOLE-WITH-COLOR" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern-color}</pattern>
</encoder>
</appender>
<!-- 文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/all.%d.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE-WITH-COLOR"/>
<appender-ref ref="FILE"/>
</root>
<logger name="com.example.logbackdemo.IndexAction" level="info" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>
Ниже подробно описаны элементы конфигурации в logback.xml:
Есть два свойства и три узла:
- Два свойства: contextName и свойство
- Три узла: appender, root, logger
4.1 свойство contextName
contextName: имя журнала, вы можете использовать %contextName для ссылки на
Если logback.xml и logback-spring.xml существуют одновременно или logback.xml и пользовательский файл конфигурации существуют одновременно, logback.xml будет загружен первым, а затем указанный файл конфигурации будет загружен в соответствии с будет загружена конфигурация приложения или logback-spring, xml. Если contextName двух файлов конфигурации отличается, будет сообщено об ошибке:
ERROR in ch.qos.logback.classic.joran.action.ContextNameAction - Failed to rename context [logback-demo] as [logback-spring-demo-dev] java.lang.IllegalStateException: Context has been already given a name
4.2 атрибут свойства
Тег свойства можно использовать для настройки свойств, например определения одного из них, а затем ссылки на него с помощью ${LOG_HOME}.
4.3 дополнительный узел
Appender означает приложение, которое здесь можно понимать как рендерер журнала. Например, журнал консоли отображается в одном формате, а журнал файла — в другом формате.
Приложение имеет два атрибута: имя и класс, а также два дочерних узла: rollPolicy и encoder.
имя указывает имя средства визуализации, а класс указывает используемую стратегию вывода.Общими из них являются стратегия вывода на консоль и стратегия вывода в файл.
4.3.1 Приложение консоли вывода
<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
Кодировщик представляет выходной формат, а детали следующие:
%d означает время
%thread указывает имя потока
%-5level указывает уровень журнала, разрешая вывод длиной пять символов.
%logger{50} указывает конкретный экспортер журналов, например имя класса и длину в скобках.
%msg представляет конкретное сообщение журнала, которое имеет значение xxx в logger.info("xxx").
%n означает новую строку
Вы также можете определить цветовую подсветку, например, шаблон определяется следующим образом:
<property name="pattern-color" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>
То есть, используя %color(xxx) для указания цвета вывода соответствующего столбца, можно добиться цветовой подсветки вывода консоли.
4.3.2 Приложение для ввода файлов
Вывод файла в основном включает настройку: журнал выводится в файл в указанной папке в указанном формате, и можно настроить имя, максимальный размер и время хранения файла.
Например:
<property name="LOG_HOME" value="logs"/>
<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/all.%d.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
Основное содержание вышеуказанной конфигурации: вывод лога в файл под лог-файлом в указанном формате, формат имени файла указан как logs/all.date.index.log, максимальный размер лог-файла 10Мб , если превышает, будет создан новый файл.Файлы журнала хранятся в течение тридцати дней.
Индекс увеличивается с 0
RollingPolicy относится к черновой прокатке, конкретная конфигурация указана выше.
Что касается ограничения размера файла журнала, также можно использовать конфигурацию 1 ГБ.
4.4 корневой узел — включить настройку
Корневой узел фактически настраивает, какой присоединитель включен, и можно добавить несколько присоединителей.
Например:
<root level="INFO">
<appender-ref ref="CONSOLE-WITH-COLOR"/>
<appender-ref ref="FILE"/>
</root>
Указывает, что уровень является информационным, а средства визуализации CONSOLE-WITH-COLOR и FILE включены.
В соответствии с этой конфигурацией при выводе журнала консоль будет выводиться в соответствии с форматом, определенным CONSOLE, а файл журнала будет выводиться в соответствии с конфигурацией CONSOLE-WITH-COLOR.
4.5 узел регистратора
Добавьте конфигурацию в один пакет или класс:
<!-- logger节点可以指定具体包或类的日志配置 -->
<!-- name属性为必选,指定要配置的包或类,level和additivity为可选,有缺省值 -->
<!-- level表示日志级别,这里配置info级别,表示info及以上级别的日志被输出 -->
<!-- additivity表示日志是否传递到上一级,默认为true -->
<logger name="com.example.logbackdemo.IndexAction" level="info" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
Здесь мы добавляем тестовый класс интерфейса:
@RestController
@RequestMapping(value = "log")
public class IndexAction {
private Logger logger = LoggerFactory.getLogger(IndexAction.class);
@GetMapping(value = "")
public String testLoggerTag() {
logger.debug("测试logger标签");
logger.info("测试logger标签");
logger.warn("测试logger标签");
logger.error("测试logger标签");
return "this is spring-boot-logback-demo projects.";
}
}
Запустите проект и вызовите интерфейс, чтобы протестировать его:
Обнаружено, что вывод консольного журнала класса IndexAction бесцветен, то есть вступает в силу конфигурация регистратора. После того как для аддитивности задано значение true, консоль выводит одно и то же содержимое дважды.
Кроме того, существует тег springProfile, используемый для указания конфигурации журнала, соответствующей файлу конфигурации springboot, и его применение будет описано ниже.
4.6 Укажите, какие конфигурации ведения журналов включены
-
springboot указывает, какой xml включить
Мы можем указать, какой xml использовать в качестве конфигурации регистратора в файле конфигурации springboot, например: logging.config=classpath:logback-spring-dev.xml.
Если не указано, он проверит, существует ли конфигурация по умолчанию в порядке logback.xml->application.yml->logback-spring.xml.
-
Используйте тег springProfile в xml, чтобы указать, какую конфигурацию следует использовать в какой среде.
Мы также можем указать, какие конфигурации используются в каких средах, в определенных XML-файлах конфигурации журнала, например:
<springProfile name="local,dev"> <root level="INFO"> <appender-ref ref="CONSOLE-WITH-COLOR"/> <appender-ref ref="FILE"/> </root> </springProfile> <springProfile name="prod"> <root level="INFO"> <appender-ref ref="CONSOLE-WITH-COLOR"/> <appender-ref ref="FILE"/> </root> </springProfile>
В этом случае нет необходимости предлагать несколько файлов xml, просто используйте logback-spring.xml по умолчанию.
Ссылаться на:
Грудное молоко лучше человеческого Цао Цао/spring-boot…
woo woo Краткое описание.com/afraid/not от 3 до 8 удобно…
blog.CSDN.net/pull out 1995/AR…
blog.CSDN.net/RO рекламирует и _Chen…
обмен обучением
Персональный сайт:www.eknown.cn
Гитхаб:github.com/laolunsi
публика:обезьяний язык, «Делиться технологиями, но и понимать жизнь», добро пожаловать на внимание!