1. 程式人生 > >Spring_Cloud自定義的LogBack記錄日誌

Spring_Cloud自定義的LogBack記錄日誌

環境:windows7,Intellij Idea ,Java 8 ;
最近閒暇之餘,想研究一下Spring Cloud的eureka的叢集以及RBC呼叫,在本地測試除錯,日誌肯定少不了,所以就順便把logback也自定義實現了一下,誰知遇到的坑還真不少;列出來作為記錄並與廣大有此需求的同胞共享與討論;

1.引入的依賴:其實logback的依賴不用特意的新增,只需要新增

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId
>
</dependency>

web依賴,自然就會有logback的依賴;
2.自定義建立日誌檔案:在使用的Intellij Idea編譯器,建立logback.xml檔案時,沒有Scheme和DTD文件約束可以使用,優點是xml檔案只需要滿足基礎的xml標籤語法要求即可,但悲催的是都不知道定義那些標籤以及寫標籤的時候提示都沒有。經過我多次重啟反覆修改後,總結整個xml可以分成以下幾個模組:
spring Cloud 預設的檔名是logback.xml,所以我們自定義的日誌檔案可以使用預設的,但最好定義成logback-xxxx.xml;
1>.xml頭部,既然是xml檔案,基礎的字符集標籤肯定少不了:

<?xml version="1.0" encoding="UTF-8"?>

2>.logback 根標籤:
在logBack中根標籤是。此標籤包含有三個屬性:debug、scan、scanPeriod:
2.1>:debug:即是否打印出logback內部的日誌資訊,預設為false;
2.2>:scan:是否掃描配置檔案,與spring boot 熱部署結合使用,當配置檔案更改時,會自動啟動;
2.3>:scanPeriod:掃描配置檔案是否有修改的時間間隔;該屬性必須與scan屬性結合使用,當scan屬性為true時,會已自定義的時間掃描配置檔案;預設為1分鐘。
3>.自定義標籤::
在該標籤中可以集中定義一些變數的名字以及值,然後再其他的地方通過${}引用;該用法類似於pom檔案中標籤的用法;比如:我在使用時將日誌檔案的路基以及名稱定義在文件的頭部;以及控制檯或者檔案中日誌輸出的格式,都定義在該標籤中;

//格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別 從左顯示5個字元寬度  %msg:日誌訊息,%n是換行符
//<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<property name="CONSOLE_LOG_PATTERN"
          value="%d{yyyy-MM-dd HH:mm:ss.SSSS} - [thread:%thread] - [level:%-5level] - [%class : %method : %line] - %msg %n"/>
<property name="FILE_LOG_PATTERN"
          value="%d{yyyy-MM-dd HH:mm:ss.SSS} - [thread:%thread] - [level:%-5level] - [%class : %method : %line] - %msg %n"/>
//路徑不能使用相對路徑  路勁上的分隔符 windows 上和linux上不一樣 
<property name="LOG_FILE_PATH" value="D:/Log/Test-Cluster-Master-Log.log"/>
<property name="APPENFER_NAME_CONSOLE" value="CONSOLE"/>
<property name="APPENDER_NAME_FILE" value="FILE"/>
<property name="SPRING_PROFILE_TESR" value="test"/>
<property name="ROOT_LOG_LEVEL" value="debug"/>

(以上定義的變數在下面都有使用)
4>.appender標籤:該標籤集中配置一種日誌的格式;比如:控制檯輸出日誌的配置,輸出到日誌檔案中的日誌的配置;
該標籤包含有兩個屬性:
name 屬性:用於定義此配置的名稱,也方便其他地方的引用該名稱(比如 與root標籤同時使用時會引用這個name屬性);
class屬性:用於定義該appender標籤引用的類:一般有 ConsoleAppender(用於控制檯輸出日誌配置) 和 RollingFileAppender(用於檔案中輸出日誌的配置)兩個;
控制檯輸出日誌的配置:

<appender name="${APPENFER_NAME_CONSOLE}" class="ch.qos.logback.core.ConsoleAppender">
 #輸出到控制檯的日誌的 格式 以及 使用的 字符集
  <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>${CONSOLE_LOG_PATTERN}</pattern>
    <charset>UTF-8</charset>
  </encoder>
</appender>

日誌檔案的配置:

