1. 程式人生 > >java後臺註解式日誌,利用註解記錄日誌

java後臺註解式日誌,利用註解記錄日誌

日誌記錄簡化,只需要在action或者controller的方法上加logging註解即可。註解:@Logging(description = "{username}登入"),description是註解內容,{}中為動態引數,是傳入該方法中的指定po的屬性。

註解類程式碼:

package cn.com.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 日誌註解
 * @author ZhangShaobo
 * @date 2017-09-04
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Logging {
	
	String description();
	
}

具體的日誌實現類,該類中loginfo方法需要在攔截器中呼叫。
package cn.com.util;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.ss.formula.functions.T;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.com.annotation.Logging;

/**
 * 日誌註解的具體實現類
 * @author ZhangShaobo
 * @date 2018-09-04
 */
public class LogAnnoUtil {
	
	private static Logger log = LoggerFactory.getLogger(LogAnnoUtil.class);
	
	/**
	 * 根據註解記錄日誌
	 * @param t action物件
	 * @param methodName 呼叫的action方法名稱
	 * @param map 引數map
	 */
	public static <T> void loginfo(T t, String methodName, Map map){
		Method [] methods = t.getClass().getDeclaredMethods();
    	for (final Method m : methods) {
    		if (m.getName().equals(methodName)) {
    			if(m.isAnnotationPresent(Logging.class)){
    				String desc = m.getAnnotation(Logging.class).description();
    				List<String> list = descFormat(desc);
    				for (String s : list) {
						String value = map.get(s).toString();
						desc = desc.replace("{"+s+"}", value);
					}
    				// 暫時只是輸出到了控制檯,具體需要存庫或者存快取,需要改這段程式碼
    				log.info(desc);
    			}
			}
			
		}
	}
	
	/**
	 * 獲取日誌資訊中的動態引數,然後替換
	 * @param desc
	 * @return
	 */
	private static List<String> descFormat(String desc){
		List<String> list = new ArrayList<>();
		Pattern pattern = Pattern.compile("\\{([^\\}]+)\\}"); 
        Matcher matcher = pattern.matcher(desc); 
        while(matcher.find()){ 
            String t = matcher.group(1); 
            list.add(t);
        }
		return list;
	}
	
	
}

攔截器中寫呼叫,以上程式碼實現的是在struts框架中用註解記錄日誌,springmvc或者springboot需要適當更改程式碼。有好的建議或者有不明白的地方歡迎評論溝通!

相關推薦

java後臺註解日誌利用註解記錄日誌

日誌記錄簡化,只需要在action或者controller的方法上加logging註解即可。註解:@Logging(description = "{username}登入"),description是註解內容,{}中為動態引數,是傳入該方法中的指定po的屬性。 註解類程式碼

模仿spring-aop的功能利用註解搭建自己的框架。

屬性 def name rac java8 out fault 一個 lte 入JAVA坑7月有余,也嘗試自己手動搭建框架,最近對spring aop的這種切面很著迷,為此記錄下自己目前搭出來的小小的demo,後續有時間也會繼續改進自己的demo。望大神們不吝賜教。   主

Spring自動注入利用註解實現spring基本配置詳解Spring註解快速入門

Spring註解 1.準備工作 (1)匯入common-annotations.jar (2)匯入schema檔案 檔名為spring-context-3.0.3.RELEASE.jar (3)在xml的beans節點中配置 2.xml配置工作 <?xml

java分布事務及解決方案

ted 即使 線下 提升 nts 20px lan term 不能 1、什麽是分布式事務 分布式事務就是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位於不同的分布式系統的不同節點之上。以上是百度百科的解釋,簡單的說,就是一次大的操作由不同的小操作組成,這些

Java後臺傳送post請求並接收返回資訊

