کتابخانه‌ی استاندارد · سیستم و ابزار

گزارش log

ثبت رویدادهای برنامه با سطح اهمیت، پیشوند، فیلدهای ساختاریافته، قالب JSON و نوشتن در پرونده.

واردسازی گزارش

برای برنامه‌ای که روی سرور اجرا می‌شود، سرچاپ کافی نیست: باید بدانید هر پیام چقدر مهم است، کی ثبت شده و بتوانید پیام‌های کم‌اهمیت را خاموش کنید. بسته‌ی گزارش چهار سطح دارد (اشکال‌زدایی، اطلاعات، هشدار، خطا) و فقط پیام‌هایی را ثبت می‌کند که سطحشان از سطح تنظیم‌شده کمتر نیست؛ سطح پیش‌فرض «اطلاعات» است.

گزارش به‌طور پیش‌فرض در خروجی خطا (stderr) و با زمان نوشته می‌شود. نمونه‌ها برای خروجی ثابت، زمان را خاموش کرده‌اند.

پایاها و متغیرها

سطح اشکال زدایی LevelDebug

پایا سطح اشکال زدایی: صحیح۳۲ = 0
سطح اشکال‌زدایی؛ جزئیات برای توسعه‌دهنده.
log-Info.salam
واردسازی گزارش

روال ریشه:
    گزارش.به خروجی استاندارد()
    گزارش.نمایش زمان(نادرست)
    گزارش.تنظیم پیشوند("[برنامه]")
    گزارش.اشکال زدایی("این دیده نمی‌شود")
    گزارش.اطلاعات("سرور آماده است")
    گزارش.هشدار("حافظه رو به پایان است")
    گزارش.خطا("اتصال قطع شد")
    گزارش.تنظیم سطح(گزارش.سطح اشکال زدایی)
    گزارش.اشکال زدایی("حالا دیده می‌شود")
    گزارش.ثبت(گزارش.سطح هشدار، "با سطح دلخواه")
    سرچاپ گزارش.دریافت سطح()، گزارش.نام سطح(گزارش.سطح خطا)، گزارش.تجزیه سطح("warn")، گزارش.سطح اطلاعات
پایان
خروجی[INFO] [برنامه] سرور آماده است [WARN] [برنامه] حافظه رو به پایان است [ERROR] [برنامه] اتصال قطع شد [DEBUG] [برنامه] حالا دیده می‌شود [WARN] [برنامه] با سطح دلخواه 0 ERROR 2 1

سطح اطلاعات LevelInfo

پایا سطح اطلاعات: صحیح۳۲ = 1
سطح اطلاعات؛ رویدادهای عادی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

سطح هشدار LevelWarn

پایا سطح هشدار: صحیح۳۲ = 2
سطح هشدار؛ چیزی غیرعادی ولی نه خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

سطح خطا LevelError

پایا سطح خطا: صحیح۳۲ = 3
سطح خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

قالب متن FormatText

پایا قالب متن: صحیح۳۲ = 0
قالب متنی خوانا.
log-InfoKV.salam
واردسازی گزارش

روال ریشه:
    گزارش.به خروجی استاندارد()
    گزارش.نمایش زمان(نادرست)
    ناپایا کلیدها := وکتور {} برگردان وکتور<رشته>
    ناپایا مقدارها := وکتور {} برگردان وکتور<رشته>
    دیرکن کلیدها.آزادکن()
    دیرکن مقدارها.آزادکن()
    کلیدها.بیفزا("user")
    مقدارها.بیفزا("sara")
    کلیدها.بیفزا("ms")
    مقدارها.بیفزا("42")
    گزارش.اطلاعات با فیلد("درخواست انجام شد"، کلیدها، مقدارها)
    گزارش.هشدار با فیلد("کند بود"، کلیدها، مقدارها)
    گزارش.خطا با فیلد("شکست خورد"، کلیدها، مقدارها)
    گزارش.تنظیم سطح(گزارش.سطح اشکال زدایی)
    گزارش.اشکال زدایی با فیلد("جزئیات"، کلیدها، مقدارها)
    گزارش.تنظیم قالب(گزارش.قالب جیسون)
    گزارش.اطلاعات("به شکل جیسون")
    سرچاپ گزارش.دریافت قالب() == گزارش.قالب جیسون، گزارش.قالب متن
    ناپایا ف := وکتور {} برگردان وکتور<رشته>
    دیرکن ف.آزادکن()
    ف.بیفزا(گزارش.فیلد("path"، "/login"))
    ف.بیفزا(گزارش.فیلد عدد("status"، ۲۰۰))
    ف.بیفزا(گزارش.فیلد منطقی("cached"، نادرست))
    سرچاپ گزارش.کلید مقدار("پاسخ"، ف)