<appender name="${APPENDER_NAME_FILE}" class="ch.qos.logback.core.rolling.RollingFileAppender">
 <!--<File>${LOG_FILE_PATH}</File>-->
  #日誌檔案 分隔儲存的策略  基於 大小和日期的方式 分隔
  <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    #日誌檔案 輸出的檔名的格式 以及歸檔的分隔方式
    #<FileNamePattern>${LOG_FILE_PATH}.%d{yyyy-MM-dd HH HH:mm:ss}.%i.log</FileNamePattern>有敏感符號 建立不成功
    <FileNamePattern>D:\Log\Test_Cluster_Master_Log-%d{yyyy-MM-dd}-%i.log</FileNamePattern>                                        <MaxHistory>1</MaxHistory> ----  日誌檔案保留的最大時長  只能是整數 
     <maxFileSize>1MB</maxFileSize> ------ 單個日誌的最大容量 ,超出的話 會重新建立日誌檔案
     <totalSizeCap>2MB</totalSizeCap>----日誌的總的大小
  </rollingPolicy>

   <encoder><!--class屬性 可以省去-->
       <pattern>${FILE_LOG_PATTERN}</pattern>
       <charset>UTF-8</charset>
   </encoder>
</appender>
  # 以日期為基礎 分隔日誌檔案
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      &lt;!&ndash;<FileNamePattern>${LOG_FILE_PATH}.%d{yyyy-MM-dd HH:mm:ss}.%i.log</FileNamePattern>&ndash;&gt;
      <FileNamePattern>D:\Log\Test_Cluster_Slave_Log-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
      <MaxHistory>1</MaxHistory>
  </rollingPolicy>
  # 按照大小的方式 分隔日誌檔案
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
       <maxFileSize>1MB</maxFileSize>
   </triggeringPolicy>

注意事項:
1 已上分隔日誌儲存的方式,儘量使用一種使用基於Size和Time就既可以根據時間來分隔又可以根據大小來分隔日誌;
2 在windows上不要使用File標籤, 否則下面定義的FileNamePattern不會起作用。如果使用的話,在控制檯會有日誌顯示,修改名字失敗的記錄,因為在windows上先通過File標籤建立了檔案並定義了檔名,但是通過FIleNamePattern修改名字的時候,會因為檔案被佔用中而修改名稱失敗。
3 如果使用基於SizeAndTimeBasedRollingPolicy的方式分隔日誌的話,需要使用%i的引數來生成同一個時間段內,由於大小的不同產生的多個日誌檔案的自增的數,比如:Test_log-1.log;Test_log-2.log; Test_log-3.log;…….;
4:在windows上日誌檔案的命名不能有多個。號,否則會報日誌檔名錯誤之類的異常;儘量使用下劃線分隔或者破折號分隔名字;

5>.root標籤:整個xml檔案中只能有一個此標籤,用於定義appender的日誌級別;
日誌的級別從低到高依次是:Trace < debug < info < waen < error 五個級別;所以該標籤會有一個 level屬性用於定義記錄的級別;

<root level="${ROOT_LOG_LEVEL}">
    <appender-ref ref="${APPENFER_NAME_CONSOLE}"/>
    <appender-ref ref="${APPENDER_NAME_FILE}"/>
</root>

文章的最後,附上本人這個專案的git地址——- 專案地址 ,如果需要獲取詳細的解釋或者程式碼的可以clone;而且這個專案我最近也是自己在做,如果有什麼好的建議歡迎留言

相關推薦

Spring/Springboot AOP 定義註解記錄日誌操作

本文采用的方法是使用註解記錄日誌,廢話不多說直接上乾貨。 建立一個自定義@Log日誌標籤 package com.insurance.dao; import java.lang.annotation.Documented; import java.lang.ann

WCF定義Attribute記錄日誌或異常

1、定義一個attribute,同時繼承介面 IOperationBehavior [AttributeUsage(AttributeTargets.Method)] public class RecordAttribute : Attribute, IOpera

Spring_Cloud定義LogBack記錄日誌

環境:windows7,Intellij Idea ,Java 8 ; 最近閒暇之餘,想研究一下Spring Cloud的eureka的叢集以及RBC呼叫,在本地測試除錯,日誌肯定少不了,所以就順便把logback也自定義實現了一下,誰知遇到的坑還真不少;列出

SpringBoot------定義Logback日誌

1.新增pom.xml的依賴 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://m

Logback中如何定義靈活的日誌過濾規則

當我們需要對日誌的列印要做一些範圍的控制的時候,通常都是通過為各個Appender設定不同的Filter配置來實現。在Logback中自帶了兩個過濾器實現:ch.qos.logback.classic.

logback系列之七:繼承RollingFileAppender,儲存定義檔名的日誌

