最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn)

 更新時(shí)間:2019年10月09日 08:29:46   作者:碼農(nóng)小胖哥  
這篇文章主要介紹了SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

Log4j2是 Log4j 的進(jìn)化版本,并提供了許多 Logback 可用的改進(jìn),同時(shí)解決了 Logback 體系結(jié)構(gòu)中的一些固有問(wèn)題。而且日志處理中我們會(huì)用到kafka作為日志管道。而kafka客戶端依賴與Logback的兼容不是很完美,你可以選擇排除依賴沖突或者使用Log4j2 。
<!-- more -->

排除Logback依賴

Spring Boot 2.x默認(rèn)使用Logback日志框架,要使用 Log4j2必須先排除 Logback。

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter</artifactId>
 <exclusions>
   <!--排除logback-->
  <exclusion>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-logging</artifactId>
  </exclusion>
 </exclusions>
</dependency>

引入Log4j2依賴

<!--log4j2 依賴-->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

上面的 log4j2 已經(jīng)適配了slf4j日志門面,所以我們的代碼無(wú)需替換,只需要替換具體的日志框架以及對(duì)應(yīng)的配置文件。

配置Log4j2

創(chuàng)建log4j2.xml文件,放在工程resources目錄里。這樣就可以不加任何配置。如果你需要指定配置文件需要在Spring boot 配置文件application.yml中指定 logging.config 屬性。下面是一份比較詳細(xì)的 log4j2 配置文件 :

 <?xml version="1.0" encoding="UTF-8"?>
 <!--日志級(jí)別以及優(yōu)先級(jí)排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
 <!--Configuration后面的status,這個(gè)用于設(shè)置log4j2自身內(nèi)部的信息輸出,可以不設(shè)置,當(dāng)設(shè)置成trace時(shí),你會(huì)看到log4j2內(nèi)部各種詳細(xì)輸出-->
 <!--monitorInterval:Log4j能夠自動(dòng)檢測(cè)修改配置 文件和重新配置本身,設(shè)置間隔秒數(shù)-->
 <configuration status="WARN" monitorInterval="30">
  <!--先定義所有的appender-->
  <appenders>
  <!--這個(gè)輸出控制臺(tái)的配置-->
   <console name="Console" target="SYSTEM_OUT">
   <!--輸出日志的格式-->
    <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
   </console>
  <!--文件會(huì)打印出所有信息,這個(gè)log每次運(yùn)行程序會(huì)自動(dòng)清空,由append屬性決定,這個(gè)也挺有用的,適合臨時(shí)測(cè)試用-->
  <File name="log" fileName="log/test.log" append="false">
   <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
  </File>
  <!-- 這個(gè)會(huì)打印出所有的info及以下級(jí)別的信息,每次大小超過(guò)size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔-->
   <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
    <!--控制臺(tái)只輸出level及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->  
    <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    <Policies>
     <TimeBasedTriggeringPolicy/>
     <SizeBasedTriggeringPolicy size="100 MB"/>
    </Policies>
   </RollingFile>
   <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
    <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    <Policies>
     <TimeBasedTriggeringPolicy/>
     <SizeBasedTriggeringPolicy size="100 MB"/>
    </Policies>
   <!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認(rèn)為最多同一文件夾下7個(gè)文件,這里設(shè)置了20 -->
    <DefaultRolloverStrategy max="20"/>
   </RollingFile>
   <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
    <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    <Policies>
     <TimeBasedTriggeringPolicy/>
     <SizeBasedTriggeringPolicy size="100 MB"/>
    </Policies>
   </RollingFile>
  </appenders>
  <!--然后定義logger,只有定義了logger并引入的appender,appender才會(huì)生效-->
  <loggers>
   <!--過(guò)濾掉spring和mybatis的一些無(wú)用的DEBUG信息-->
   <logger name="org.springframework" level="INFO"/> 
   <logger name="org.mybatis" level="INFO"/>
   <root level="all">
    <appender-ref ref="Console"/>
    <appender-ref ref="RollingFileInfo"/>
    <appender-ref ref="RollingFileWarn"/>
    <appender-ref ref="RollingFileError"/>
   </root>
  </loggers>
 </configuration>

基本上你拿上面的配置根據(jù)你自己的需要更改一下即可生效。 windows 下 ${sys:user.home} 會(huì)將日志打印到用戶目錄下

調(diào)用Logger輸出日志

下面的示例代碼使用了神器lombok中的@Slf4j 注解可以很方便的使用 org.slf4j.Logger 對(duì)象。日常開(kāi)發(fā)盡量使用Slf4j門面來(lái)處理日志,盡量避免使用具體的日志框架。

package cn.felord.spring.security;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.util.Properties;

/**
 * @author dax
 * @since 2019/10/9 0:03
 */
@Slf4j
@RestController
@RequestMapping("/logging")
public class LogController {


 @GetMapping("/do")
 public String log() {

  log.info("log4j2 test date: {} info: {}", LocalDate.now(), "請(qǐng)關(guān)注公眾號(hào):Felordcn");
 
  return "log4j2";
 }
 
}

