GO LINTER يضمن نمط رمز ثابت عند استخدام log/slog .
يتيح log/slog API نوعين مختلفين من الوسائط: أزواج القيمة الرئيسية والسمات. على الرغم من أن الناس قد يكون لديهم آراء مختلفة حول أي واحد أفضل ، يبدو أن معظمهم يتفقون على شيء واحد: يجب أن يكون ثابتًا. باستخدام sloglint يمكنك فرض قواعد مختلفة log/slog بناءً على نمط الرمز المفضل لديك.
تم دمج sloglint في golangci-lint ، وهذه هي الطريقة الموصى بها لاستخدامها.
لتمكين linter ، أضف الأسطر التالية إلى .golangci.yml :
linters :
enable :
- sloglint بدلاً من ذلك ، يمكنك تنزيل ثنائي مصنوع من صفحة الإصدارات لاستخدام sloglint المستقل.
تشغيل golangci-lint مع تمكين sloglint . راجع قائمة الخيارات المتاحة لتكوين Linter.
عند استخدام sloglint المستقل ، تمرير خيارات كعلامات تحمل نفس الاسم.
يؤدي خيار no-mixed-args sloglint الإبلاغ عن شعار أزواج وسمات خلطها وسمات ضمن استدعاء وظيفة واحدة:
slog . Info ( "a user has logged in" , "user_id" , 42 , slog . String ( "ip_address" , "192.0.2.0" )) // sloglint: key-value pairs and attributes should not be mixedيتم تمكينه افتراضيًا.
يتسبب خيار sloglint kv-only في الإبلاغ عن أي استخدام للسمات:
slog . Info ( "a user has logged in" , slog . Int ( "user_id" , 42 )) // sloglint: attributes should not be used في المقابل ، يتسبب خيار attr-only sloglint الإبلاغ عن أي استخدام لأزواج القيمة الرئيسية:
slog . Info ( "a user has logged in" , "user_id" , 42 ) // sloglint: key-value pairs should not be used تفضل بعض المشاريع تمرير أجهزة تسجيل الدخول باعتبارها تبعيات واضحة. يتسبب خيار no-global sloglint في الإبلاغ عن استخدام عمليات تسجيل الدخول العالمية.
slog . Info ( "a user has logged in" , "user_id" , 42 ) // sloglint: global logger should not be used القيم الممكنة هي all (الإبلاغ عن جميع عمليات تسجيل الدخول العالمية) والإعدادات default (أبلغ فقط عن سجل slog الافتراضي).
تستفيد بعض تطبيقات slog.Handler من context.Context المحدد. context (على سبيل المثال للوصول إلى قيم السياق). لكي يعملوا بشكل صحيح ، تحتاج إلى تمرير سياق لجميع مكالمات المسجلات. يتسبب خيار context-only في الإبلاغ عن sloglint استخدام الأساليب بدون سياق:
slog . Info ( "a user has logged in" ) // sloglint: InfoContext should be used instead القيم المحتملة all (الإبلاغ عن جميع المكالمات الخالية من السياق) scope (تقرير فقط إذا كان هناك سياق في نطاق الوظيفة الخارجية).
للحصول على أقصى استفادة من التسجيل منظم ، قد ترغب في طلب رسائل السجل لتكون ثابتة. يتسبب خيار static-msg sloglint الإبلاغ عن الرسائل غير المنطقية:
slog . Info ( fmt . Sprintf ( "a user with id %d has logged in" , 42 )) // sloglint: message should be a string literal or a constantيمكن إصلاح التقرير عن طريق نقل القيم الديناميكية إلى الوسائط:
slog . Info ( "a user has logged in" , "user_id" , 42 ) لمنع الأخطاء المطبعية ، قد ترغب في منع استخدام المفاتيح الخام تمامًا. يتسبب خيار no-raw-keys في الإبلاغ عن استخدام الأوتار كمفاتيح (بما في ذلك مكالمات slog.Attr ، على سبيل المثال sloglint slog.Int("user_id", 42) ):
slog . Info ( "a user has logged in" , "user_id" , 42 ) // sloglint: raw keys should not be usedيمكن إصلاح هذا التقرير باستخدام أي من الثوابت ...
const UserId = "user_id"
slog . Info ( "a user has logged in" , UserId , 42 ) ... أو مخصصات مخصصة slog.Attr :
func UserId ( value int ) slog. Attr { return slog . Int ( "user_id" , value ) }
slog . Info ( "a user has logged in" , UserId ( 42 ))نصيحة
يمكن إنشاء هؤلاء المساعدين تلقائيًا لك بواسطة أداة sloggen . جربها أيضًا!
لضمان الاتساق في السجلات ، قد ترغب في تطبيق اتفاقية تسمية مفتاح واحد. يؤدي خيار key-naming-case sloglint الإبلاغ عن شعار المفاتيح المكتوبة في حالة أخرى غير المقدمة:
slog . Info ( "a user has logged in" , "user-id" , 42 ) // sloglint: keys should be written in snake_case القيم المحتملة هي snake أو kebab أو camel أو pascal .
لمنع الاستخدام العرضي لمفاتيح السجل المحجوزة ، قد ترغب في منع مفاتيح محددة تمامًا. يتسبب خيار forbidden-keys في الإبلاغ sloglint الإبلاغ عن استخدام المفاتيح المحظورة:
slog . Info ( "a user has logged in" , "reserved" , 42 ) // sloglint: "reserved" key is forbidden and should not be used على سبيل المثال ، عند استخدام slog.JSONHandler القياسي و slog.TextHandler ، قد ترغب في منع time level msg ومفاتيح source ، حيث يتم استخدامها من قبل المعالجات.
لتحسين قابلية قراءة التعليمات البرمجية ، قد ترغب في وضع وسيط على خطوط منفصلة ، خاصة عند استخدام أزواج القيمة الرئيسية. يتسبب خيار args-on-sep-lines sloglint الإبلاغ عن 2+ وسيطات على نفس السطر:
slog . Info ( "a user has logged in" , "user_id" , 42 , "ip_address" , "192.0.2.0" ) // sloglint: arguments should be put on separate linesيمكن إصلاح هذا التقرير عن طريق إعادة صياغة المدونة:
slog . Info ( "a user has logged in" ,
"user_id" , 42 ,
"ip_address" , "192.0.2.0" ,
)