با یکی از این بستههای گزارشگیری، یک قدم فراتر از کتابخانه استاندارد بروید.
Logging تکنیک نگهداری سوابق برای اهداف آینده در چرخه توسعه نرم افزار است. ثبت گزارش بسیار مهم است زیرا گزارش ها به اشکال زدایی، عیب یابی، عیب یابی و نظارت بر پروژه کمک می کنند.
شما می توانید از ثبت در سطوح مختلف برنامه های خود برای خطاها، هشدارها، اشکال زدایی و موارد دیگر استفاده کنید.
ورود به سیستم Go
کتابخانه استاندارد Go حاوی یک بسته گزارش غنی از عملکرد است. این سطوح مختلف ورود به سیستم و روش های اساسی مربوط به ورود به سیستم را که برای برنامه خود نیاز دارید، مدیریت می کند. با این حال، اگر برنامه شما پیچیده است و می خواهید بهره وری را در اولویت قرار دهید، بسته گزارش ممکن است بهترین انتخاب نباشد.
بسته گزارش عملکردی برای گزارشهای ساختاری ارائه نمیکند. بستههای گزارشدهی ساختاریافته، عملکردی را ارائه میکنند که فرآیند ورود به سیستم را ساده و بهبود میبخشد. اکوسیستم Go خانه بسیاری از چنین بسته هایی است.
1. Zap توسط Uber
Zap یک بسته گزارشگیری سریع، ساختاریافته و همسطح است که توسط تیم منبع باز Uber برای نوشتن گزارشها در Go ساخته شده است. اوبر بسته Zap را به منظور ارائه گزارش عملکرد بهتر نسبت به سایر بستههای موجود در اکوسیستم Go، از جمله بسته log، ساخته است.
دو لاگر مجزا در بسته Zap وجود دارد. تابع Logger موارد عملکرد بحرانی را مدیریت می کند. SugaredLogger با API به سبک printf انعطاف پذیری بیشتری ارائه می دهد، اما با یک معاوضه کوچک در عملکرد همراه است. حتی بسته SugaredLogger کندتر 4 تا 10 برابر سریعتر از سایر بسته های گزارش ساختار یافته است.
برای نصب بسته Zap دستور زیر را در خط فرمان اجرا کنید:
go get -u go.uber.org/zap
برای نصب و استفاده موفقیت آمیز از عملکرد بسته Zap، به نسخه اخیر Go نیاز دارید.
logger, err := zap.NewProduction() // zap logger instance
if err != nil {
fmt.Println(err.Error())
}
defer logger.Sync() // flushes buffers, if any
sugar := logger.Sugar() //sugared logger here
sugar.Infow("failed to fetch URL",
// Structured context as loosely typed key-value pairs.
"url", url,
"attempt", 3,
"backoff", time.Second,
)
sugar.Infof("Failed to fetch URL: %s", URL) // using the printf style formatter
متغیر لاگر نمونه ای از zap logger است و متد Sugar یک نمونه شکردار لاگر است.
متد Infow در خروجی می نویسد و Infof نسخه قالب بندی متد Infow است.
2. بسته Logrus
Logrus یک بسته گزارش ساختار یافته برای برنامه های Go است. Logrus با لاگر کتابخانه استاندارد با عملکرد مشابه سازگار است. اگر تجربه استفاده از بسته log را دارید، مجموعهای را خواهید یافت که با Logrus کار میکند.
Logrus به طور پیش فرض از قالب بندی JSON پشتیبانی نمی کند. اما همیشه می توانید از یک کتابخانه JSON مانند بسته داخلی json با متد Logrus SetFormatter استفاده کنید.
Logrus از ورود به سیستم در سطوح مختلف پشتیبانی می کند و اگرچه به اندازه اکثر بسته های گزارش گیری کارایی ندارد، اما دارای ویژگی های غنی و ایمن است.
می توانید از این دستور برای نصب Logrus در پوشه کاری خود استفاده کنید:
go get github.com/sirupsen/logrus
در اینجا نمونه ای از ورود به سیستم با بسته Logrus است.
import (
"os"
log "github.com/sirupsen/logrus" // alias import
)
func main {
log.SetFormatter(&log.JSONFormatter{}) // set formatter to JSON
log.SetOutput(os.Stdout) // output to standard output
log.SetLevel(log.WarnLevel) // set warning level
log.WithFields(log.Fields{
"Name": "John Doe",
"Age": 40,
}).Info("John&aposs Bio Data")
}
این کد کتابخانه Logrus را وارد کرده و یک نام مستعار به نام log برای آن ایجاد می کند. در تابع اصلی، متد SetFormatter را فراخوانی میکند تا یک قالبکننده برای لاگها تنظیم کند. میتوانید از روش SetOutput برای تعیین اینکه پیامهای گزارش باید کجا بروند استفاده کنید. در این مورد، خروجی استاندارد.
روش SetLevel هشدارها را در سطح مشخص شده یا بالاتر ثبت می کند.
3. بسته ZeroLog
ZeroLog یک کتابخانه الهام گرفته از Zap، سریع و اختصاصی JSON برای ثبت گزارش است که برای عملکرد طراحی شده است. از یک API زنجیرهای منحصربفرد استفاده میکند که به Zerolog اجازه میدهد JSON بنویسد و رویدادها را بدون تخصیص و بازتاب ثبت کند.
هدف Zerolog ارائه یک API با کاربری ساده تر و عملکرد بالاتر و در عین حال ساده نگه داشتن پایه کد و API است. بر روی لاگ ساختاری تمرکز دارد و شما می توانید از روش ConsoleWriter برای ورود زیبا روی کنسول خود استفاده کنید.
تخصیص کم، ثبت سطح، نمونهبرداری، قلابها، فیلدهای متنی، و ثبت خطا با ویژگیهای ردیابی پشته اختیاری در بسته Zerolog وجود دارد. همچنین می توانید Zerolog را با بسته های متنی و http ادغام کنید.
این دستور را در ترمینال فضای کاری خود اجرا کنید تا بسته Zerolog نصب شود.
go get -u [github.com/rs/zerolog/log](http://github.com/rs/zerolog/log)
در اینجا یک مثال ساده از استفاده از بسته Zerolog برای یک عملیات ساده آورده شده است.
import (
"github.com/rs/zerolog" // zerolog for configs
"github.com/rs/zerolog/log" // log for logging
)
func main() {
// UNIX Time is faster and smaller than most timestamps
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
log.Print("hello world")
}
گزینه TimeFieldFormat روی قالب زمان یونیکس تنظیم شده است و دستور Print آرگومان متن را در خروجی استاندارد می نویسد.
4. بسته Log15
بسته Log15 یک جعبه ابزار ساده برای ثبت گزارش توسط انسان و ماشین قابل خواندن با بهترین شیوه ها در Go است. Log15 بسته های io و http را از کتابخانه استاندارد Go به عنوان جایگزینی برای بسته log داخلی مدل می کند.
ویژگی های پکیج Log15 عبارتند از:
- یک API ساده و قابل درک
- ورود به سیستم ساختار یافته با جفت های کلید-مقدار
- چوببرهای کودک با زمینه خصوصی
- رابط کنترل کننده برای ساخت پیکربندی های ثبت سفارشی روی یک API کوچک
- پشتیبانی از ترمینال رنگی
- پشتیبانی داخلی برای ورود به فایلها، جریانها، گزارشهای سیستم و گزارشهای شبکه
- بافر کردن رکوردها در خروجی
با این دستور می توانید Log15 را روی بسته های Go خود نصب کنید.
go get github.com/inconshreveable/log15
شروع کار با بسته Log15 آسان است. در اینجا نمونهای از نمونهبرداری از یک لاگر و ثبت اطلاعات و سطوح خطا با بسته است.
import (
log "github.com/inconshreveable/log15" // alias import as log
)
func main() {
serverLog := log.New("repository", "new repository") // instantiating logger
serverLog.Info("repository layer health check successful") // info log
serverLog.Error("repository layer health check failed") // error log
}
متغیر serverLog نمونه ای از Log15 Logger است. متد New یک لاگر را با آرگومان های زمینه ای که شما ارائه می دهید برمی گرداند.
متد Info یک پیام اطلاعاتی و روش Error یک پیام خطا برمی گرداند.
گزارش های مفید و قابل فهم بنویسید
ثبت گزارش می تواند به اندازه هر بخش دیگری از فرآیند توسعه حیاتی باشد. ممکن است در مراحل اولیه بسیار آسان به نظر برسد، اما پایبندی به شیوه های ضروری ممکن است روند را پیچیده کند. برای رسیدگی به هر لبه و جنبه ای از ورود به سیستم، باید از یک بسته ورود به سیستم استفاده کنید تا کارها آسان تر شود.
از سطوح، ساختار و زمینه ثبت گزارش استفاده کنید تا لاگ های خود را قابل درک و متناسب با اهداف مورد نظر خود کنید.