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">
<!–<FileNamePattern>${LOG_FILE_PATH}.%d{yyyy-MM-dd HH:mm:ss}.%i.log</FileNamePattern>–>
<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-