go官方日志庫帶色彩格式化

go默認的 log 輸出的日志樣式比較難看,所以通過以下方式進行了美化和格式化,而且加入了 unicode 的ascii碼,進行色彩渲染。

package mainimport ("fmt""log""os""runtime""strings""time"
)// 自定義日志格式
type CustomLogger struct {logger *log.Logger
}var levelColors map[string]string = map[string]string{"DEBUG":    "[97;46m", // 藍色"INFO":     "[97;42m", // 綠色"WARNING":  "[97;43m", // 黃色"ERROR":    "[97;41m", // 紅色"CRITICAL": "[97;45m", // 紅色加粗"SUCCESS":  "[97;42m", // 綠色加粗
}// 初始化自定義日志
func NewCustomLogger() *CustomLogger {return &CustomLogger{logger: log.New(os.Stdout, "", 0), // 輸出到標準輸出,不帶前綴}
}// 自定義日志格式
func (l *CustomLogger) formatLog(level string, message string) string {// 獲取當前時間now := time.Now().Format("2006-01-02 15:04:05.000")// 獲取調用棧信息pc, file, line, ok := runtime.Caller(3) // 跳過三層調用棧caller := "unknown"if ok {funcName := runtime.FuncForPC(pc).Name()caller = fmt.Sprintf("%s:%d", file, line)if index := strings.LastIndex(funcName, "."); index != -1 {caller = fmt.Sprintf("%s.%s:%d", funcName[:index], funcName[index+1:], line)}}// 構建日志格式return fmt.Sprintf("[32m%s[0m |%s%s[0m| [35m%s[0m - [33m%s[0m",now, levelColors[level], level, caller, message)
}// 日志輸出函數
func (l *CustomLogger) Log(level string, message string) {logLine := l.formatLog(level, message)l.logger.Println(logLine)
}// 不同級別的日志函數
func (l *CustomLogger) Info(message string) {l.Log("INFO", message)
}func (l *CustomLogger) Infof(format string, v ...any) {message := fmt.Sprintf(format, v...)l.Log("INFO", message)
}func (l *CustomLogger) Error(message string) {l.Log("ERROR", message)
}func (l *CustomLogger) Errorf(format string, v ...any) {message := fmt.Sprintf(format, v...)l.Log("ERROR", message)
}func (l *CustomLogger) Debug(message string) {l.Log("DEBUG", message)
}func (l *CustomLogger) Debugf(format string, v ...any) {message := fmt.Sprintf(format, v...)l.Log("DEBUG", message)
}

下面是實際展示效果:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63845.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux shell腳本用于常見圖片png、jpg、jpeg、webp、tiff格式批量轉PDF文件

Linux Debian12基于ImageMagick圖像處理工具編寫shell腳本用于常見圖片png、jpg、jpeg、webp、tiff格式批量轉PDF文件,”多個圖片分開生成多個PDF文件“或者“多個圖片合并生成一個PDF文件” 在Linux系統中,使用ImageMagick可以圖片格式轉換&#xff0c…

【C++語言】多態

一、多態的概念 多態的概念:通俗來說,就是多種形態,具體點就是去完成某種行為,當不同的對象去完成時會產生出不同的狀態。 我們可以舉一個例子: 比如買票這種行為,當普通人買票時,是全價買票&am…

Centos7配置webrtc-streamer環境

Centos7配置webrtc-streamer環境 安裝webrtc-streamer0.7版本 升級gdb 1、yum安裝2、查看gdb版本3.下載待升級的gdb版本4.QA 1、預編譯的時候報錯no acceptable C compiler found in $PATH2、make的時候報錯[all-bfd] Error3、make的時候報錯 升級GCC 1.源碼編譯升級gcc9.3.0…

Vue.js 響應接口

Vue.js 響應接口 引言 Vue.js,作為當前前端開發領域中的佼佼者,以其簡潔、高效和靈活的特點,贏得了廣大開發者的喜愛。其核心功能之一便是響應式系統,它使得數據與視圖之間的同步變得異常簡單。本文將深入探討Vue.js的響應接口,解析其工作原理,并展示如何在實際項目中有…

深入了解藍牙Profile類型與設備的對應關系

在現代技術中,藍牙作為一種無線通信技術,廣泛應用于各種設備之間的短距離通信。不同的設備在連接時使用不同的藍牙Profile(配置文件),每種Profile都為特定的設備功能提供支持,例如音頻流傳輸、語音通話、文件傳輸等。在本文中,我們將詳細介紹藍牙Profile的常見類型及其對…

LLMs之PDF:MinerU(將PDF文件轉換成Markdown和JSON格式)的簡介、安裝和使用方法、案例應用之詳細攻略

LLMs之PDF:MinerU(將PDF文件轉換成Markdown和JSON格式)的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 MinerU的簡介 0、日志 1、MinerU 的主要特點 2、已知問題 MinerU 安裝和使用方法 1、MinerU的三種體驗方式 T1、在線演示 T2、快速CPU演示 T3、GPU …

【AIGC】ChatGPT 結構化 Prompt 的高級應用

博客主頁&#xff1a; [小????????] 本文專欄: AIGC | ChatGPT 文章目錄 &#x1f4af;前言&#x1f4af;標識符的使用&#xff08;Use of Identifiers&#xff09;1. #2. <>3. - 或 4. [] &#x1f4af;屬性詞的重要性和應用應用場景 &#x1f4af;具體模塊…

Python繪制圖表

Python提供了多種可視化庫&#xff0c;常用的有matplotlib、seaborn和plotly等。這些庫可以用于繪制各種類型的圖表&#xff0c;如折線圖、散點圖、柱狀圖、餅圖等。 下面是一個使用matplotlib繪制折線圖的示例&#xff1a; python import matplotlib.pyplot as plt # 準備數…

Python 練習

一、列表練習 1、求偶數元素的和[1,2,1,2,3,3,6,5,8] 1 2 3 4 5 6 list01 [1, 2, 1, 2, 3, 3, 6, 5, 8] sum 0 for i in list01: if int(i) % 2 0: sum sum i print(f"列表中所有偶數和是: {sum}") 2、計算 1 - 2 3 - 4 ... 99 中除88以外…

OpenEuler 22.03 安裝 flink-1.17.2 集群

零&#xff1a;規劃 本次計劃安裝三臺OpenEuler 22.03 版本操作系統的服務器&#xff0c;用于搭建 flink 集群。這里使用flink1.17.2 的原因&#xff0c;是便于后續與springboot的整合 服務器名IP地址作用其他應用flink01192.168.159.133主jdk11、flink-1.17.2flink02192.168.…

Docker 安裝 禪道-21.2版本-外部數據庫模式

Docker 安裝系列 1、拉取最新版本&#xff08;zentao 21.2&#xff09; [rootTseng ~]# docker pull hub.zentao.net/app/zentao Using default tag: latest latest: Pulling from app/zentao 55ab1b300d4b: Pull complete 6b5749e5ef1d: Pull complete bdccb03403c1: Pul…

寬帶ANC、窄帶ANC、正弦噪聲抑制組成混合噪聲控制系統結構

混合控制結構由寬帶ANC子系統&#xff08;BANC&#xff09;、窄帶ANC子系統&#xff08;NANC&#xff09;和正弦噪聲抑制子系統&#xff08;SNC&#xff09;三部分組成。這種混合系統的設計目標是有效地控制同時包含寬帶噪聲和窄帶噪聲&#xff08;例如周期性的正弦噪聲&#x…

車載網關性能 --- GW ECU報文(message)處理機制的技術解析

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 所謂雞湯,要么蠱惑你認命,要么慫恿你拼命,但都是回避問題的根源,以現象替代邏輯,以情緒代替思考,把消極接受現實的懦弱,偽裝成樂觀面對不幸的…

【潛意識Java】深度解析黑馬項目《蒼穹外賣》與藍橋杯算法的結合問題

目錄 為什么要結合項目與算法&#xff1f; 1. 藍橋杯與《蒼穹外賣》項目的結合 實例&#xff1a;基于藍橋杯算法思想的訂單配送路徑規劃 問題描述&#xff1a; 代碼實現&#xff1a;使用動態規劃解決旅行商問題 代碼解析&#xff1a; 為什么這個題目與藍橋杯相關&#x…

自己搭建專屬AI:Llama大模型私有化部署

前言 AI新時代&#xff0c;提高了生產力且能幫助用戶快速解答問題&#xff0c;現在用的比較多的是Openai、Claude&#xff0c;為了保證個人隱私數據&#xff0c;所以嘗試本地&#xff08;Mac M3&#xff09;搭建Llama模型進行溝通。 Gpt4all 安裝比較簡單&#xff0c;根據 G…

大語言模型中的Agent優勢及相關技術;Agent和RAG區別

大語言模型中的Agent優勢及相關技術: 強大的任務規劃與執行能力 技術:通過將復雜任務拆解為多個子任務,并依據任務間的邏輯關系和優先級進行規劃,確定執行順序,調用相應工具或模型來完成各子任務,最終實現復雜任務的整體解決。如微軟的Jarvis,可利用LLM的推理規劃能力拆…

深入理解構造函數:C++ 編程中的基石

一、概念 構造函數(Constructor) 是一種特殊的成員函數&#xff0c;用于在創建對象時初始化對象的狀態&#xff08;即成員變量&#xff09;。它的主要作用是保證對象在創建時具有有效的初始值。 二、特點 與類同名&#xff1a; 構造函數的名稱與類名相同&#xff0c;沒有返回…

GIS數據處理/程序/指導,街景百度熱力圖POI路網建筑物AOI等

簡介其他數據處理/程序/指導&#xff01;&#xff01;&#xff01;&#xff08;1&#xff09;街景數據獲取&#xff08;2&#xff09;街景語義分割后像素提取&#xff0c;指標計算代碼&#xff08;綠視率&#xff0c;天空開闊度、視覺熵/景觀多樣性等&#xff09;&#xff08;3…

微前端qiankun的使用——實踐

qiankun 創建主應用項目——vue2 main.js注冊子應用 $ yarn add qiankun # 或者 npm i qiankun -Simport { registerMicroApps, start } from qiankun; import Vue from "vue"; import App from "./App.vue"; import router from "./router"; …

后端項目java中字符串、集合、日期時間常用方法

我這里只介紹了項目中最常用的哈,比如像集合有很多,但我們最常用的就是ArrayList。 然后我這里會以javascript中的字符串、數組的方法為基準來實現,有些方法js和java會有些區別也會介紹 字符串 每次修改 String 對象都會創建一個新的對象,而 StringBuffer 可以在同一個對象…