springBoot logback日誌配置管理 aop切面日誌模組管理,單獨輸出日誌檔案
1.springBoot 日誌配置(將controller包下的日誌單獨輸出到一個檔案下)
1
我們遵守約定>配置>編碼的原則,如果使用logback進行日誌管理,先新增pom 檔案但是spring-boot-starter
其中包含了 spring-boot-starter-logging依賴 所以不需要新增,
2
修改application.yml檔案
logging: level: com: wintac: dao: plat: debug controller: api: plat: config: classpath:logback-dev.xml
level 設定輸出的日誌級別,預設是dubug ;com.wintac.dao.plat是控制檯輸出dao層的所有的檔案日誌 入參 sql
config: classpath:logback-dev.xml 設定詳細的log back配置
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="true"> <!-- 控制檯設定 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoder 預設配置為PatternLayoutEncoder --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--如果只是想要 Info 級別的日誌,只是過濾 info 還是會輸出 Error 日誌,因為 Error 的級別高, 日誌名稱,如果沒有File 屬性,那麼只會使用FileNamePattern的檔案路徑規則 如果同時有<File>和<FileNamePattern>,那麼當天日誌是<File>,明天會自動把今天 的日誌改名為今天的日期。即,<File> 的日誌都是當天的。 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--檔案路徑,定義了日誌的切分方式——把每一天的日誌歸檔到一個檔案中,以防止日誌填滿整個磁碟空間--> <FileNamePattern>/opt/logs/api/%d{yyyy-MM-dd}.log</FileNamePattern> <!--只保留最近90天的日誌--> <maxHistory>90</maxHistory> <!--用來指定日誌檔案的上限大小,那麼到了這個值,就會刪除舊的日誌--> <!--<totalSizeCap>1GB</totalSizeCap>--> </rollingPolicy> <!--日誌輸出編碼格式化--> <encoder> <charset>UTF-8</charset> <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern> </encoder> </appender> //新增不同資料夾的日誌輸出地點 <appender name="controllerLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- <file>D:/ZM_Interface/CodeCloud_SX/test/log/controller/controller.log</file>--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>opt/logs/api/controller/logs-%d{yyyy-MM-dd}.log</fileNamePattern> <!--只保留最近90天的日誌--> <maxHistory>90</maxHistory> <!--用來指定日誌檔案的上限大小,那麼到了這個值,就會刪除舊的日誌--> <totalSizeCap>1GB</totalSizeCap> </rollingPolicy> <encoder> <charset>UTF-8</charset> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> </encoder> </appender> <springProfile name="dev"> <root level="info"> <appender-ref ref="STDOUT"/> </root> </springProfile> <springProfile name="prod"> <root level="info"> <appender-ref ref="STDOUT"/> <appender-ref ref="fileInfoLog"/> </root> //此處配置是將controllerLog於com.wintac.controller.api.plat包進行管理,只輸出此包的日誌 <logger name="com.wintac.controller.api.plat" level="INFO" additivity="false"> <appender-ref ref="controllerLog" /> </logger> </springProfile> </configuration>
ConsoleAppender控制檯輸出
<springProfile>配置不同環境的配置 可以包含上面的<appender> 這裡配置了兩個環境prod 和dev
<encoder>
表示對日誌進行編碼:
- %d{HH: mm:ss.SSS}——日誌輸出時間
- %thread——輸出日誌的程序名字,這在Web應用以及非同步任務處理中很有用
- %-5level——日誌級別,並且使用5個字元靠左對齊
- %logger{36}——日誌輸出者的名字
- %msg——日誌訊息
- %n——平臺的換行符
ThresholdFilter為系統定義的攔截器,例如我們用ThresholdFilter來過濾掉ERROR級別以下的日誌不輸出到檔案中。如果不用記得註釋掉,不然你控制檯會發現沒日誌~
loger>
用
來設定某一個包或者具體的某一個類的日誌列印級別、以及指定<appender>
。<loger>
僅有一個name
屬性,一個可選的level
和一個可選的addtivity
屬性。
name
:用來指定受此loger約束的某一個包或者具體的某一個類。level
:用來設定列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。如果未設定此屬性,那麼當前loger將會繼承上級的級別。addtivity
:是否向上級loger傳遞列印資訊。預設是true。
3:aop
在自定義logback檔案之前往往有時候需要對專案中的某些層進行檔案的aop 切面日誌編寫
package com.tianyalei.testelk.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.validation.ObjectError;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
/**
* 日誌切面
*/
@Aspect
@Component
public class LogAspect {
private Logger logger = LoggerFactory.getLogger(getClass().getName());
private ObjectError error;
@Pointcut("execution(* com.wintac.controller.api.plat..*.*(..))")
public void webLog() {
}
@Before("webLog()")
public void deBefore(JoinPoint joinPoint) throws Throwable {
// 接收到請求,記錄請求內容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// HttpServletRequest request = attributes.getRequest();
logger.info("-------------------使用者發起請求-----------------");
// 記錄下請求內容
// logger.info("URL : " + request.getRequestURL().toString());
// logger.info("HTTP_METHOD : " + request.getMethod());
//如果是表單,引數值是普通鍵值對。如果是application/json,則request.getParameter是取不到的。
// logger.info("HTTP_HEAD Type : " + request.getHeader("Content-Type"));
logger.info("IP : " + request.getRemoteAddr());
logger.info("使用者名稱")
logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
if ("application/json".equals(request.getHeader("Content-Type"))) {
//記錄application/json時的傳參,SpringMVC中使用@RequestBody接收的值
logger.info(getRequestPayload(request));
} else {
//記錄請求的鍵值對
for (String key : request.getParameterMap().keySet()) {
logger.info(key + "----" + request.getParameter(key));
}
}
}
@AfterReturning(returning = "ret", pointcut = "webLog()")
public void doAfterReturning(Object ret) throws Throwable {
// 處理完請求,返回內容
logger.info("方法的返回值 : " + ret);
logger.info("------------------請求結束------------------");
}
//後置異常通知
// @AfterThrowing(throwing = "ex", pointcut = "webLog()")
// public void throwss(JoinPoint jp, Exception ex){
// logger.info("方法異常時執行.....");
// }
//後置最終通知,final增強,不管是丟擲異常或者正常退出都會執行
// @After("webLog()")
// public void after(JoinPoint jp){
// logger.info("方法最後執行.....");
// }
<!-- private String getRequestPayload(HttpServletRequest req) {
StringBuilder sb = new StringBuilder();
try(BufferedReader reader = req.getReader()) {
char[]buff = new char[1024];
int len;
while((len = reader.read(buff)) != -1) {
sb.append(buff,0, len);
}
}catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
} -->
}
此處是對所有controller類的切面程式設計
切點方程
在各個pattern中可以使用“*”來表示匹配所有。在(param-pattern)中,可以指定具體的引數型別,多個引數間用“,”隔開,各個也可以用“*”來表示匹配任意型別的引數,如(String)表示匹配一個String引數的方法;(*,String)表示匹配有兩個引數的方法,第一個引數可以是任意型別,而第二個引數是String型別;可以用(..)表示零個或多個任意引數。
現在來看看幾個例子:
1)execution(* *(..))
表示匹配所有方法
2)execution(public * com. savage.service.UserService.*(..))
表示匹配com.savage.server.UserService中所有的公有方法
3)execution(* com.savage.server..*.*(..))
表示匹配com.savage.server包及其子包下的所有方法
@Pointcut("execution(* com.wintac.controller.api.plat..*.*(..))")
public void webLog() {
}
所有下面方法的@Before,使用 @Before("webLog()")
controller
@PostMapping(value = "PriceIntoPlan",name = "新增報價到行程")
@ApiOperation(value = "新增報價到行程",notes = "趙滿")
public Response priceIntoPlan(@RequestBody QutationDetailRequest qutationDetailRequest){
org.slf4j.Logger logger = LoggerFactory.getLogger(getClass().getName());
Response response = new Response();
if(qutationDetailRequest.getPlandayId()!=null){
try {
boolean b = tQuotationDetailService.PriceStandIntoDetail(qutationDetailRequest);
response.setData(b);
response.setMsg("新增成功");
logger.info("新增報價到行程");
} catch (Exception e) {
response.setData(false);
response.setMsg("新增失敗"+e);
}
}else {
response.setMsg("行程天為空");
}
return response;
}
個人感覺因為在logback檔案裡使用了<logger name="com.wintac.controller.api.plat" level="INFO" additivity="false">
<appender-ref ref="controllerLog" />
</logger>
所以需要將aop 類放到此包下,要不然會輸出到檔案中
將controller包下的日誌單獨輸出到一個檔案下,且控制檯全部列印
java 程式碼
相關推薦
springBoot logback日誌配置管理 aop切面日誌模組管理,單獨輸出日誌檔案
1.springBoot 日誌配置(將controller包下的日誌單獨輸出到一個檔案下) 1 我們遵守約定>配置>編碼的原則,如果使用logback進行日誌管理,先新增pom 檔案但是spring-boot-starter其中包含了 spring-bo
springboot logback-spring配置mybatis日誌輸出
<logger name="com.mycompany.myapp.mapper.MyMapper" level="DEBUG" additivity="false"/> log4j的ad
vsftpd日誌配置及查看——可以將vsftpd記錄在系統日誌裏
常見 word 數據 配置 解決 tle user xferlog anon vsftpd日誌配置及查看 vsftpd ftp服務器的日誌設置,可以通過修改主配置文件/etc/vsftpd.conf實現。主配置文件中與日誌設置有關的選項包括xferlog_enable 、
SpringBoot logback從配置中心讀取屬性
官網描述 根據官網的描述可以得到這樣的資訊:logback.xml載入早於application.yml,如果直接通過${引數key}的形式獲取是無法獲取到對應引數值的。解決的方法是: <springProperty scope="context" name="mongo.host" so
Spring 4.0 學習日記(9) ---XML配置實現AOP切面
Spring建立代理的規則 1.預設使用Java動態代理來建立AOP代理 2.當需要代理的類不是代理介面的時候,Spring會切換為使用CGLIB代理,也可強制使用CGLIB 其實Xml配置更簡單 直接看程式碼就懂了 介面類 package co
log4j不列印sql,不輸出日誌檔案到指定目錄
#log4j.rootLogger=CONSOLE,info,error,DEBUG log4j.rootLogger=infoA,errorA,CONSOLE,DEBUGA //注意這裡不要用INFO,DEBUG等 改個名字 log4j.appender.CONSOLE=org.apach
linux java程序後臺啟動,並輸出日誌到指定檔案中
linux 中讓java程序以後臺形式執行,並輸出日誌到指定檔案中。 舉例: 現在linux /home/pro/application/monitor下有一個jar包叫zop-monitor-web
springboot預設的日誌管理工具logback的配置
1.首先建立xxx-spring.xml(必須是以spring結尾)2.logback-spring.xml的內容編輯<?xml version="1.0" encoding="UTF-8"?> <Configuration status="warn">
springBoot(4):日誌配置-logback
springboot 日誌配置-logback和log4j2 一、簡介支持日誌框架:Java Util Logging, Log4J2 and Logback,默認是使用logbacklogback配置方式spring boot默認會加載classpath:logback-spring.xml或者cl
springboot日誌配置Logback
mat classpath path 節點 %d .text fixed ger tps springboot可以通過application.yml或者application.properties中配置如下屬性指定日誌配置 #logback日誌配置xml存放路徑配置logg
SpringBoot 日誌配置LogBack(二)
接下來則進行自定義配置了,貼上一個配置示例(logback-spring.xml): <?xml version="1.0" encoding="UTF-8" ?> <!-- logback整合日誌 --> <configuration s
【SpringBoot教程五】:SpringBoot+LogBack日誌配置
無論從設計上還是實現上,Logback相對log4j而言有了相對多的改進。不過儘管難以一一細數,這裡還是列舉部分理由為什麼選擇logback而不是log4j。牢記logback與log4j在概念上面是很相似的,它們都是有同一群開發者建立。所以如果你已經對log4j很熟悉,你也可以很快上手logback。如
SpringBoot整合+logback日誌配置
本次演示的程式碼結構如下,基於maven,整合SpringBoot、Spring、Mybaits的SSM框架。同時測試logback日誌框架的使用及配置。 1.建立maven工程,修改pom.xml檔案 <project xmlns="http://maven.ap
Springboot 自定義註解 AOP切面獲取操作日誌
編碼思想: 新增和修改資料,記錄使用者操作資訊(建立人,修改人) ,然後每個模組打算根據操作資料的主鍵id關聯日誌表查詢操作人資訊;需要宣告每個模組名稱及操作方法(constant包中便是宣告的模組和操作方法列舉) 檔案目錄: 1. build.gradle引入jar
SpringBoot專案的logback日誌配置(包括列印mybatis的sql語句)
我在這就開門見山直接介紹我們專案日誌的配置使用吧!~ 1、基本介紹 預設情況下,Spring Boot專案就會用Logback來記錄日誌,並用INFO級別輸出到控制檯。如下圖: 實際開發中我們不需要直接新增logback日誌依賴。 你會
35.再談SpringBoot自定義日誌配置--LogBack.xml
在實際專案開發中我們可能自定義日誌配置檔案。 以下為自定義LogBack配置。 application.properties logging.config=classpath:logback-spring.xml logback-spring.xml 以下配置日誌具有日
【SpringBoot系列】五、SpringBoot 日誌配置(logback)
SpringBoot支援Java Util Logging,Log4J,Log4J2和Logback日誌框架,預設採用logback日誌。在實際SpringBoot專案中使用SpringBoot預設日誌配置是不能夠滿足實際生產及開發需求的,需要選定適合的日誌輸出框架
最全面的 Spring事務管理和AOP切面日誌的注入 —aop:pointcut expression解析
先來看看這個spring的配置檔案的配置: <!-- 事務管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTran
SpringBoot+LogBack日誌配置
無論從設計上還是實現上,Logback相對log4j而言有了相對多的改進。不過儘管難以一一細數,這裡還是列舉部分理由為什麼選擇logback而不是log4j。牢記logback與log4j在概念上面是很相似的,它們都是有同一群開發者建立。所以如果你已經對log4j很熟悉,你也可以很快上手logback。如
SpringBoot Logback日誌配置
Logback的配置介紹: 1、Logger、appender及layout Logger作為日誌的記錄器,把它關聯到應用的對應的context上後,主要用於存放日誌物件,也可以定義日誌型別、級別。 Appender主要用於指定日誌輸出的目的地,目的地可以