/** * 向指定的 URL傳送遠端POST方法的請求 * @param url傳送請求的 URL * @param json請求引數, * @return 所代表遠端資源的響應結果 */ public static JSONObject sendPost(String

java後臺接收json資料報錯com.alibaba.fastjson.JSONObject cannot be cast to xxx

  從前臺接收json封裝的list資料,在後臺接收時一直報錯,com.alibaba.fastjson.JSONObject cannot be cast to xxx,   使用這種方式接收可以接收 1 @RequestMapping(value = "/insertUser", method

Java後臺匯出Excel表沒有出現下載提示問題解決

#24如題:        最近在作一個前端頁面點選按鈕,後端查詢到資料之後匯出Excel的功能,具體匯出Excel的工具方法就不詳說了,網上一大堆,現在說說碰到的問題:         我是先寫好controller以及業務層程式碼,將地址告訴前端,前端訪問之後F12看

Spring整合Rabbitmq收集Logback日誌利用進行Logstash資料整理儲存到Elasticsearch中

專案中我們常用的是把Logback列印的日誌儲存到檔案中儲存到硬碟上,這樣不利於日誌的收集和分析。 以下演示在SpringBoot中通過rabbitmq收集logback日誌儲存到Elasticsearch中。 環境準備:安裝RabbitMQ,安裝Elasticsearc

java後臺呼叫簡訊介面實現傳送簡訊驗證碼的控制層實現

1.設計:使用者填寫手機號,點選獲取驗證碼按鈕,controller層獲得所要傳送驗證碼的手機號,隨機生成六位數的驗證碼。呼叫傳送簡訊介面url向此手機號傳送驗證碼。注意:下面的程式碼採用的是雲信使的簡訊驗證碼介面,不同的驗證碼更換不同的url格式,即可。 `

第六章 註解控制器詳解——註解控制器執行流程及處理器定義

6.1、註解式控制器簡介 一、Spring2.5之前,我們都是通過實現Controller介面或其實現來定義我們的處理器類。已經@Deprecated。 二、Spring2.5引入註解式處理器支援,通過@Controller 和 @RequestMapping註解定義我們

【Matlab】利用diary記錄日誌/儲存命令視窗輸出

matlab 中可以利用diary函式記錄下命令列視窗的輸出到指定檔案中,方便後期檢查除錯和執行資訊。 diary diary是matlab中的日誌工具,可以將Command Window 中的內容儲存到檔案中去。使用方法: 在命令列中輸出: diary 'path

com.google.gson.JsonSyntaxException: java.lang.NumberFormatException使用GsonFormat採坑記錄

今天依舊從PostMan測試介面,拿JSON格式資料。使用GsonFormat進行格式轉換。 然後進行網路請求,但是執行程式,出現錯誤。 錯誤如下所示: com.google.gson.JsonSynt

winform程式利用Log4net記錄日誌

新建winform窗體程式。然後新增對應.NET FramerWork版本的log4net.dll引用。  新增引用後在  AssemeblyInfo中新增如下語句: [assembly: log4net.Config.XmlConfigurator(Watch = tr

MYSQL啟用日誌和查看日誌

ati 文件中 usr bin imp abi col 慢查詢日誌 tail mysql有以下幾種日誌: 錯誤日誌: -log-err 查詢日誌: -log 慢查詢日誌: -log-sl

利用ThreadLocal記錄日誌

   在專案中記錄日誌是必須的,但是往往在記錄日誌的時候都是通過logger.debug("...")來記錄的,程式一邊執行一邊記錄日誌,尤其在多執行緒或者Web應用中,同一時間可能有不同的日誌記錄到同一個檔案中去,當出現錯誤的時候就不能確定在那些資訊是你想關心的.因此如果我們在一個程式的開始的地方開始記錄日

.NET Core的日誌[5]:利用TraceSource寫日誌

從微軟推出第一個版本的.NET Framework的時候,就在“System.Diagnostics”名稱空間中提供了Debug和Trace兩個類幫助我們完成針對除錯和跟蹤資訊的日誌記錄。在.NET Framework 2.0中,微軟引入了TraceSource並對跟蹤日誌系統進行了優化,優化後的跟蹤日誌系統

Java註解:自定義註解示例利用反射進行解析

        Java註解能夠提供程式碼的相關資訊,同時對於所註解的程式碼結構又沒有直接影響。在這篇教程中,我們將學習Java註解,如何編寫自定義註解,註解的使用,以及如何使用反射解析註解。        註解是Java 1.5引入的,目前已被廣泛應用於各種Java框

java動態代理詳解並用動態代理和註解實現日誌記錄功能

動態代理的概念       動態代理是程式在執行過程中自動建立一個代理物件來代替被代理的物件去執行相應的操作,例如, 我們有一個已經投入執行的專案中有一個使用者DAO類UserDao用來對User物件進行資料庫的增刪改查操作,但是有一天,要求在對使用者的增刪改查操作時記錄相

Java註解詳解自定義註解利用反射解析註解

概要 這篇文章將會帶領你瞭解Java註解,註解的使用,註解的解析,利用反射解析執行時註解,相信有一定Java基礎的小夥伴一定會接觸大量的註解,Spring , Hibernate , MyBatis等著名的框架也有很多關於註解方面的應用,對於註解的使用小夥伴們

java基礎增強(泛型反射, 註解日誌

泛型 作用:異常提前到編譯期 // 執行時期異常 @Test public void testGeneric() throws Exception { // 集合的宣告 List list = new