پایان
خروجی[INFO] درخواست انجام شد user=sara ms=42 [WARN] کند بود user=sara ms=42 [ERROR] شکست خورد user=sara ms=42 [DEBUG] جزئیات user=sara ms=42 {"level": "INFO", "msg": "به شکل جیسون"} true 0 پاسخ path=/login status=200 cached=false

قالب جیسون FormatJSON

پایا قالب جیسون: صحیح۳۲ = 1
قالب JSON، یک شیء در هر خط؛ برای سامانه‌های جمع‌آوری گزارش.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

روال‌ها

نام سطح LevelName

روال نام سطح(l: صحیح): رشته
نام انگلیسی یک سطح.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

تجزیه سطح ParseLevel

روال تجزیه سطح(s: رشته): صحیح
متنی مثل "warn" را به سطح تبدیل می‌کند؛ برای خواندن سطح از تنظیمات.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

تنظیم سطح SetLevel

روال تنظیم سطح(l: صحیح)
کمترین سطحی که ثبت می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

دریافت سطح GetLevel

روال دریافت سطح(): صحیح
سطح فعلی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

تنظیم پیشوند SetPrefix

روال تنظیم پیشوند(p: رشته)
پیشوندی که پس از سطح هر پیام می‌آید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

نمایش زمان ShowTime

روال نمایش زمان(b: منطقی)
زمان هر پیام را نشان بدهد یا نه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

تنظیم قالب SetFormat

روال تنظیم قالب(f: صحیح)
قالب متن یا JSON.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

دریافت قالب GetFormat

روال دریافت قالب(): صحیح
قالب فعلی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

تنظیم چرخش SetRotation

روال تنظیم چرخش(max_bytes: صحیح۶۴، max_backups: صحیح)
برای گزارش پرونده‌ای: وقتی پرونده از max_bytes بزرگ‌تر شد، کنار گذاشته شود و حداکثر max_backups نسخه‌ی قدیمی بماند.
log-ToFile.salam
واردسازی گزارش
واردسازی ورودی خروجی

روال ریشه:
    گزارش.نمایش زمان(نادرست)
    سرچاپ گزارش.به پرونده("app.log")
    گزارش.تنظیم چرخش(۱۰۲۴ * ۱۰۲۴، ۳)
    گزارش.اطلاعات("نوشته شد در پرونده")
    گزارش.بستن پرونده()
    گزارش.به خطای استاندارد()
    چاپ ورودی خروجی.خواندن پرونده("app.log")
پایان
خروجی0 [INFO] نوشته شد در پرونده

به خطای استاندارد ToStderr

روال به خطای استاندارد()
گزارش در خروجی خطا نوشته شود (پیش‌فرض).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-ToFile.salam

به خروجی استاندارد ToStdout

روال به خروجی استاندارد()
گزارش در خروجی استاندارد نوشته شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

به پرونده ToFile

روال به پرونده(path: رشته): صحیح
گزارش در پرونده نوشته شود؛ اگر نشود، منفی یک.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-ToFile.salam

بستن پرونده CloseFile

روال بستن پرونده()
پرونده‌ی گزارش را می‌بندد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-ToFile.salam

ثبت Log

روال ثبت(l: صحیح، msg: رشته)
پیامی با سطح دلخواه ثبت می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

