Rumah >Java >javaTutorial >Bagaimana untuk menggunakan log4j2 logging dalam Springboot
Rangka kerja pengelogan biasa
java.util.logging: Ia ialah rangka kerja pengelogan asli Java yang diperkenalkan oleh JDK dalam versi 1.4
Log4j: Projek sumber terbuka Apache Ia boleh mengawal destinasi penghantaran maklumat log ke konsol, fail, komponen GUI, dll. Ia boleh mengawal format output setiap log dikawal secara fleksibel melalui fail konfigurasi boleh dikonfigurasikan tanpa mengubah suai kod aplikasi. Walaupun penyelenggaraan telah dihentikan, kebanyakan syarikat pada masa ini menggunakan log4j.
LogBack: Ia adalah versi Log4j yang dipertingkatkan
Log4j2: Log4j2 bukan sekadar versi Log4j yang dinaik taraf, ia adalah dari awal hingga tamat Semua telah ditulis semula
Log fasad slf4j
Di atas memperkenalkan pelaksanaan beberapa rangka kerja pembalakan Di sini kita perlu gunakan log Fasad untuk menyelesaikan gandingan antara sistem dan rangka kerja pelaksanaan log. SLF4J, Fasad Pembalakan Mudah untuk Java, bukanlah pelaksanaan pembalakan sebenar, tetapi lapisan abstraksi yang membolehkan anda menggunakan sebarang pelaksanaan pembalakan di latar belakang.
Sama seperti beberapa rangka kerja log yang diperkenalkan sebelum ini. Setiap rangka kerja log mempunyai API tersendiri untuk menggunakan rangka kerja yang sepadan dengannya meningkatkan gandingan kod aplikasi kepada rangka kerja pengelogan.
Selepas menggunakan slf4j, untuk aplikasi, tidak kira bagaimana rangka kerja pengelogan asas berubah, aplikasi boleh terus dalam talian tanpa mengubah sebarang baris kod.
Mengapa memilih log4j2
Berbanding dengan sistem pembalakan lain, log4j2 kehilangan lebih sedikit data teknologi, dalam persekitaran berbilang benang, mempunyai prestasi yang lebih tinggi daripada log balik Tunggu lebih daripada 10 kali; mengambil kesempatan daripada ciri konkurensi jdk1.5 untuk mengurangkan berlakunya kebuntuan
Sebab prestasi unggul log4j2 ialah log4j2 menggunakan LMAX, perpustakaan komunikasi antara benang tanpa kunci; log balik Dan baris gilir sebelum log4j prestasi Concurrency bertambah baik.
Langkah integrasi
Pengenalan pakej Jar
springboot menggunakan rangka kerja pengelogan log balik secara lalai, jadi log balik perlu dikecualikan, jika tidak, akan terdapat laporan ralat konflik pergantungan balang.
<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>
Fail konfigurasi
Jika nama fail disesuaikan, anda perlu mengkonfigurasi
logging: config: xxxx.xml level: cn.jay.repository: trace
nama lalai log4j2-spring.xml dalam aplikasi. yml, Ini menjimatkan keperluan untuk mengkonfigurasi
templat fail konfigurasi dalam application.yml
log4j menggunakan fail .properties sebagai fail konfigurasi utama, dan kini log4j2 Ini kaedah telah ditinggalkan, dan kaedah .xml, .json atau .jsn digunakan Ini mungkin pembangunan teknologi yang tidak dapat dielakkan, kerana kebolehbacaan fail sifat benar-benar lemah.
<?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>
Pengenalan kepada parameter konfigurasi
Berikut ialah pengenalan ringkas kepada parameter konfigurasi yang biasa digunakan
Tahap log
Mekanisme: Jika tahap mesej log lebih besar daripada atau sama dengan tahap fail konfigurasi, ia akan direkodkan.
jejak: penjejakan, iaitu untuk memajukan program, anda boleh menulis output jejak
nyahpepijat: nyahpepijat, secara amnya sebagai tahap terendah , jejak pada dasarnya tidak digunakan.
maklumat: Keluarkan maklumat penting, yang biasa digunakan
amaran: Amaran, sesetengah maklumat bukanlah maklumat ralat, tetapi ia juga harus diberikan kepada pengaturcara Beberapa petua.
ralat: mesej ralat. Banyak digunakan.
maut: Ralat maut.
Sumber output
CONSOLE (output ke konsol)
FAIL (output ke fail )
Format
SimpleLayout: Paparkan dalam bentuk ringkas
HTMLLayout: Dalam Paparan jadual HTML
PatternLayout: Paparan borang tersuai
PatternLayout susun atur log tersuai:
%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地址
Butiran konfigurasi Log4j2
Konfigurasi nod akar
mempunyai dua atribut:
status
monitorinterval
mempunyai dua nod anak:
Penambah
Pembalak (menunjukkan berbilang Penyambung dan Pembalak).
status digunakan untuk menentukan tahap log cetakan log4j sendiri.
monitorinterval digunakan untuk menentukan selang pemantauan untuk konfigurasi semula automatik log4j. Minimum ialah 5s .
Nod Appenders
mempunyai tiga sub-nod biasa: Console, RollingFile, Fail
Nod Console digunakan untuk mentakrifkan output Appender pada konsol.
nama: Nyatakan nama Penampil
Biasanya hanya tetapkan lalai kepada SYSTEM_OUT, bukan SYSTEM_ERR
<.>Nod fail digunakan untuk mentakrifkan Appender of output fail ke lokasi yang ditentukan .
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中进行输出。
简单使用
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"); } }
使用lombok工具简化创建Logger类
lombok就是一个注解工具jar包,能帮助我们省略一繁杂的代码。具体介绍可以看我的这篇教程。
使用lombok后下面的代码等效于上述的代码,这样会更方便的使用日志。
@Slf4j public class LogExampleOther { public static void main(String... args) { log.error("Something else is wrong here"); } }
Atas ialah kandungan terperinci Bagaimana untuk menggunakan log4j2 logging dalam Springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!