Rumah > Java > javaTutorial > teks badan

Bagaimana untuk menggunakan log4j2 logging dalam Springboot

WBOY
Lepaskan: 2023-05-22 08:58:11
ke hadapan
1050 orang telah melayarinya

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.

Bagaimana untuk menggunakan log4j2 logging dalam Springboot

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>
Salin selepas log masuk

Fail konfigurasi

Jika nama fail disesuaikan, anda perlu mengkonfigurasi

logging:
 config: xxxx.xml
 level:
 cn.jay.repository: trace
Salin selepas log masuk

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>
Salin selepas log masuk

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地址
Salin selepas log masuk

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

    <.>
  • PatternLayout: Format output, jika tidak ditetapkan, lalainya ialah: %m%n.

Nod fail digunakan untuk mentakrifkan Appender of output fail ke lokasi yang ditentukan .

  • nama: Nyatakan nama Penampil.

  • 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");
 }
}
Salin selepas log masuk

使用lombok工具简化创建Logger类

lombok就是一个注解工具jar包,能帮助我们省略一繁杂的代码。具体介绍可以看我的这篇教程。

使用lombok后下面的代码等效于上述的代码,这样会更方便的使用日志。

@Slf4j
public class LogExampleOther {
 
 public static void main(String... args) {
 log.error("Something else is wrong here");
 }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk menggunakan log4j2 logging dalam Springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!