控制臺(tái)輸出 :[00:14:48:161] [INFO] - cn.felord.spring.security.LogController.log(LogController.java:23) - log4j2 test date: 2019-10-09 info: 請(qǐng)關(guān)注公眾號(hào):Felordcn 并存檔。

總結(jié)

今天我們將Spring Boot 2.x 的日志框架由默認(rèn)的Logback 替換為 log4j2 并著重的提及了一些實(shí)戰(zhàn)中使用的要點(diǎn)。相信你很快能夠掌握這一技巧。日志作為應(yīng)用運(yùn)行情況,業(yè)務(wù)執(zhí)行情況的重要依據(jù),是開(kāi)發(fā)排錯(cuò),業(yè)務(wù)追溯的重要保障。希望各位能夠重視起來(lái)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

作者:碼農(nóng)小胖哥

來(lái)源:https://segmentfault.com/a/1190000020618973

相關(guān)文章

  • SpringBoot解決循環(huán)調(diào)用問(wèn)題

    SpringBoot解決循環(huán)調(diào)用問(wèn)題

    作者在將SpringBoot從1.5版本升級(jí)至2.6版本,并遷移至阿里云上運(yùn)行后,遇到了循環(huán)調(diào)用問(wèn)題,在Jetty容器中運(yùn)行沒(méi)問(wèn)題,但在Tomcat容器中就出現(xiàn)了循環(huán)引用問(wèn)題,原因是SpringBoot 2.6不鼓勵(lì)循環(huán)引用,暴露出該問(wèn)題,作者提供了兩種解決思路
    2024-10-10
  • springboot解決使用localhost或127.0.01模擬CORS失效

    springboot解決使用localhost或127.0.01模擬CORS失效

    CORS允許不同源的網(wǎng)頁(yè)請(qǐng)求訪問(wèn)另一個(gè)源服務(wù)器上的某些資源,本文主要介紹了springboot解決使用localhost或127.0.01模擬CORS失效,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • SpringBoot如何接收前端傳遞參數(shù)

    SpringBoot如何接收前端傳遞參數(shù)

    這篇文章主要介紹了SpringBoot如何接收前端傳遞參數(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • Java中LinkedList數(shù)據(jù)結(jié)構(gòu)的詳細(xì)介紹

    Java中LinkedList數(shù)據(jù)結(jié)構(gòu)的詳細(xì)介紹

    這篇文章主要介紹了Java中LinkedList,Linked List 是 java.util 包中 Collection 框架的一部分,文中提供了詳細(xì)的代碼說(shuō)明,需要的朋友可以參考下
    2023-05-05
  • java獲取昨天日期字符串的方法

    java獲取昨天日期字符串的方法

    這篇文章主要介紹了java獲取昨天日期字符串的方法,涉及java針對(duì)日期與時(shí)間的運(yùn)算與轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2016-08-08
  • 深入理解Java編程線程池的實(shí)現(xiàn)原理

    深入理解Java編程線程池的實(shí)現(xiàn)原理

    這篇文章主要介紹了深入理解Java編程線程池的實(shí)現(xiàn)原理,涉及ThreadPoolExecutor類,線程池實(shí)現(xiàn)原理及示例等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java 控制流程、大數(shù)值、數(shù)組

    Java 控制流程、大數(shù)值、數(shù)組

    這篇文章主要給大家介紹的是Java 控制流程、大數(shù)值、數(shù)組的一些相關(guān)自來(lái)哦,感興趣的小伙伴可以參考下面文章的具體內(nèi)容,希望文章對(duì)你有所幫助
    2021-10-10
  • Java 泛型(Generic)簡(jiǎn)介及用法詳解

    Java 泛型(Generic)簡(jiǎn)介及用法詳解

    泛型是一種把類型明確的工作推遲到創(chuàng)建對(duì)象或者調(diào)用方法的時(shí)候才去明確的特殊的類型,參數(shù)化類型,把類型當(dāng)作參數(shù)一樣的傳遞,本文給大家介紹Java 泛型(Generic)概述及使用,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • JDK8新特性-java.util.function-Function接口使用

    JDK8新特性-java.util.function-Function接口使用

    這篇文章主要介紹了JDK8新特性-java.util.function-Function接口使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 深入淺出分析Java抽象類和接口【功能,定義,用法,區(qū)別】

    深入淺出分析Java抽象類和接口【功能,定義,用法,區(qū)別】

    這篇文章主要介紹了Java抽象類和接口,結(jié)合實(shí)例形式深入淺出的分析了java抽象類與接口的功能功能,定義,用法及區(qū)別,需要的朋友可以參考下
    2017-08-08

最新評(píng)論

广南县| 无极县| 涿州市| 鄂温| 湛江市| 贵定县| 德州市| 休宁县| 宜宾县| 鄯善县| 葵青区| 县级市| 黄梅县| 汉阴县| 灌阳县| 泽普县| 太保市| 石台县| 专栏| 临潭县| 苍山县| 乌拉特后旗| 康定县| 远安县| 北安市| 镇远县| 洞头县| 大关县| 汝城县| 读书| 秀山| 华阴市| 常山县| 景洪市| 建平县| 通城县| 调兵山市| 武威市| 固原市| 建湖县| 沅陵县|