{"id":1844,"date":"2024-12-05T19:51:54","date_gmt":"2024-12-05T11:51:54","guid":{"rendered":"https:\/\/www.madbull.site\/?p=1844"},"modified":"2024-12-05T19:55:04","modified_gmt":"2024-12-05T11:55:04","slug":"golang%e5%ae%9e%e7%8e%b0%e5%8d%95%e4%be%8b%e6%97%a5%e5%bf%97%e5%af%b9%e8%b1%a1","status":"publish","type":"post","link":"https:\/\/www.madbull.site\/?p=1844","title":{"rendered":"golang\u5b9e\u73b0\u5355\u4f8b\u65e5\u5fd7\u5bf9\u8c61"},"content":{"rendered":"\n<p class=\"has-large-font-size\"><strong>\u4ecb\u7ecd<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>golang\u6709\u5f88\u591a\u65e5\u5fd7\u5305\uff0c\u901a\u8fc7\u8bbe\u7f6e\u548c\u4fee\u6539\u90fd\u80fd\u5b9e\u73b0\u65e5\u5fd7\u8f6e\u8f6c\u548c\u81ea\u5b9a\u4e49\u65e5\u5fd7\u683c\u5f0f\u3002\u4f8b\u5982\uff1a<code>log\u3001zap\u3001golog\u3001slog\u3001log4go<\/code> \u7b49\u7b49\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u672c\u6b21\u7ed9\u51fa\u7684\u793a\u4f8b\u4f7f\u7528 logrus \u548c lumberjack \u4e24\u4e2a\u5e93\u5b9e\u73b0\u65e5\u5fd7\u8f6e\u8f6c\u548c\u81ea\u5b9a\u4e49\u65e5\u5fd7\u683c\u5f0f\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u4ee3\u7801<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u603b\u5171\u6d89\u53ca\u52304\u4e2a\u6587\u4ef6\uff1a<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>go.mod \u6a21\u5757\u547d\u540d\uff1b<\/li>\n\n\n\n<li>tlog.go \u5305\u542b\u4e3b\u51fd\u6570\uff0c\u7528\u6765\u6d4b\u8bd5\uff1b<\/li>\n\n\n\n<li>tlog1.go \u5b9e\u73b0\u4e86\u5355\u4f8b\u6a21\u5f0f\u8fd4\u56de\u65e5\u5fd7\u5bf9\u8c61\uff1b<\/li>\n\n\n\n<li>tlog2.go \u7528\u6765\u6d4b\u8bd5\u5728\u522b\u7684\u4ee3\u7801\u6587\u4ef6\u4e2d\u7684\u4f7f\u7528\u3002<\/li>\n<\/ul>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"312\" height=\"62\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-8.png\" alt=\"\" class=\"wp-image-1845\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-8.png 312w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-8-300x60.png 300w\" sizes=\"auto, (max-width: 312px) 100vw, 312px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>go.mod<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>module tlogrus<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>tlog.go<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\"time\")\n\nfunc main() {\n    \/\/ \u83b7\u53d6\u65e5\u5fd7\u8bb0\u5f55\u5668\u7684\u5355\u4f8b\u5b9e\u4f8b\n    log := GetLogger(\"\")\n\n    \/\/ \u4f7f\u7528\u65e5\u5fd7\u8bb0\u5f55\u5668\u8bb0\u5f55\u4e0d\u540c\u7ea7\u522b\u7684\u65e5\u5fd7\n    log.Debug(\"This is a debug message.\")\n    log.Info(\"This is an info message.\")\n    log.Warn(\"This is a warning message.\")\n    time.Sleep(time.Second)\n    log.Error(\"This is an error message.\")\n\n    \n    Test()\n\n    \/\/ \u4e0b\u8fb9\u8fd9\u884c\u8f93\u51fa\u5c06\u5bfc\u81f4\u7a0b\u5e8f\u9000\u51fa\n    log.Fatal(\"This is a fatal message.\") \n}<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>tlog1.go<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\n    \"os\"\n    \"bytes\"\n    \"runtime\"\n    \"fmt\"\n    \"strings\"\n    \"time\"\n    \"path\/filepath\"\n    \"github.com\/sirupsen\/logrus\"\n    \"github.com\/natefinch\/lumberjack\"\n)\n\n\/\/ Logger \u5355\u4f8b\u6a21\u5f0f\u7684 logger \u7ed3\u6784\u4f53\nvar logger  *logrus.Logger = nil\n\n\/\/ \u81ea\u5b9a\u4e49\u683c\u5f0f\u5316\u7ed3\u6784\ntype CustomFormatter struct{}\n\n\/\/ \u81ea\u5b9a\u4e49\u683c\u5f0f\u5316\u7ed3\u6784\u6210\u5458\u51fd\u6570\uff0c\u7528\u4e8e\u683c\u5f0f\u5316\u65e5\u5fd7\u8f93\u51fa\u7684\u5185\u5bb9\nfunc (f *CustomFormatter) Format(entry * logrus.Entry)(&#91;]byte, error) {\n    \/\/ \u7533\u8bf7\u65e5\u5fd7\u7f13\u51b2\u7a7a\u95f4\n    b := &amp;bytes.Buffer{}\n\n    \/\/ 1\u3001\u521d\u59cb\u5316\u65e5\u671f\u8f93\u51fa\u683c\u5f0f\n    timestamp := entry.Time.Format(time.DateTime)\n    \/\/ 2\u3001\u65e5\u5fd7\u7ea7\u522b\u683c\u5f0f\u5316\n    level := strings.ToUpper(entry.Level.String())\n    fmt.Fprintf(b, \"%s %s \", timestamp, level)\n\n    \/\/ 3\u3001\u83b7\u53d6\u8fdb\u7a0b\u53f7\n    fmt.Fprintf(b, \"pid=%d \",os.Getpid())\n    \n    \/\/ 4\u3001\u83b7\u53d6\u8fd0\u884c\u65f6\u7a0b\u5e8f\u8c03\u7528\u7684\u76f8\u5173\u4fe1\u606f  \u8c03\u7528\u6587\u4ef6 \u548c \u6240\u5728\u884c\u53f7\n    _, file, line, ok := runtime.Caller(6)\n    if !ok {\n        \/\/ \u6ca1\u83b7\u53d6\u5230\uff0c\u7ed9\u51fa\u9ed8\u8ba4\u503c\n        file = \"???\"\n        line = 0 \n    }\n    fmt.Fprintf(b, \"%s:%d : \", filepath.Base(file), line)\n\n    \/\/ 5\u3001\u83b7\u53d6\u8c03\u7528\u51fd\u6570\u4fe1\u606f\n    if pc, ok := entry.Data&#91;\"caller\"]; ok {\n        funcName := runtime.FuncForPC(pc.(uintptr)).Name()\n        fmt.Fprintf(b, \"%s \", funcName )\n    }\n    fmt.Fprintf(b, \"%s\\n\", entry.Message)    \n    return b.Bytes(), nil\n}\n\n\/\/ GetLogger \u521b\u5efa\u6216\u8fd4\u56de\u65e5\u5fd7\u8bb0\u5f55\u5668\u7684\u552f\u4e00\u5b9e\u4f8b\nfunc GetLogger(logFileName string) *logrus.Logger {\n    if logger != nil {\n        return logger\n    }\n\n    \/\/ 1\u3001\u521b\u5efa logger \u5bf9\u8c61\n    logger = logrus.New()\n    \/\/ 2\u3001\u4f7f\u7528 lumberjack \u8fdb\u884c\u65e5\u5fd7\u8f6e\u8f6c\uff0c \u5e76\u6dfb\u52a0\u5230 logrus.Out\n    logger.Out = &amp;lumberjack.Logger{\n        Filename:   func (logFileName string) string { if logFileName == \"\" { return \"logs\/tlogrus.log\" ; } else { return logFileName ;} }  (logFileName) ,\n        MaxSize:    1,         \/\/ MB\n        MaxBackups: 3,\n        MaxAge:     28,        \/\/ days\n        Compress:   true,\n    }\n    \/\/ 3\u3001\u8bbe\u7f6e\u65e5\u5fd7\u683c\u5f0f\u4e3a \u81ea\u5b9a\u4e49\u7684\u683c\u5f0f\n    logger.SetFormatter(&amp;CustomFormatter{})\n    \/\/ 4\u3001\u8bbe\u7f6e\u65e5\u5fd7\u7ea7\u522b Debug\n    logger.SetLevel(logrus.DebugLevel)\n\n    return logger\n}<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>tlog2.go<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\"time\")\n\nfunc Test() {\n\n    llog := GetLogger(\"xxxx.log\")\n    for { \n        llog.Debug(\"This is a debug message.=====\")\n        llog.Info(\"This is an info message.\")\n        llog.Warn(\"This is a warning message.\")\n        llog.Error(\"This is an error message.\")\n        time.Sleep(time.Microsecond)\n    }\n}<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u6d4b\u8bd5<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"791\" height=\"868\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-13.png\" alt=\"\" class=\"wp-image-1846\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-13.png 791w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-13-273x300.png 273w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-13-768x843.png 768w\" sizes=\"auto, (max-width: 791px) 100vw, 791px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>golang\u6709\u5f88\u591a\u65e5\u5fd7\u5305\uff0c\u901a\u8fc7\u8bbe\u7f6e\u548c\u4fee\u6539\u90fd\u80fd\u5b9e\u73b0\u65e5\u5fd7\u8f6e\u8f6c\u548c\u81ea\u5b9a\u4e49\u65e5\u5fd7\u683c\u5f0f\u3002\u4f8b\u5982\uff1alog\u3001zap\u3001golog\u3001slog\u3001log4go \u7b49\u7b49\u3002<br \/>\n\u672c\u6b21\u7ed9\u51fa\u7684\u793a\u4f8b\u4f7f\u7528 logrus \u548c lumberjack \u4e24\u4e2a\u5e93\u5b9e\u73b0\u65e5\u5fd7\u8f6e\u8f6c\u548c\u81ea\u5b9a\u4e49\u65e5\u5fd7\u683c\u5f0f\u3002<\/p>\n","protected":false},"author":1,"featured_media":727,"comment_status":"open","ping_status":"open","sticky":false,"template":"single-with-sidebar","format":"standard","meta":{"footnotes":""},"categories":[286,154],"tags":[287,599,600,273,603,601,602],"class_list":["post-1844","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-go","category-154","tag-golang","tag-log","tag-logrus","tag-273","tag-603","tag-601","tag-602"],"_links":{"self":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1844"}],"version-history":[{"count":5,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1844\/revisions"}],"predecessor-version":[{"id":1851,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1844\/revisions\/1851"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/media\/727"}],"wp:attachment":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1844"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1844"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}