繼承類:package com.hk3t.air.system.log; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos

使用定義logback.xml檔案時,出現沒有許可權建立日誌檔案的錯誤

首先如果你沒有建立好資料夾的話,你需要建立所需要的資料夾 資料夾建立好了,然後給你的日誌檔案所屬的資料夾加權,比如你的路徑是這個樣的:/var/log/aa/aa.log, 那麼你就需要給aa資料夾加上相應的許可權,在命令列上面執行命令:chmod +777

基於SSM利用SpringAOP切面及定義註解 記錄每次操作記錄(操作日誌 同理)

前段時間根據業務需求要記錄每次操作時的相關資訊:本帖方式通過在SpringMVC中的Controller設定一個自定義註解類來進行對資料的接收,通過 SpringAOP切面來對接收的資料進行邏輯處理. 在事先根據業務需求建立的一個實體類(如: UploadCount)的基礎

spring Aspect 實現定義註解的日誌記錄,有時候註解類不起作用的原因分析

使用只要在controller的method上加上@ActionLog(actionGroup = "freeorder",actionType = "update",actionDesc = "操作",insertDb = true)其中insertDb 代表是否插入資料

Spring AOP 定義註解記錄操作日誌

1.自定義註釋 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface Log { LogType type() default Lo

Log4Net 之將定義屬性記錄到文件中 (三)

hive days bsp 文本 處理 message homepage layout backup 即解決了將自定義屬性記錄到數據庫之後。一個新的想法冒了出來,自定義屬性同樣也能記錄到文件中嗎?答案是肯定的,因為Log4Net既然已經考慮到了數據庫記錄方式,當然也一定考慮

Spring AOP 定義註解實現日誌管理

目錄 一、配置檔案 二、新建一個日誌實體類Log 三、編寫 service 層 四、編寫 service 層的實現 serviceimpl 五、自定義註解類 六、編寫切面類 七、spring + aop 需要的 jar 包 部落格的程式碼是基於 SSM 環境編寫的

spring-AOP+定義註解實現日誌管理(註解方式實現)

一、場景 後臺管理系統中,管理員作業系統時生成日誌儲存在資料庫中。 二、實現 1、jar包依賴 <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> <dependency&

ssm springaop 定義註解加日誌資料到資料庫

弄得過程中出現過好多問題。(報錯時候切入方法不正常執行,) 1、需要導的包:slf4j-log4j12-1.6.2.jar  slf4j-api-1.6.2.jar  (這兩個jar包版本最好保持一致,之前我使用不同版本報錯) aspectjweaver-1.6

《SpringBoot學習篇》(5)AOP+定義註解實現日誌管理

用到的AOP註解:@Aspect  @Pointcut  @After 首先看一下如何呼叫自定義註解: @MyLog(module="老師模組", method="查詢全部") @RequestMapping("/all") public List

使用slf4j和logback記錄日誌

前言 Logback是由log4j創始人設計的一個開源日誌元件, 效能比log4j的效能還好, 將會逐步地替代掉log4j,Logback需要和slf4j一起使用,slf4j只提供介面,沒有提供具體的實現,Logback很好的實現slf4j中的介面,現在來看看

利用Spring AOP定義註解解決日誌和簽名校驗

一、需解決的問題 部分API有簽名引數(signature),Passport首先對簽名進行校驗,校驗通過才會執行實現方法。     第一種實現方式(Origin):在需要簽名校驗的接口裡寫校驗的程式碼,例如: boolean isValid = accountService.val

資料脫敏——基於Java定義註解實現日誌欄位脫敏

  上文說了資料過敏主要有兩個思路:第一個就是在序列化實體之前先把需要脫敏的欄位進行處理,之後正常序列化;第二個就是在實體序列化的時候,對要脫敏的欄位進行處理。 脫敏實現思路   這裡探討第一種方法,用基於自定義註解的方式實現日誌脫敏。   要對

【Spring】每個程式設計師都使用Spring(四)——Aop+定義註解做日誌攔截

一、前言       上一篇部落格向大家介紹了Aop的概念,對切面=切點+通知 、連線點、織入、目標物件、代理(jdk動態代理和CGLIB代理)有所瞭解了。理論很強,實用就在這篇部落格介紹。       這篇部落格中,小編向大家介紹springAop很常見的

寫給菜鳥,如何使用logback記錄日誌和發郵件?

一、簡易使用logback,不含有logback.xml 下載 logback和slf4j的幾個jar包,包括3個即可:logback-core-1.1.7.jar 、logback-classic-