اشکال زدایی Debug

روال اشکال زدایی(msg: رشته)
پیام اشکال‌زدایی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

اطلاعات Info

روال اطلاعات(msg: رشته)
پیام اطلاعات.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

هشدار Warn

روال هشدار(msg: رشته)
پیام هشدار.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

خطا Error

روال خطا(msg: رشته)
پیام خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Info.salam

اشکال زدایی قالبی Debugf

روال اشکال زدایی قالبی(tmpl: رشته، args: وکتور<رشته>)
پیام اشکال‌زدایی قالبی؛ هر {} با مقدار بعدی پر می‌شود.
log-Infof.salam
واردسازی گزارش

روال ریشه:
    گزارش.به خروجی استاندارد()
    گزارش.نمایش زمان(نادرست)
    ناپایا م := وکتور {} برگردان وکتور<رشته>
    دیرکن م.آزادکن()
    م.بیفزا("سارا")
    م.بیفزا("۳")
    گزارش.اطلاعات قالبی("کاربر {} وارد شد و {} پیام دارد"، م)
    گزارش.هشدار قالبی("تلاش ناموفق برای {}"، م)
    گزارش.خطا قالبی("کاربر {} مسدود شد"، م)
    گزارش.تنظیم سطح(گزارش.سطح اشکال زدایی)
    گزارش.اشکال زدایی قالبی("شناسه {}"، م)
پایان
خروجی[INFO] کاربر سارا وارد شد و ۳ پیام دارد [WARN] تلاش ناموفق برای سارا [ERROR] کاربر سارا مسدود شد [DEBUG] شناسه سارا

اطلاعات قالبی Infof

روال اطلاعات قالبی(tmpl: رشته، args: وکتور<رشته>)
پیام اطلاعات قالبی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Infof.salam

هشدار قالبی Warnf

روال هشدار قالبی(tmpl: رشته، args: وکتور<رشته>)
پیام هشدار قالبی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Infof.salam

خطا قالبی Errorf

روال خطا قالبی(tmpl: رشته، args: وکتور<رشته>)
پیام خطای قالبی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-Infof.salam

مهلک Fatal

روال مهلک(msg: رشته)
پیام خطا ثبت می‌کند و برنامه را با کد یک تمام می‌کند. نمونه‌اش اینجا اجرا نمی‌شود.
log-Fatal.salam
واردسازی گزارش

روال ریشه:
    گزارش.مهلک("پرونده‌ی پیکربندی پیدا نشد")
پایان

فیلد Field

روال فیلد(key: رشته، val: رشته): رشته
یک فیلد کلید=مقدار می‌سازد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

فیلد عدد FieldInt

روال فیلد عدد(key: رشته، val: صحیح۶۴): رشته
یک فیلد با مقدار عددی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

فیلد منطقی FieldBool

روال فیلد منطقی(key: رشته، val: منطقی): رشته
یک فیلد با مقدار منطقی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

کلید مقدار KV

روال کلید مقدار(msg: رشته، fields: وکتور<رشته>): رشته
پیام و فیلدها را کنار هم می‌گذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

اشکال زدایی با فیلد DebugKV

روال اشکال زدایی با فیلد(msg: رشته، keys: وکتور<رشته>، vals: وکتور<رشته>)
پیام اشکال‌زدایی همراه با فیلدهای کلید و مقدار.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

اطلاعات با فیلد InfoKV

روال اطلاعات با فیلد(msg: رشته، keys: وکتور<رشته>، vals: وکتور<رشته>)
پیام اطلاعات همراه با فیلدها؛ جستجو در گزارش‌ها را آسان می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

هشدار با فیلد WarnKV

روال هشدار با فیلد(msg: رشته، keys: وکتور<رشته>، vals: وکتور<رشته>)
پیام هشدار همراه با فیلدها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam

خطا با فیلد ErrorKV

روال خطا با فیلد(msg: رشته، keys: وکتور<رشته>، vals: وکتور<رشته>)
پیام خطا همراه با فیلدها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: log-InfoKV.salam