распределение по умолчанию
Уровни журнала от низкого до высокого делятся на:
TRACE
Если установленоINFO, ниже, чемINFOИнформация не будет выводить другую и так далее
По умолчанию Spring Boot будет использоватьLogbackдля записи внутренних журналов и использованияINFOУровень выводится в консоль и вам не нужно ничего делать
Как видно из рисунка выше, элементы содержимого вывода журнала следующие:-
Время и дата: с точностью до миллисекунд
-
уровень журнала:
-
Идентификатор процесса
-
Разделитель: --- определяет начало фактического журнала
-
Название темы: заключено в квадратные скобки (может обрезать вывод консоли)
-
Имя регистратора: обычно используется имя класса исходного кода.
-
содержимое журнала
Добавить журнал в свою программу
классовый подход
В будущей разработке вызов метода ведения журнала должен вызывать не непосредственно класс реализации журнала, а вызов метода на уровне абстракции журнала.
Это отличается от использования только пакета log jar.
package com.fashvn.ctmsdata.logtest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
private static final Logger logger=LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
logger.error("简单的日志记录测试:{}+{}={}",1,2,3);
}
}
на основе аннотаций
Приведенный выше метод должен каждый раз повторять строку кода, которая добавляет регистратор.Это может быть основано на методе аннотации, но его необходимо использовать.lombokПредпосылка заключается в том, что ваша IDEA настраивает плагин lombok, а затем maven добавляет зависимость lombok.
package com.fashvn.ctmsdata.logtest;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LogTest {
public static void main(String[] args) {
log.error("简单的日志记录测试:{}+{}={}", 1, 2, 3);
}
}
Теперь вы можете с удовольствием использовать журнал в своей программе.
Изменить настройку
Вы также можете включить режим «отладки» (рекомендуется для разработки), включив ваше приложение с флагом --debug, одним из следующих способов:
- Добавьте флаг --debug после запуска команды, например:
$ java -jar springTest.jar --debug
- Настроить в application.propertiesdebug=true, когда для этого свойства установлено значение true, основной Logger (включая встроенный контейнер, hibernate, spring) будет выводить больше содержимого, но высобственный журнал приложенийИ не будет выводиться как уровень DEBUG.
Как сделать ваши требования к ведению журнала простыми?Вы можете легко настроить журналы с помощью свойств, предоставляемых Springboot.Сложные функции ведения журнала должны определять файлы конфигурации отдельно
logging:
# 将日志输出到文件 注意name和path同时使用只会生效后一个配置
file:
# 日志名称可以是相对路径和绝对路径
name:
#日志路径 可以是相对路径和绝对路径,帮我们自动生成spring.log的日志文件
path:
# 日志文件大小默认是10M单位是KB
max-size:
# 每天切割打包日志的数量默认是7
max-history:
#日志格式
pattern:
#输出到日志文件日志格式
file:
#输出到控制台日志格式
# %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
console:
#时间格式 默认 yyyy-MM-dd HH:mm:ss.SSS
dateformat:
#日志等级对齐方式 默认%5p日志级别输出右对齐
level:
#切割文件名称 默认是${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz 如过单个日志文件超过定义的大小就切割打包
rolling-file-name:
#需要记录日志的等级
level:
# 根目录所以class日志记录等级
root: debug
# 自定义对应包下class 日志等级
com.fashvn.ctmsdata: debug
Пользовательская конфигурация журнала
В зависимости от системы логирования вы можете организовать имена конфигурационных файлов по следующим правилам, и они будут загружаться корректно:
-
Журнал: 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
Spring Boot официально рекомендует использовать имя файла с параметром -spring в качестве конфигурации журнала (например, использовать logback-spring.xml вместо logback.xml) и файл конфигурации журнала с именем logback-spring.xml. весенний ботинокуникальныйэлемент конфигурации
Если вы хотите иметь полный контроль над конфигурацией ведения журналов, но не хотите использовать logback.xml в качестве имени конфигурации Logback, в application.yml можно указать пользовательское имя через свойство logging.config.
logging.config=classpath:logging-config.xml
Хотя обычно нет необходимости изменять имя профиля, эта функция может быть полезна, если вы хотите использовать разные конфигурации ведения журналов для разных профилей среды выполнения. Обычно это свойство не требуется, но конфигурация springProfile используется непосредственно в logback-spring.xml, и в logging.config нет необходимости указывать разные среды для использования разных файлов конфигурации.
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan true:配置文件如果发生改变,将会被重新加载,默认值为true
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。默认的时间间隔为1分钟,当scan为true时,此属性生效。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--设置上下文名称
每个logger都关联到logger上下文,默认上下文名称为“default”。
但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,
可以通过%contextName来打印日志上下文名称,一般来说我们不用这个属性,可有可无。
-->
<contextName>logback-demo</contextName>
<!--设置变量
用来定义变量值的标签, 有两个属性,name和value;
其中name的值是变量的名称,value的值时变量定义的值。
通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
-->
<property name="logback.logdir" value="/Users/inke/dev/log/tomcat"/>
<property name="logback.appname" value="app"/>
<!--appender用来格式化日志输出节点
有俩个属性name和class
class用来指定哪种输出策略
常用就是控制台输出策略和文件输出策略。
-->
<!--输出到控制台 ConsoleAppender
可以看到layout和encoder,都可以将事件转换为格式化后的日志记录,但是控制台输出使用layout,文件输出使用encoder,具体原因可以看
https://blog.csdn.net/cw_hello1/article/details/51969554
-->
<appender name="consoleLog1" class="ch.qos.logback.core.ConsoleAppender">
<!--展示格式 layout-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d -1 %msg%n</pattern>
</layout>
</appender>
<!--输出到控制台 ConsoleAppender-->
<appender name="consoleLog2" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d -2 %msg%n</pattern>
</encoder>
</appender>
<!--输出到控制台 ConsoleAppender
%d{HH: mm:ss.SSS}——日志输出时间
%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
%-5level——日志级别,并且使用5个字符靠左对齐
%logger{36}——日志输出者的名字
%msg——日志消息
%n——平台的换行符
ThresholdFilter为系统定义的拦截器,
例如我们用ThresholdFilter来过滤掉ERROR级别以下的日志不输出到文件中。如果不用记得注释掉,不然你控制台会发现没日志~
-->
<appender name="consoleLog3" class="ch.qos.logback.core.ConsoleAppender">
<!--展示格式 layout-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</pattern>
</layout>
<!--
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
-->
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,
所以我们使用下面的策略,可以避免输出 Error 的日志-->
<!--只是不想要error其他都要-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--过滤 Error-->
<level>ERROR</level>
<!--匹配到就禁止-->
<onMatch>DENY</onMatch>
<!--没有匹配到就允许-->
<onMismatch>ACCEPT</onMismatch>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${logback.logdir}/info.${logback.appname}.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${logback.logdir}/info.${logback.appname}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
</encoder>
</appender>
<!--输出到文件
另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,
将他们输出到同一个文件并非一个好办法。RollingFileAppender用于切分文件日志:
-->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>Error</level>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${logback.logdir}/error.${logback.appname}.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${logback.logdir}/error.${logback.appname}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
</encoder>
</appender>
<!--必选节点
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。
可以包含零个或多个元素,标识这个appender将会添加到这个loger。
-->
<!--指定最基础的日志输出级别-->
<root level="INFO">
<!--appender将会添加到这个loger-->
<appender-ref ref="consoleLog1"/>
<appender-ref ref="consoleLog2"/>
<appender-ref ref="consoleLog3"/>
</root>
</configuration>