Framework de journalisation couramment utilisé
java.util.logging : Il s'agit du framework de journalisation natif Java introduit par JDK dans la version 1.4
Log4j : Un projet open source d'Apache qui peut contrôler la destination du journal transmission des informations. Les consoles, les fichiers, les composants de l'interface graphique, etc. peuvent contrôler le format de sortie de chaque journal. Ceux-ci peuvent être configurés de manière flexible via un fichier de configuration sans modifier le code de l'application. Bien que la maintenance ait été arrêtée, la plupart des entreprises utilisent actuellement log4j.
LogBack : C'est une version améliorée de Log4j
Log4j2 : Log4j2 n'est pas seulement une version améliorée de Log4j, il a été réécrit du début à la fin
log façade slf4j
Le ci-dessus présente l'implémentation de certains frameworks de log.Ici, nous devons utiliser la façade de log pour résoudre le couplage entre le système et le framework d'implémentation de log. SLF4J, Simple Logging Facade for Java, n'est pas une véritable implémentation de journalisation, mais une couche d'abstraction qui vous permet d'utiliser n'importe quelle implémentation de journalisation en arrière-plan.
Comme les nombreux frameworks de log introduits précédemment, chaque framework de log possède sa propre API distincte. Pour utiliser le framework correspondant, vous devez utiliser son API correspondante, ce qui augmente considérablement le besoin du code d'application pour le framework de log.
Après avoir utilisé slf4j, pour les applications, quelle que soit la façon dont le cadre de journalisation sous-jacent change, l'application peut être mise en ligne directement sans modifier aucune ligne de code.
Pourquoi choisir log4j2
Par rapport à d'autres systèmes de journalisation, log4j2 perd moins de données ; dans un environnement multithread, les performances sont plus de 10 fois supérieures à celles de la connexion, etc. ; de jdk1.5 , réduisant l'apparition de blocages ; La raison des performances supérieures de log4j2 est que log4j2 utilise LMAX, une bibliothèque de communication inter-thread sans verrouillage pour remplacer les files d'attente avant la connexion et log4j. Les performances de concurrence sont grandement améliorées.
Étapes d'intégrationPrésentation du package Jar
springboot utilise le framework de journalisation de connexion par défaut, la connexion doit donc être exclue, sinon des erreurs se produiront signalant des conflits de dépendances jar.
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <exclusions><!-- 去掉springboot默认配置 --> <exclusion> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-logging</artifactid> </exclusion> </exclusions> </dependency> <dependency> <!-- 引入log4j2依赖 --> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-log4j2</artifactid> </dependency>Fichier de configuration
Si vous personnalisez le nom du fichier, vous devez le configurer dans application.yml
logging: config: xxxx.xml level: cn.jay.repository: trace
Le nom par défaut est log4j2-spring.xml, qui enregistre le modèle de fichier de configuration dans application.yml
log4j utilise un fichier .properties comme fichier de configuration principal, mais maintenant log4j2 a abandonné cette méthode et utilise .xml, .json ou .jsn pour le faire. C'est peut-être aussi le cas. C'est une fatalité technologique. développement, car la lisibilité des fichiers de propriétés est vraiment un peu mauvaise.
<?xml version="1.0" encoding="UTF-8"?> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--变量配置--> <properties> <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符--> <!-- %logger{36} 表示 Logger 名字最长36个字符 --> <property></property> <!-- 定义日志存储的路径,不要配置相对路径 --> <property></property> <property></property> </properties> <appenders> <console> <!--输出日志的格式--> <patternlayout></patternlayout> <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <thresholdfilter></thresholdfilter> </console> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用--> <file> <patternlayout></patternlayout> </file> <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <rollingfile> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <thresholdfilter></thresholdfilter> <patternlayout></patternlayout> <policies> <!--interval属性用来指定多久滚动一次,默认是1 hour--> <timebasedtriggeringpolicy></timebasedtriggeringpolicy> <sizebasedtriggeringpolicy></sizebasedtriggeringpolicy> </policies> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--> <defaultrolloverstrategy></defaultrolloverstrategy> </rollingfile> <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <rollingfile> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <thresholdfilter></thresholdfilter> <patternlayout></patternlayout> <policies> <!--interval属性用来指定多久滚动一次,默认是1 hour--> <timebasedtriggeringpolicy></timebasedtriggeringpolicy> <sizebasedtriggeringpolicy></sizebasedtriggeringpolicy> </policies> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--> <defaultrolloverstrategy></defaultrolloverstrategy> </rollingfile> <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <rollingfile> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <thresholdfilter></thresholdfilter> <patternlayout></patternlayout> <policies> <!--interval属性用来指定多久滚动一次,默认是1 hour--> <timebasedtriggeringpolicy></timebasedtriggeringpolicy> <sizebasedtriggeringpolicy></sizebasedtriggeringpolicy> </policies> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--> <defaultrolloverstrategy></defaultrolloverstrategy> </rollingfile> </appenders> <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。--> <!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效--> <loggers> <!--过滤掉spring和mybatis的一些无用的DEBUG信息--> <logger> <appenderref></appenderref> </logger> <!--监控系统信息--> <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。--> <logger> <appenderref></appenderref> </logger> <root> <appender-ref></appender-ref> <appender-ref></appender-ref> <appender-ref></appender-ref> <appender-ref></appender-ref> <appender-ref></appender-ref> </root> </loggers> </configuration>Introduction aux paramètres de configuration
Voici une brève introduction aux paramètres de configuration couramment utilisés
Niveau de journalisation
%d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间,输出到毫秒的时间 %-5level : 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0 %c : logger的名称(%logger) %t : 输出当前线程名称 %p : 日志输出格式 %m : 日志内容,即 logger.info("message") %n : 换行符 %C : Java类名(%F) %L : 行号 %M : 方法名 %l : 输出语句所在的行数, 包括类名、方法名、文件名、行数 hostName : 本地机器名 hostAddress : 本地ip地址Détails de la configuration Log4j2
Configuration du nœud racine
a deux attributs :
monitorinterval est utilisé pour spécifier l'intervalle de surveillance pour la reconfiguration automatique de log4j, l'unité est s, le minimum est de 5 s
Le nœud Appenders
a généralement trois sous-nœuds : Console, RollingFile, File
Le nœud Console est utilisé pour. définir la sortie vers l'Appender de Taiwan.
name : Spécifiez le nom de l'Appender. fileName:指定输出日志的目的文件带全路径的文件名. PatternLayout:输出格式,不设置默认为:%m%n. RollingFile节点用来定义超过指定条件自动删除旧的创建新的Appender. name:指定Appender的名字. fileName:指定输出日志的目的文件带全路径的文件名. PatternLayout:输出格式,不设置默认为:%m%n. filePattern : 指定当发生Rolling时,文件的转移和重命名规则. Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志. TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am. SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小. DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。 Loggers节点,常见的有两种:Root和Logger. Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 level:日志输出级别,共有8个级别,按照从低到高为:All Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。 level:日志输出级别,共有8个级别,按照从低到高为:All name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点. AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。 简单使用 使用lombok工具简化创建Logger类 lombok就是一个注解工具jar包,能帮助我们省略一繁杂的代码。具体介绍可以看我的这篇教程。 使用lombok后下面的代码等效于上述的代码,这样会更方便的使用日志。
public class LogExampleOther {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExampleOther.class);
public static void main(String... args) {
log.error("Something else is wrong here");
}
}
@Slf4j
public class LogExampleOther {
public static void main(String... args) {
log.error("Something else is wrong here");
}
}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!