import "github.com/azorg/xlog/v2"xlog - ΠΏΠ°ΠΊΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ *slog.Logger ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° "log/slog".
ΠΠ°ΠΊΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf. ΠΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΡΡΠΎΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΆΡΡΠ½Π°Π»ΠΎΠ². ΠΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠ²ΠΎΠ΄Π° ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π² ΠΊΠ°Π½Π°Π» (stdout/stderr), Π² ΡΠ°ΠΉΠ» ΠΈ Π² ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ io.Writer ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠΎΠ²Π½ΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π»Ρ Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΌΠ΅ΡΠΊΠΈ (trace/notice/crit ΠΈ Ρ.ΠΏ.). ΠΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΎΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Ρ Π΅Π½Π΄Π»Π΅ΡΠΎΠ² (Text/JSON). ΠΡΡΡ ΠΎΠΏΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΎΠΌ ΠΆΡΡΠ½Π°Π»Π° (Π² Ρ.Ρ. ΡΠΎΡΠΌΠ°ΡΠΎΠΌ) ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ Ρ.Π½. middleware Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ "Ρ ΡΠΊΠΎΠ²", "ΡΠΈΠ»ΡΡΡΠΎΠ²".
ΠΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ UUID ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΌ ΠΌΠΎΠ½ΠΎΡΠΎΠ½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ "log/slog" Π²ΠΊΠ»ΡΡΠ΅Π½ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠΎΡΡΠ°Π²ΠΊΡ Go Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ go1.21. ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ go1.20 ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ "golang.org/x/exp/slog".
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ°ΠΊΠ΅Ρ "gopkg.in/natefinch/lumberjack.v2".
ΠΠ°Π»ΠΎΠΆΠ΅Π½Ρ "ΠΌΠΎΡΡΠΈΠΊΠΈ" Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ (legacy) Π»ΠΎΠ³Π³Π΅ΡΠ° ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° "log" ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π»ΠΎΠ³Π³Π΅Ρ slog.
Π ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΈΠ· Π²ΡΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Setup(), ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Go Π»ΠΎΠ³Π³Π΅ΡΠ° "log" ΠΈ ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ° "slog".
ΠΠ»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ° Π»ΠΎΠ³Π³Π΅ΡΠ° Π² ΠΏΠ΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±ΡΠΈΠΊΡ New(), ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ *Logger, ΠΊΠΎΡΠΎΡΠ°Ρ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ *slog.Logger, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ slog.LevelVar ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Writer. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π° ΠΏΠΎΠ»Ρ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π»ΠΎΠ³Π³Π΅ΡΠΎΠ² Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΆΡΡΠ½Π°Π»Π° Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ io.Writer ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°Π±ΡΠΈΠΊΠ° NewWithWriter() ΠΈΠ»ΠΈ NewEx().
ΠΠ°ΠΊΠ΅Ρ slog ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ "ΡΡΠΎΠ½ΡΠ΅Π½Π΄" Π² Π²ΠΈΠ΄Π΅ ΡΡΡΡΠΊΡΡΡΡ slog.Logger ΠΈ Π΅Π΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΆΡΡΠ½Π°Π»Π° ΠΈ "Π±ΡΠΊΠ΅Π½Π΄" Π² Π²ΠΈΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ io.Writer ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. "ΠΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ" slog ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Handler'ΠΎΠ² (Ρ Π΅Π½Π΄Π»Π΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, slog.TextHandler ΠΈ slog.JSONHandler).
ΠΠ°ΠΊΠ΅Ρ xlog ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ "ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°" Π² Π²ΠΈΠ΄Π΅ ΡΡΡΡΠΊΡΡΡΡ xlog.Logger ΠΈ Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ "ΡΠ°Ρ Π°ΡΠ½ΡΠ΅" ΠΌΠ΅ΡΠΎΠ΄Ρ Π²ΡΠΎΠ΄Π΅ Trace ΠΈΠ»ΠΈ Debugf. Π ΡΠΎΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ "ΠΊΠ°Π½ΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠΎΠ½ΡΠ΅Π½Π΄" slog ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ "ΡΠ°Ρ Π°ΡΠ½ΡΡ " ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠ°ΠΊΠ΅Ρ xlog ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π³ΠΈΠ±ΠΊΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ hanlder'ΠΎΠ² c ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΌΠΈ ΠΎΠ±Π΅ΡΡΠΊΠ°ΠΌΠΈ ΠΈ Middleware. ΠΡΠΎΠΌΠ΅ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ, Text ΠΈ JSON hendler'Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ "ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΎΠ³ΠΎ" Ρ Π΅Π½Π΄Π»Π΅ΡΠ° Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ (TintHandler) Π² Ρ.Ρ. Ρ ANSI ΠΏΠΎΠ΄ΠΊΡΠ°ΡΠΊΠΎΠΉ Π²ΡΠ²ΠΎΠ΄Π°.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ API xlog ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ ΠΆΡΡΠ½Π°Π» ΡΡΠ°Π·Ρ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΊΠ°Π½Π°Π» stderr ΠΈ Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ). ΠΠ»Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ ΡΠΌ. ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Writer ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΅Π³ΠΎ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΆΡΡΠ½Π°Π»Π° ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌΡ ΡΠΈΡΠ»Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ (ΡΠΌ. MiltiWtiter).
ΠΠ°ΠΊ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Handler'ΠΎΠ², ΡΠ°ΠΊ ΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Logger'Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½Π° ΡΠ΅ΠΏΠΎΡΠΊΠ° Middleware, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Handle ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Handler'Π°.
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ log/slog Π»ΠΎΠ³Π³Π΅ΡΠΎΠ²
// ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
conf := xlog.Conf{
Level: "info",
}
// ΠΠ±ΠΎΠ³Π°ΡΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
xlog.Env(&conf)
// ΠΠ°ΡΡΡΠΎΠΈΡΡ Π²ΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π»ΠΎΠ³Π³Π΅ΡΡ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΠΎ
xlog.Setup(conf)
// ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°
xlog.SetLevel(slog.LevelDebug)
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π»ΠΎΠ³Π³Π΅ΡΡ log/slog
slog.Debug("debug message", "value", 42)
slog.Info("simple slog", "logLevel", GetLvl())
slog.Error("error", "err", errors.New("some error"))
log.Print("legacy logger")
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ xlog Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
opt := xlog.NewOpt() // ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π±ΠΎΡ ΠΎΠΏΡΠΈΠΉ (*xlog.Opt)
conf := xlog.Conf{} // ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ xlog
flag.Parse() // ΠΎΠ±ΠΎΠ³Π°ΡΠΈΡΡ opt ΠΈΠ· ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
opt.UpdateConf(&conf) // ΠΎΠ±ΠΎΠ³Π°ΡΠΈΡΡ conf ΠΎΠΏΡΠΈΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
log := xlog.New(conf) // ΡΠΎΠ·Π΄Π°ΡΡ X-logger (*xlog.Logger)
logger := log.Logger // ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° *slog.Logger
log.Notice("ΠΡΠΈΠ²Π΅Ρ, XLog", "version", "1.0.0")
mylog := logger.With("app", "helloworld")
mylog.Info("application started")
userLoginInfo := xlog.Fields{
"user_id": 123,
"ip": "192.168.0.1",
"timestamp": time.Now(),
}
mylog.Debug("user login", "userLoginInfo", userLoginInfo)
X-logger (`*xlog.Logger`) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ Π² `*slog.Logger` Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° Slog() ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠΎΠ»Ρ Logger.
ΠΠ±ΡΠ°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ NewFromSlog(). ΠΡΠΈ ΡΡΠΎΠΌ Π΄Π»Ρ Π»ΠΎΠ³Π³Π΅ΡΠ° Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ "ΡΠ°Ρ Π°ΡΠ½ΡΠ΅" ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΈΠΏΠ° Debugf(), Notice(), Log(), Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ "Π½Π° Π»Π΅ΡΡ" Ρ ΠΏΠΎΠΌΠΎΡΡΡ Leveler'Π° ΠΈΠ»ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΡΠ°ΡΠΈΡ ΡΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ.
Π€ΡΠ½ΠΊΡΠΈΠΈ-ΡΠ°Π±ΡΠΈΠΊΠΈ NewWithWriter() ΠΈ NewEx() ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π»ΠΎΠ³Π³Π΅ΡΡ, Π²ΡΠ²ΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ io.Writer, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΆΡΡΠ½Π°Π»Ρ ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΡΠΎΠΊΠ΅ΡΡ ΠΈ FIFO, syslog.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π±ΡΠΈΠΊΠΈ NewWriter ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Writer, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ NewEx(). Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ 12 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Writer. ΠΡΠ²ΠΎΠ΄ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ:
- ΠΠ°Π½Π°Π»/pipe (stdout/stderr)
- Π€Π°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π° Ρ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π±Π΅Π·
- ΠΠ°ΡΡΠΎΠΌΠ½ΡΠΉ io.Writer Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ.
ΠΠΌΠ΅Π΅ΡΡΡ ΡΠΈΠΏ Middleware ΠΈ ΡΠΈΠΏ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² MiddlewareFunc Π΄Π»Ρ ΠΈΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ. Middleware ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ "ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ" (Π² Ρ.Ρ. ΡΠ΅ΠΏΠΎΡΠΊΠ°ΠΌΠΈ) ΠΌΠ΅ΡΠΎΠ΄Ρ Handle() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler. Middleware ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ "Ρ ΡΠΊΠΈ/ΠΎΠ±ΡΡΡΠΊΠΈ" Π΄Π»Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ middleware ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΆΡΡΠ°Π»ΠΎΠ² Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΡΠΎΠ±ΡΠΌ ΠΏΡΡΠ΅ΠΌ. Π‘ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Middleware ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΎΠ±ΠΎΠ³Π°ΡΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ (goroutine, logId, logSum). ΠΠ°Π½Π½ΡΠΉ middleware Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½Π΅Ρ ΡΠ΅ΠΏΠΎΡΠΊΠΈ.
Π‘ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Middleware ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π»ΠΎΠ³Π³Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΈΡΡΠ°ΡΡ ΠΆΡΡΠ½Π°Π» Π² ΡΠ°ΠΉΠ» Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON ΠΈ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ½Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠΠ»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ middleware, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠ°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ NewMiddlewareMulti().
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΠΆΡΡΠ½Π°Π»Π° Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π½Π° stdout ΠΈ Π² ΡΠ°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
// ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΆΡΡΠ½Π°Π»Π° Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π² JSON ΡΠ°ΠΉΠ» Ρ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ
conf := xlog.Conf{
Level: "debug",
File: "logs/itcagent.log",
FileMode: "0640",
Format: "json", // JSON handler
GoId: true,
IdOn: true,
SumOn: true,
SumFull: true,
SumAlone: false,
TimeLocal: false, // UTC
Src: true,
SrcPkg: true,
SrcFunc: true,
SrcFields: &xlog.Fields{
"id": "xservice", // ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠ°
"host": "xservice.example.com",
},
RateLimit: RateLimitConf{
Disable: false, // Π½Π΅ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ Rate Limiter
MaxNum: 100, // ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ [ΡΡ]
IntervalMs: 1000, // Π·Π° Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ [ΠΌΡ]
FlushPeriodMs: 3000, // ΠΏΠ΅ΡΠΈΠΎΠ΄ ΡΠ±ΡΠΎΡΠ° Π·Π°Π΄Π΅ΡΠΆΠ°Π½Π½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ [ΠΌΡ]
},
Rotate: xlog.RotateConf{
Enable: true,
MaxSize: 5, // MB
MaxAge: 7, // days
MaxBackups: 100, // number
LocalTime: false, // UTC
Compress: true,
},
}
// Π‘ΠΎΠ·Π΄Π°ΡΡ Π»ΠΎΠ³Π³Π΅Ρ (Ρ
Π΅Π½Π΄Π»Π΅Ρ) Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π² ΡΠ°ΠΉΠ»
log := xlog.New(conf)
// ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ "ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΎΠ³ΠΎ" ΠΆΡΡΠ½Π°Π»Π° Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° stdout
conf = xlog.Conf{
Level: "trace",
Pipe: "stdout",
Format: "tint", // tinted handler
GoId: false,
IdOn: true,
SumOn: true,
TimeLocal: true, // Local time
TimeFormat: "space", // 2006-01-02_15.04.05.999999999
Src: true,
SrcPkg: false,
SrcFunc: false,
Color: true,
}
// Π‘ΠΎΠ·Π΄Π°ΡΡ "Multi Handler" Π»ΠΎΠ³Π³Π΅Ρ (stdout/text + file/JSON)
log = xlog.New(conf, xlog.NewMiddlewareMulti(log))
log.Debug("Hello, Multi Handler!", "cnt", 1) // ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π² JSON ΡΠ°ΠΉΠ» ΠΈ Π½Π° stdout
log.Trace("Hello, Multi Handler!", "cnt", 2) // ΠΏΠΎΠΏΠ°Π΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° stdout
log.Flood("Hello, Multi Handler!", "cnt", 3) // Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΡΡΠ΅Π½ΠΎ
ΠΠΌΠ΅Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ Π΄Π»Ρ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΆΡΡΠ½Π°Π»Π° ΠΈΠ· ΠΊΠ°ΡΡΡ ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ. Π£ΡΠΈΠ»ΠΈΡΠ° go fmt Ρ ΠΎΡΠΎΡΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅Ρ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ Π΄Π»Ρ ΠΊΠ°ΡΡ, ΡΡΠΎ Π±Π»Π°Π³ΠΎΡΠ²ΠΎΡΠ½ΠΎ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠΌΠ΅ΡΡΡΡ ΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π»ΠΎΠ³Π³Π΅ΡΠ° WithFields, ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ With ΠΈ WithAttrs, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π½Π° Π²Ρ ΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ FieldsProvider.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Fields:
xlog.Error(
"error with fields (Args)",
"err", errors.New("error"),
slog.Group(
"header",
xlog.Fields{
"type": "magic",
"size": 16384,
}.Args()...))
log := xlog.WithAttrs(xlog.Fields{
"application": "testAplication",
"version": "1.2.3",
}.Attrs())
log.Notice("notice with fields (Args)", "someFlag", true)
log.Debug(
"debug with fields",
xlog.Fields{
"superValue": 123,
"now": time.Now(),
"str": "some string",
"pi": 3.1415926,
}.Args()...)
logXY := log.WithFields(xlog.Fields{
"x": 1,
"y": 2,
})
logXY.Debug("vector", "z", 3)
Π£ΡΠΈΠ»ΠΈΡΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π² JSON ΡΠΎΡΠΌΠ°ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌ (logSum ΠΈΠ»ΠΈ LogId).
Π£ΡΠΈΠ»ΠΈΡΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ°Π±ΠΎΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ChecksumVerify(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΡΠΈΠΏΠ° ChecksumRes ΠΏΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ. ΠΠ°ΠΆΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π° JSON Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π½Π° Π²Ρ ΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ ChecksumVerify.
- ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf
- ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Logger
- ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Writer
- ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡΡ Logger
- ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΡΡΡΡΠΊΡΡΡΡ Logger
- ΠΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ Middleware
- ΠΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ Rate Limiter'Π°
Π ΠΏΠ°ΠΊΠ΅ΡΠ΅ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ° ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΡΡΡΡΠΊΡΡΡΡ Logger (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Infof() ΠΈΠ»ΠΈ Fatal())
- Constants
- Variables
- func Alert(msg string, args ...any)
- func Alertf(format string, args ...any)
- func Checksum(sum uint16, full, timeOn bool, r slog.Record, logId uuid.UUID) uint16
- func ChecksumAttr(key string, value any) uint16
- func ChecksumAttrSlog(key string, value slog.Value) uint16
- func ChecksumFull(sum uint16, timeOn bool, r slog.Record, logId uuid.UUID) uint16
- func ChecksumSimple(sum uint16, timeOn bool, r slog.Record, logId uuid.UUID) uint16
- func Crit(msg string, args ...any)
- func Critf(format string, args ...any)
- func Debug(msg string, args ...any)
- func Debugf(format string, args ...any)
- func Emerg(msg string, args ...any)
- func Emergf(format string, args ...any)
- func Env(conf *Conf, prefixOpt ...string)
- func Err(err error) slog.Attr
- func Error(msg string, args ...any)
- func Errorf(format string, args ...any)
- func Fatal(msg string, args ...any)
- func Fatalf(format string, args ...any)
- func Flood(msg string, args ...any)
- func Floodf(format string, args ...any)
- func GetLevel() slog.Level
- func GetLvl() string
- func Info(msg string, args ...any)
- func Infof(format string, args ...any)
- func Int(key string, value int) slog.Attr
- func IsRotatable() bool
- func LevelFromLabel(label string) slog.Level
- func LevelFromString(level string) slog.Level
- func LevelToColorLabel(level slog.Level) string
- func LevelToLabel(level slog.Level) string
- func LevelToString(level slog.Level) string
- func Log(ctx context.Context, level slog.Level, msg string, args ...any) error
- func LogAttrs(ctx context.Context, level slog.Level, msg string, attrs ...slog.Attr) error
- func Logf(level slog.Level, format string, args ...any)
- func NewHandler(conf Conf, writer io.Writer, mws ...Middleware) (handler slog.Handler, _ *slog.LevelVar)
- func NewLog(conf Conf) *log.Logger
- func NewLogWriter(ctx context.Context, logger *slog.Logger, level slog.Level) io.Writer
- func NewStdHandler(conf Conf, mws ...Middleware) (slog.Handler, *slog.LevelVar)
- func Notice(msg string, args ...any)
- func Noticef(format string, args ...any)
- func Panic(msg string)
- func Rotate() error
- func SetLevel(level slog.Level)
- func SetLvl(level string)
- func Setup(conf Conf)
- func SetupLog(logger *log.Logger, conf Conf)
- func SetupLogWithWriter(logger *log.Logger, conf Conf, writer io.Writer)
- func Slog() *slog.Logger
- func SlogWithFields(log *slog.Logger, fields ...FieldsProvider) *slog.Logger
- func Sprint(val any) string
- func String(key, value string) slog.Attr
- func StringToBool(s string) bool
- func StringToInt(s string) int
- func TimeFormat(alias string) (format string, ok bool)
- func Trace(msg string, args ...any)
- func Tracef(format string, args ...any)
- func Value(value any) slog.Value
- func Warn(msg string, args ...any)
- func Warnf(format string, args ...any)
- type ChecksumRes
- type Conf
- type Fields
- type FieldsProvider
- type HandleFunc
- type IdHandler
- func NewIdHandler(handler slog.Handler, opts *IdOptions, sum uint16, mws ...Middleware) *IdHandler
- func (h *IdHandler) Enabled(ctx context.Context, level slog.Level) bool
- func (h *IdHandler) Handle(ctx context.Context, r slog.Record) error
- func (h *IdHandler) WithAttrs(attrs []slog.Attr) slog.Handler
- func (h *IdHandler) WithGroup(name string) slog.Handler
- type IdOptions
- type Logger
- func Current() *Logger
- func Default() *Logger
- func FromSlog(logger *slog.Logger) *Logger
- func New(conf Conf, mws ...Middleware) *Logger
- func NewEx(conf Conf, writer Writer, mws ...Middleware) *Logger
- func NewWithWriter(conf Conf, writer io.Writer, mws ...Middleware) *Logger
- func With(args ...any) *Logger
- func WithAttrs(attrs []slog.Attr) *Logger
- func WithFields(fields FieldsProvider) *Logger
- func WithGroup(name string) *Logger
- func WithMiddleware(mws ...Middleware) *Logger
- func (c *Logger) Alert(msg string, args ...any)
- func (c *Logger) Alertf(format string, args ...any)
- func (c *Logger) Crit(msg string, args ...any)
- func (c *Logger) Critf(format string, args ...any)
- func (c *Logger) Debug(msg string, args ...any)
- func (c *Logger) Debugf(format string, args ...any)
- func (c *Logger) Emerg(msg string, args ...any)
- func (c *Logger) Emergf(format string, args ...any)
- func (c *Logger) Error(msg string, args ...any)
- func (c *Logger) Errorf(format string, args ...any)
- func (c *Logger) Fatal(msg string, args ...any)
- func (c *Logger) Fatalf(format string, args ...any)
- func (c *Logger) Flood(msg string, args ...any)
- func (c *Logger) Floodf(format string, args ...any)
- func (c *Logger) GetLevel() slog.Level
- func (c *Logger) GetLvl() string
- func (c *Logger) Info(msg string, args ...any)
- func (c *Logger) Infof(format string, args ...any)
- func (c *Logger) IsRotatable() bool
- func (c *Logger) Log(ctx context.Context, level slog.Level, msg string, args ...any) error
- func (c *Logger) LogAttrs(ctx context.Context, level slog.Level, msg string, attrs ...slog.Attr) error
- func (c *Logger) Logf(level slog.Level, format string, args ...any)
- func (c *Logger) Notice(msg string, args ...any)
- func (c *Logger) Noticef(format string, args ...any)
- func (c *Logger) Panic(msg string)
- func (c *Logger) Rotate() error
- func (c *Logger) SetDefault()
- func (c *Logger) SetDefaultLogs()
- func (c *Logger) SetLevel(level slog.Level)
- func (c *Logger) SetLvl(level string)
- func (c *Logger) Slog() *slog.Logger
- func (c *Logger) Trace(msg string, args ...any)
- func (c *Logger) Tracef(format string, args ...any)
- func (c *Logger) Warn(msg string, args ...any)
- func (c *Logger) Warnf(format string, args ...any)
- func (c *Logger) With(args ...any) *Logger
- func (c *Logger) WithAttrs(attrs []slog.Attr) *Logger
- func (c *Logger) WithFields(fields ...FieldsProvider) *Logger
- func (c *Logger) WithGroup(name string) *Logger
- func (c *Logger) WithMiddleware(mws ...Middleware) *Logger
- type Middleware
- func NewMiddleware(mwf MiddlewareFunc) Middleware
- func NewMiddlewareForError(logErr *Logger) Middleware
- func NewMiddlewareMulti(log *Logger) Middleware
- func NewMiddlewareNoPasswd() Middleware
- func NewMiddlewareRateLimit(conf RateLimitConf) Middleware
- func NewMiddlewareWithFields(fields FieldsProvider) Middleware
- type MiddlewareFunc
- type MiddlewareHandler
- func NewMiddlewareHandler(handler slog.Handler, mws ...Middleware) *MiddlewareHandler
- func (h *MiddlewareHandler) Enabled(ctx context.Context, level slog.Level) bool
- func (h *MiddlewareHandler) Handle(ctx context.Context, r slog.Record) error
- func (h *MiddlewareHandler) WithAttrs(attrs []slog.Attr) slog.Handler
- func (h *MiddlewareHandler) WithGroup(name string) slog.Handler
- type MultiWriter
- type Opt
- type RateLimitConf
- type RotateConf
- type Stringer
- type TintHandler
- func NewTintHandler(w io.Writer, opts *TintOptions) *TintHandler
- func (h *TintHandler) Enabled(_ context.Context, level slog.Level) bool
- func (h *TintHandler) Handle(ctx context.Context, r slog.Record) error
- func (h *TintHandler) WithAttrs(attrs []slog.Attr) slog.Handler
- func (h *TintHandler) WithGroup(name string) slog.Handler
- type TintOptions
- type Writer
const (
// ΠΠ΅ΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² JSON/text ΠΆΡΡΠ½Π°Π»Π΅
TimeKey = "time"
// ΠΠ΅ΡΠΊΠ° ΡΡΠΎΠ²Π½Ρ Π² JSON/text ΠΆΡΡΠ½Π°Π»Π΅
LevelKey = "level"
// ΠΠ΅ΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ JSON/logfmt ΠΆΡΡΠ½Π°Π»Π΅
MsgKey = "msg"
// ΠΠ΅ΡΠΊΠ° ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΡΠ΅ΠΊΡΡΠΎΠ² Π² JSON ΠΆΡΡΠ½Π°Π»Π΅
SourceKey = "source"
)const (
// ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
// (ΠΏΡΠΈ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ)
FileModeDefault = 0640
// ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»Π° Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
FileModeOnError = 0600 // ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΡΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΏΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π»Π°Π΄Π΅Π»ΡΡΡ
// ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° Π² ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΠ°Ρ
Π΄ΠΎ Π΅Π³ΠΎ ΡΠΎΡΠ°ΡΠΈΠΈ ΠΏΠΎ
// ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ MaxSize=0
RotateMaxSize = 10 // 10 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JSON ΡΠ΅Π³ΠΈ ΡΡΡΡΠΊΡΡΡ Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΡ
Π²ΡΠ²ΠΎΠ΄Π°
// Π² ΠΆΡΡΠ½Π°Π» (ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ TintHandler ΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Sprint())
UseJSONTags = true
)Π€ΠΎΡΠΌΠ°ΡΡ ΠΆΡΡΠ½Π°Π»Π° (4 ΡΠΈΠΏΠ°)
const (
// Π€ΠΎΡΠΌΠ°Ρ ΠΆΡΡΠ½Π°Π»Π° JSON, ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΡΠ΅ΡΡΡ slog.JSONHandler
LogFormatJSON = "json"
LogFormatProd = "prod"
// Π€ΠΎΡΠΌΠ°Ρ ΠΆΡΡΠ½Π°Π»Π° Logfmt, ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΡΠ΅ΡΡΡ slog.TextHandler
LogFormatText = "text"
LogFormatSlog = "slog"
LogFormatLogfmt = "logfmt"
// Π€ΠΎΡΠΌΠ°Ρ ΠΆΡΡΠ½Π°Π»Π° HumanText, ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ TintHandler
LogFormatTint = "tint"
LogFormatTinted = "tinted"
LogFormatHuman = "human"
// Π€ΠΎΡΠΌΠ°Ρ ΠΆΡΡΠ½Π°Π»Π°, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Go ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
LogFormatStd = "std"
LogFormatDefault = "default"
)ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ IdHandler
const (
// ΠΠ»ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π³ΠΎΡΡΡΠΈΠ½Ρ (Π΅ΡΠ»ΠΈ GoId=true)
GoKey = "goroutine"
// ΠΠ»ΡΡ UUID ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅ (Π΅ΡΠ»ΠΈ LogId=true)
IdKey = "logId"
// ΠΠ»ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ (Π΅ΡΠ»ΠΈ SumAlone=true)
SumKey = "logSum"
)Π£ΡΠΎΠ²Π½ΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
DEBUG, INFO, WARN, ERROR - ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ (ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅) ΡΡΠΎΠ²Π½ΠΈ (slog)
TRACE - ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π΄Π»Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ
FLOOD - Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
Π² ΠΆΡΡΠ½Π°Π»
NOTICE, CRIT, ALERT, EMERG - ΡΡΠΎΠ²Π½ΠΈ ΠΏΡΠΈΠ½ΡΡΡΠ΅ Π² syslog
FATAL - ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ log.Fatal())
PANIC - ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠ°Π½ΠΈΠΊΠΈ
SILENT - ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π΄Π»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΎΠ²ΡΠ΅
const (
LevelFlood = slog.Level(-12) // FLOOD (-12)
LevelTrace = slog.Level(-8) // TRACE (-8)
LevelDebug = slog.LevelDebug // DEBUG (-4)
LevelInfo = slog.LevelInfo // INFO (0)
LevelNotice = slog.Level(2) // NOTICE (2)
LevelWarn = slog.LevelWarn // WARN (4)
LevelError = slog.LevelError // ERROR (8)
LevelCrit = slog.Level(10) // CRIT (10)
LevelAlert = slog.Level(12) // ALERT (12)
LevelEmerg = slog.Level(14) // EMERG (14)
LevelFatal = slog.Level(16) // FATAL (16)
LevelPanic = slog.Level(18) // PANIC (18)
LevelSilent = slog.Level(20) // SILENT (20)
)Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΡΠΎΠ²Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
const (
LvlFlood = "flood"
LvlTrace = "trace"
LvlDebug = "debug"
LvlInfo = "info"
LvlNotice = "notice"
LvlWarn = "warn"
LvlError = "error"
LvlCrit = "crit"
LvlAlert = "alert"
LvlEmerg = "emerg"
LvlFatal = "fatal"
LvlPanic = "panic"
LvlSilent = "silent"
)ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ (Rate Limiter'Π°) ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
const (
DEFAULT_RATE_LIMIT_MAX_NUM = 100 // ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ [ΡΡ]
DEFAULT_RATE_LIMIT_INTERVAL_MS = 1000 // Π·Π° Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ [ΠΌΡ]
// ΠΠ΅ΡΠΈΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π°Π»ΠΈΡΠΈΡ Π³ΠΎΡΠΎΠ²ΡΡ
ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ [ΠΌΡ]
DEFAULT_RATE_LIMIT_FLUSH_PERIOD_MS = 3000
)ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΠΆΡΡΠ½Π°Π»Π΅, ΡΠ³ΡΡΠΏΠΏΡΠΎΠ²Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Rate Limiter'Π°
const (
// ΠΠ»ΡΡ Π΄Π»Ρ ΡΠΈΡΠ»Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ
Π² ΠΎΠ΄Π½ΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ
// ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ RateLimiter'Π°.
// ΠΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅ 1.
RepeatedKey = "repeated"
// ΠΠ»ΡΡ Π΄Π»Ρ Π±ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π·Π°Π΄Π΅ΡΠΆΠ°Π½ΠΎ
// Π½ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ.
DelayedKey = "delayed"
// ΠΠ»ΡΡ Π΄Π»Ρ Π±ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΡΠ΅Ρ ΠΎ ΡΠΎΠΌ,
// ΡΡΠΎ Π²ΡΠ±ΡΠΎΡ Π·Π°Π΄Π΅ΡΠΆΠ°Π½Π½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΆΡΡΠ½Π°Π» Π±ΡΠ» Π²
// ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ FlushPeriodMs
FlushedKey = "flushed"
)Π€ΠΎΡΠΌΠ°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅ΡΠΊΠΈ Π΄Π»Ρ TintHanler'Π°
const (
// ΠΠ΅ΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠ°ΠΊ Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ° Π² Go
StdTime = "2006/01/02 15:04:05"
DateTime = time.DateTime // "2006-01-02 15:04:05"
// Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΠΌΠ΅ΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Ρ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ
StdTimeMilli = "2006/01/02 15:04:05.999"
DateTimeMilli = "2006-01-02 15:04:05.999"
// Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΠΌΠ΅ΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ
StdTimeMicro = "2006/01/02 15:04:05.999999"
DateTimeMicro = "2006-01-02 15:04:05.999999"
// Π€ΠΎΡΠΌΠ°Ρ RFC3339 Ρ Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ (slog.TextHandler ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ)
RFC3339Nano = time.RFC3339Nano // "2006-01-02T15:04:05.999999999Z07:00"
// Π€ΠΎΡΠΌΠ°Ρ RFC3339 Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ
RFC3339Micro = "2006-01-02T15:04:05.999999Z07:00"
// Π€ΠΎΡΠΌΠ°Ρ RFC3339 Ρ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ
RFC3339Milli = "2006-01-02T15:04:05.999Z07:00"
// Π’ΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΡ Ρ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ
TimeOnlyMilli = "15:04:05.999"
// Π’ΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΡ Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ
TimeOnlyMicro = "15:04:05.999999"
// Π€ΠΎΡΠΌΠ°Ρ ΠΏΡΠΎΡΡΡΡ
ΡΠΈΡΡΠΎΠ²ΡΡ
ΡΠ°ΡΠΎΠ² (ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ time.Kitchen)
Office = "15:04"
// Π€ΠΎΡΠΌΠ°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π°ΡΠ°+Π²ΡΠ΅ΠΌΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² (Ρ Π΄ΠΎΠ»ΡΠΌΠΈ ΡΠ΅ΠΊΡΠ½Π΄)
File = "2006-01-02_15.04.05"
Home = "2006-01-02_15.04.05.9"
Lab = "2006-01-02_15.04.05.999"
Science = "2006-01-02_15.04.05.999999"
Space = "2006-01-02_15.04.05.999999999"
)ΠΡΠ΅ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
const DefaultEnvPrefix = "LOG_"ΠΡΠ΅ΡΠΈΠΊΡ Π΄Π»Ρ ΡΠ»Π°Π³ΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
const DefaultFlagPrefix = "log-"Π£ΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
const DefaultLevel = slog.LevelInfoΠΠ»ΡΡ Π΄Π»Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±Π΅ΡΡΠΊΠΈ Err()
const ErrKey = "err"ΠΡΠΈΠ±ΠΊΠ°: Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Ρ Π΅Π½Π΄Π»Π΅Ρ (nil)
var ErrNilHandler = errors.New("handler is nil")ΠΡΠΈΠ±ΠΊΠ°: "ΡΠΎΡΠ°ΡΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ"
var ErrNotRotatable = errors.New("logger is not rotatable")func Alert
func Alert(msg string, args ...any)Alert Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelAlert)
func Alertf
func Alertf(format string, args ...any)Alertf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelAlert)
func Checksum
func Checksum(sum uint16, full, timeOn bool, r slog.Record, logId uuid.UUID) uint16Checksum Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ (Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ CRC16) Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² (full=true/false).
ΠΠ° Π²Ρ ΠΎΠ΄Π΅:
full - ΠΏΡΠΈΠ·Π½Π°ΠΊ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ
sum - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ»ΠΈ 0
timeOn - Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΡΠ°ΡΡΠ΅Ρ CRC ΠΌΠ΅ΡΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
r - ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½Π°Ρ Π΄Π»Ρ Π²ΡΠ΄Π°ΡΠΈ Π² slog-ΠΆΡΡΠ½Π°Π» Π·Π°ΠΏΠΈΡΡ
logId - UUID Π·Π°ΠΏΠΈΡΠΈ
func ChecksumAttr
func ChecksumAttr(key string, value any) uint16ChecksumAttr Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ Π·Π°ΠΏΠΈΡΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° key/value. ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ. ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΠΌΠΌΡ ΡΠΌΠ΅ΠΆΠ½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ 2 (XOR). ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΠΌΠΌΡ key ΠΈ value ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.
func ChecksumAttrSlog
func ChecksumAttrSlog(key string, value slog.Value) uint16ChecksumAttrSlog - Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ Π·Π°ΠΏΠΈΡΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° slog key/value. ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠΈΠΏ slog Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π΅ΡΠ»ΠΈ ΡΠΈΠΏ, Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ (ΡΠΌ. slogg.Kind) ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ (ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π½ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ). ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡ. ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΠΌΠΌΡ ΡΠΌΠ΅ΠΆΠ½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ 2 (XOR). ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΠΌΠΌΡ key ΠΈ value ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ key ΠΈ slog.Value. Π€ΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ slog Π³ΡΡΠΏΠΏΡ.
func ChecksumFull
func ChecksumFull(sum uint16, timeOn bool, r slog.Record, logId uuid.UUID) uint16ChecksumFull Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅. ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ JSON.
ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΠΌΠΌΡ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠ°Ρ ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ 2 (XOR), ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ. ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ CRC16 ΡΡΠΌΠΌ. ΠΠ΅ΡΠ΅Π΄ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ CRC16 ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΡΡΠΎΠΊΠ΅.
ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ:
- Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΊΡ Π² RFC3339Milli, Π΅ΡΠ»ΠΈ timeOn=true (time=<string>);
- ΡΡΠΎΠ²Π΅Π½Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° (level=<int>)
- ΡΠ΅ΠΊΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ r.Message (msg=<string>)
- "ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΡΠΌΠΌΡ" Π²ΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π½Π΅ Π·Π°Π²ΠΈΡΡΡΡΡ ΠΎΡ Π»ΡΠ±ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ
- ΠΏΠ΅ΡΠ²ΡΠ΅ (ΡΡΠ°ΡΡΠΈΠ΅) 14 Π±Π°ΠΉΡ UUID ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° (logId=<bytes>)
ΠΠ° Π²Ρ ΠΎΠ΄Π΅:
sum - Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ ΠΈΠ»ΠΈ 0
timeOn - Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΡΠ°ΡΡΠ΅Ρ ΡΡΠΌΠΌΡ ΠΌΠ΅ΡΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
r - ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½Π°Ρ Π΄Π»Ρ Π²ΡΠ΄Π°ΡΠΈ Π² slog-ΠΆΡΡΠ½Π°Π» Π·Π°ΠΏΠΈΡΡ
logId - UUID Π·Π°ΠΏΠΈΡΠΈ
func ChecksumSimple
func ChecksumSimple(sum uint16, timeOn bool, r slog.Record, logId uuid.UUID) uint16ChecksumSimple Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ (CRC16) Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅. ΠΠΎΠ½ΡΡΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ:
- time (RFC3339Milli ΠΈΠ»ΠΈ RFC3339Micro ΠΊΠ°ΠΊ Π² ΠΆΡΡΠ½Π°Π»Π΅)
- level (ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠ° ΡΠΈΠΏΠ° ERROR, WARN ΠΈ Ρ.ΠΏ.)
- msg (ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠ°)
- logId (ΡΡΠ°ΡΡΠΈΠ΅ 14 Π±Π°ΠΉΡ)
- err, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ (ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΡ)
ΠΠ° Π²Ρ ΠΎΠ΄Π΅:
sum - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ»ΠΈ 0
timeOn - Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΡΠ°ΡΡΠ΅Ρ CRC ΠΌΠ΅ΡΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
r - ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½Π°Ρ Π΄Π»Ρ Π²ΡΠ΄Π°ΡΠΈ Π² slog-ΠΆΡΡΠ½Π°Π» Π·Π°ΠΏΠΈΡΡ
logId - UUID Π·Π°ΠΏΠΈΡΠΈ
func Crit
func Crit(msg string, args ...any)Crit Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelCrit)
func Critf
func Critf(format string, args ...any)Critf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelCrit)
func Debug
func Debug(msg string, args ...any)Debug Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelDebug)
func Debugf
func Debugf(format string, args ...any)Debugf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelDebug)
func Emerg
func Emerg(msg string, args ...any)Emerg Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelEmerg)
func Emergf
func Emergf(format string, args ...any)Emergf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelEmerg)
func Env
func Env(conf *Conf, prefixOpt ...string)Env - ΠΎΠ±ΠΎΠ³Π°ΡΠ°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
conf - ΠΎΠ±ΠΎΠ³Π°ΡΠ°Π΅ΠΌΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ°
prefixOpt - ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ "LOG_")
ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΈΠ½Π²Π΅ΡΡΠΈΠ΅ΠΉ) ΠΏΠΎΠ»ΡΠΌ ΡΡΡΡΠΊΡΡΡΡ Conf:
LOG_LEVEL (string/int: "debug", "trace", "error", "0", "-20"...)
LOG_PIPE (string: "stdout", "stderr", "null")
LOG_FILE (string: ~"logs/app.log")
LOG_FILE_MODE (string: ~"0640")
LOG_FORMAT (string: "json", "logfmt", "tinted", "default")
LOG_GOID (bool)
LOG_ID (bool)
LOG_SUM (bool)
LOG_SUM_FULL (bool)
LOG_SUM_CHAIN (bool)
LOG_SUM_ALONE (bool)
LOG_TIME (bool)
LOG_TIME_LOCAL (bool)
LOG_TIME_MICRO (bool)
LOG_TIME_FORMAT (string: "default", "lab", "15.04.05"...)
LOG_SRC (bool)
LOG_SRC_PKG (bool)
LOG_SRC_FUNC (bool)
LOG_SRC_EXT (bool)
LOG_COLOR (bool)
LOG_LEVEL_OFF (bool)
LOG_ROTATE (bool)
LOG_ROTATE_MAX_SIZE (int: ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ)
LOG_ROTATE_MAX_AGE (int: ΡΡΡΠΎΠΊ)
LOG_ROTATE_MAX_BACKUPS (int: ΡΠΈΡΠ»ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²)
LOG_ROTATE_LOCAL_TIME (bool)
LOG_ROTATE_COMPRESS (bool)
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ bool Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ StringToBool(), Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Ρ "Π²ΠΎΠ»ΡΠ½ΠΎΡΡΠΈ", ΠΊΡΠΎΠΌΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ true/false.
ΠΡΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° (ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ), ΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΠΎΠ»Π΅ ΡΡΡΡΠΊΡΡΡΡ Conf Π½Π΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ.
Π’ΠΈΠΏΠΎΠ²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
conf := xlog.Conf{} // ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ°
xlog.Env(&conf) // ΠΎΠ±ΠΎΠ³Π°ΡΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
func Err
func Err(err error) slog.AttrErr Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ slog.Attr Ρ ΠΊΠ»ΡΡΠΎΠΌ "err" Π΅ΡΠ»ΠΈ err != nil ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ "ΠΏΡΡΡΠΎΠΉ" Π°ΡΡΠΈΠ±ΡΡ, Π΅ΡΠ»ΠΈ err == nil. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡ Π½Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΡΠΈΠΏΠ° "err=nil".
func Error
func Error(msg string, args ...any)Error Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelError)
func Errorf
func Errorf(format string, args ...any)Errorf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelError)
func Fatal
func Fatal(msg string, args ...any)Fatal Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelFatal) ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° os.Exit(1)
func Fatalf
func Fatalf(format string, args ...any)Fatalf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelFatal) ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° os.Exit(1)
func Flood
func Flood(msg string, args ...any)Flood Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelFlood)
func Floodf
func Floodf(format string, args ...any)Floodf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelFlood)
func GetLevel
func GetLevel() slog.LevelGetLevel Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°
func GetLvl
func GetLvl() stringGetLvl Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ° Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ Π²ΠΈΠ΄Π° "info", "debug" ΠΈ Ρ.ΠΏ.
func Info
func Info(msg string, args ...any)Info Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelInfo)
func Infof
func Infof(format string, args ...any)Infof Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelInfo)
func Int
func Int(key string, value int) slog.AttrInt Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ slog.Attr, Π΅ΡΠ»ΠΈ key != "" ΠΈ value != 0 ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ "ΠΏΡΡΡΠΎΠΉ" Π°ΡΡΠΈΠ±ΡΡ. ΠΠ°Π½Π½Π°Ρ ΠΎΠ±ΡΡΡΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ· ΠΆΡΡΠ½Π°Π»Π° Π½ΡΠ»Π΅Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
func IsRotatable
func IsRotatable() boolIsRotatable Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΈΠ·Π½Π°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° Π΄Π»Ρ Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°
func LevelFromLabel
func LevelFromLabel(label string) slog.LevelLevelFromLabel ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΌΠ΅ΡΠΊΡ ΡΡΠΎΠ²Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (INFO, WARN, ...) Π² ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π»ΠΎΠ³ΠΎΠ². ΠΡ ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΈΠ΄Π° "ERROR+2", ΠΏΡΠΈΠ½ΡΡΠΎΠ³ΠΎ Π² slog.
func LevelFromString
func LevelFromString(level string) slog.LevelLevelFromString ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΡΡΠΎΠΊΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΠΎΠ²Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ("debug", "info", "0" ΠΈ Π΄Ρ.), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊ slog.Level. Π€ΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Π° Π² ΡΠ΅Π³ΠΈΡΡΡΡ. Π£ΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΠ°ΠΊ ΠΈ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠΌ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ.
func LevelToColorLabel
func LevelToColorLabel(level slog.Level) stringLevelToColorLabel ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΡΡΠΎΠΊΠ΅/ΠΌΠ΅ΡΠΊΠ΅ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Escape/Ansi ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² TintHandler'Π΅, Π΅ΡΠ»ΠΈ Π² ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf Π·Π°Π΄Π°Π½Ρ Format="tinted" ΠΈ Color=true. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠΎΠ²Π½ΠΈ (FLOOD, EMERG, ALERT ΠΈ Π΄Ρ.).
func LevelToLabel
func LevelToLabel(level slog.Level) stringLevelToLabel ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΡΡΠΎΠΊΠ΅/ΠΌΠ΅ΡΠΊΠ΅ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ ("INFO", "ERROR" ΠΈ Π΄Ρ.) Π² ΡΡΠΈΠ»Π΅ slog, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ String() ΡΠΈΠΏΠΎΠ² slog.Level/slog.LevelVar. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠΎΠ²Π½ΠΈ (TRACE, NOTICE, CRIT ΠΈ Π΄Ρ.).
func LevelToString
func LevelToString(level slog.Level) stringLevelToString ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ²Π½Ρ Π»ΠΎΠ³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ slog.Level ΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ Π² ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ Π·Π°Π΄Π°Π½ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π΅Π³ΠΎ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
func Log
func Log(ctx context.Context, level slog.Level, msg string, args ...any) errorLog Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ
func LogAttrs
func LogAttrs(ctx context.Context, level slog.Level, msg string, attrs ...slog.Attr) errorLogAttr Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ
func Logf
func Logf(level slog.Level, format string, args ...any)Log Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
func NewHandler
func NewHandler(conf Conf, writer io.Writer, mws ...Middleware) (handler slog.Handler, _ *slog.LevelVar)NewHandler ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ *slog.Handler Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ conf Ρ Π²ΡΠ΄Π°ΡΠ΅ΠΉ ΠΆΡΡΠ½Π°Π»Π° ΡΠ΅ΡΠ΅Π· Π·Π°Π΄Π°Π½Π½ΡΠΉ writer. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ Ρ Π΅Π½Π΄Π»Π΅Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ (goroutine, logId, logSum, repeated). ΠΠ°ΠΎΠ΄Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° slog.LevelVar Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
conf - ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ°
writer - ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΠΆΡΡΠ½Π°Π»Π°
mws - Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΡΡΠΊΠΈ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Hanlde() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler
func NewLog
func NewLog(conf Conf) *log.LoggerNewLog ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ (legacy) Π»ΠΎΠ³Π³Π΅Ρ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Ρ ΡΡΡΡΠΎΠΌ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf Π΄Π»Ρ X-logger
func NewLogWriter
func NewLogWriter(ctx context.Context, logger *slog.Logger, level slog.Level) io.WriterNewLogWiter ΡΠΎΠ·Π΄Π°Π΅Ρ io.Writer Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ slog Π»ΠΎΠ³Π³Π΅ΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ ΠΏΠΎΡΠΎΠΊ Π±Π°ΠΉΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ io.Wtiter Π±ΡΠ΄ΡΡ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ slog.Logger Π² Π²ΠΈΠ΄Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (Π°ΡΡΠΈΠ±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ). Π€ΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ legacy Π»ΠΎΠ³Π³Π΅ΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ°ΠΊΠ΅ΡΠ° "log" Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΆΡΡΠ½Π°Π»Π° Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» slog.
func NewStdHandler
func NewStdHandler(conf Conf, mws ...Middleware) (slog.Handler, *slog.LevelVar)Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Ρ Π΅Π½Π΄Π»Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ slog Π»ΠΎΠ³Π³Π΅ΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² (goroutine, logId, logSum) ΠΈ middleware
conf - ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ°
mws - ΠΎΠ±ΡΡΡΠΊΠΈ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Hanlde() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler
func Notice
func Notice(msg string, args ...any)Notice Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelNotice)
func Noticef
func Noticef(format string, args ...any)Noticef Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelNotice)
func Panic
func Panic(msg string)Panic Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelPanic) ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° panic()
func Rotate
func Rotate() errorRotate ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠΎΡΠ°ΡΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° (Π΅ΡΠ»ΠΈ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΠ°ΡΠΈΡ Π»ΠΎΠ³ΠΎΠ² ΠΏΠΎ ΡΠΈΠ³Π½Π°Π»Ρ SIGHUP.
func SetLevel
func SetLevel(level slog.Level)SetLevel ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°
func SetLvl
func SetLvl(level string)SetLvl ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΠΎΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠΈΠΏΠ° "trace", "error" ΠΈ Ρ.ΠΏ.
func Setup
func Setup(conf Conf)Setup - ΠΌΠ΅Π³Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π»ΠΎΠ³Π³Π΅ΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf. Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎ Π½Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ!
func SetupLog
func SetupLog(logger *log.Logger, conf Conf)SetupLog ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ *log.Logger Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf Π΄Π»Ρ "Client Logger" Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄Π° Π² ΡΠ°ΠΉΠ» Ρ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ (Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ). Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ NewWriter() ΠΈ SetupLogWithWriter().
func SetupLogWithWriter
func SetupLogWithWriter(logger *log.Logger, conf Conf, writer io.Writer)SetupLogWithWriter ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ *log.Logger Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf Π΄Π»Ρ "Client Logger" Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄Π° Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ io.Writer Π²ΠΌΠ΅ΡΡΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
func Slog
func Slog() *slog.LoggerSlog Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ *slog.Logger ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ (Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ) Π»ΠΎΠ³Π³Π΅ΡΠ°
func SlogWithFields
func SlogWithFields(log *slog.Logger, fields ...FieldsProvider) *slog.LoggerSlogWithFields ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ *slog.Logger Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
log - ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ slog Π»ΠΎΠ³Π³Π΅Ρ
fields - ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
func Sprint
func Sprint(val any) stringSprint - ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π² ΡΡΡΠΎΠΊΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Π±Π»ΠΈΠ·ΠΊΠΎΠΌ ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌΡ ΡΠΎΡΠΌΠ°ΡΡ "%+v", Π½ΠΎ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ. ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ JSON ΡΠ΅Π³ΠΈ (Π΅ΡΠ»ΠΈ UseJSONTags=true) Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ Π² TintHandler'Π΅.
val - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΡ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ
Π½Π° ΡΡΡΡΠΊΡΡΡΡ, ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΊΠ°ΡΡΡ.
func String
func String(key, value string) slog.AttrString Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ slog.Attr, Π΅ΡΠ»ΠΈ key != "" ΠΈ value != "" ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ "ΠΏΡΡΡΠΎΠΉ" Π°ΡΡΠΈΠ±ΡΡ. ΠΠ°Π½Π½Π°Ρ ΠΎΠ±ΡΡΡΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ· ΠΆΡΡΠ½Π°Π»Π° ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ.
func StringToBool
func StringToBool(s string) boolStringToBool ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΡΡΠΎΠΊΡ Π² Π±ΡΠ»Π΅Π²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠΏΡΡΡΠΈΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
true: "true", "True", "yes", "YES", "on", "1", "2", "99"
false: "false", "FALSE", "no", "Off", "0", "Abra-Cadabra"
Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ false. Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ»Π°Π³ΠΎΠ².
func StringToInt
func StringToInt(s string) intStrintToInt ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΡΡΠΎΠΊΡ ΠΊ ΡΠ΅Π»ΠΎΠΌΡ ΡΠΈΡΠ»Ρ. Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ 0. Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ»Π°Π³ΠΎΠ².
func TimeFormat
func TimeFormat(alias string) (format string, ok bool)TimeFormat Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅ΡΠΊΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ) ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π±Π΅Π· ΡΡΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°. ΠΡΠ»ΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΡΠΎ Π²Ρ ΠΎΠ΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠΎΡΠΌΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² Go Π½ΠΎΡΠ°ΡΠΈΠΈ (Π°Π»Ρ "2006-01-02 15:04:05").
ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ ok=true, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ Π½Π°ΠΉΠ΄Π΅Π½. Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Tinted Ρ Π΅Π½Π΄Π»Π΅ΡΠ°. ΠΠΎΠΏΡΡΡΠΈΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ:
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Go Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ go1.20:
"Layout": time.Layout "01/02 03:04:05PM '06 -0700"
"ANSIC": time.ANSIC "Mon Jan _2 15:04:05 2006"
"UnixDate": time.UnixDate "Mon Jan _2 15:04:05 MST 2006"
"RubyDate": time.RubyDate "Mon Jan 02 15:04:05 -0700 2006"
"RFC822": time.RFC822 "02 Jan 06 15:04 MST"
"RFC822Z": time.RFC822Z "02 Jan 06 15:04 -0700"
"RFC850": time.RFC850 "Monday, 02-Jan-06 15:04:05 MST"
"RFC1123": time.RFC1123 "Mon, 02 Jan 2006 15:04:05 MST"
"RFC1123Z": time.RFC1123Z "Mon, 02 Jan 2006 15:04:05 -0700"
"RFC3339": time.RFC3339 "2006-01-02T15:04:05Z07:00"
"RFC3339Nano": time.RFC3339Nano "2006-01-02T15:04:05.999999999Z07:00"
"Kitchen": time.Kitchen "3:04PM"
"Stamp": time.Stamp "Jan _2 15:04:05"
"StampMilli": time.StampMilli "Jan _2 15:04:05.000"
"StampMicro": time.StampMicro "Jan _2 15:04:05.000000"
"StampNano": time.StampNano "Jan _2 15:04:05.000000000"
"DateTime": time.DateTime "2006-01-02 15:04:05"
"DateTimeMilli": DateTimeMilli "2006-01-02 15:04:05.999"
"DateTimeMicro": DateTimeMicro "2006-01-02 15:04:05.999999"
"DateOnly": time.DateOnly "2006-01-02"
"TimeOnly": time.TimeOnly "15:04:05"
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ xlog:
"StdTime": StdTime "2006/01/02 15:04:05"
"StdTimeMilli": StdTimeMilli "2006/01/02 15:04:05.999"
"StdTimeMicro": StdTimeMicro "2006/01/02 15:04:05.999999"
"RFC3339Micro": RFC3339Micro "2006-01-02T15:04:05.999999Z07:00"
"RFC3339Milli": RFC3339Milli "2006-01-02T15:04:05.999Z07:00"
"TimeOnlyMicro": TimeOnlyMicro "15:04:05.999999"
"TimeOnlyMilli": TimeOnlyMilli "15:04:05.999"
"Default": StdTimeMilli "2006/01/02 15:04:05.999"
"DefaultMicro": StdTimeMicro "2006/01/02 15:04:05.999999
"File": File "2006-01-02_15.04.05"
"Office": Office "15:04" ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ "Kitchen" Π² Go
"Home": Home "2006-01-02_15.04.05.9"
"Lab": Lab "2006-01-02_15.04.05.999"
"Science": Science "2006-01-02_15.04.05.999999"
"Space": Space "2006-01-02_15.04.05.999999999"
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅:
"" (ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°), "off", "no", "false", "disable", "0"
func Trace
func Trace(msg string, args ...any)Trace Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelTrace)
func Tracef
func Tracef(format string, args ...any)Tracef Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelTrace)
func Value
func Value(value any) slog.ValueValue - ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ slog.Value ΠΈΠ· any
func Warn
func Warn(msg string, args ...any)Warn Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelWarn)
func Warnf
func Warnf(format string, args ...any)Warnf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (LevelWarn)
type ChecksumRes
ChecksumRes - ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ JSON Π·Π°ΠΏΠΈΡΠΈ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²Π΅ΡΠΈΡΡ ΠΏΠΎΠ»Ρ LogSum ΠΈ Sum. ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ChecksumVerify().
type ChecksumRes struct {
Time time.Time // ΠΌΠ΅ΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°ΠΏΠΈΡΠΈ
Level slog.Level // ΡΡΠΎΠ²Π΅Π½Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
Source map[string]any // ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡ (Π΅ΡΠ»ΠΈ Π΅ΡΡΡ)
Message string // ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π°
Goroutine int // ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π³ΠΎΡΡΡΠΈΠ½Ρ (Π΅ΡΠ»ΠΈ Π΅ΡΡΡ)
LogId uuid.UUID // ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅
Err string // ΠΎΡΠΈΠ±ΠΊΠ° Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ Ρ ΠΊΠ»ΡΡΠΎΠΌ "err"
LogSum uint16 // ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π½Π°Ρ ΠΈΡ
ΠΆΡΡΠ½Π°Π»Π°
Sum uint16 // ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π²ΡΡΠΈΡΠ»Π΅Π½Π½Π°Ρ
}func ChecksumVerify
func ChecksumVerify(full bool, rec map[string]any) (ChecksumRes, error)ChecksumVerify ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ JSON Π·Π°ΠΏΠΈΡΠΈ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ ChecksumRes. ΠΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ°ΡΠΏΠ°ΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Sum ΠΈ LogSum Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ΄ (ΠΏΡΠΈ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ). ΠΡΠ»ΠΈ Π² Π·Π°ΠΏΠΈΡΠΈ ΠΆΡΡΠ½Π°Π»Π° Π½Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ logId, ΠΈ logSum, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°.
full - ΠΏΡΠΈΠ·Π½Π°ΠΊ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ
rec - Π·Π°ΠΏΠΈΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΠ°Ρ ΠΈΠ· ΠΆΡΡΠ½Π°Π»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ JSON Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠ°
func ChecksumVerifyFull
func ChecksumVerifyFull(rec map[string]any) (ChecksumRes, error)ChecksumVerifyFull ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ JSON Π·Π°ΠΏΠΈΡΠΈ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ ChecksumRes. ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ JSON.
ΠΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ°ΡΠΏΠ°ΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Sum ΠΈ LogSum Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ΄ (ΠΏΡΠΈ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ). ΠΡΠ»ΠΈ Π² Π·Π°ΠΏΠΈΡΠΈ ΠΆΡΡΠ½Π°Π»Π° Π½Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ logId, ΠΈ logSum, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°.
rec - Π·Π°ΠΏΠΈΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΠ°Ρ ΠΈΠ· ΠΆΡΡΠ½Π°Π»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ JSON Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠ°
func ChecksumVerifySimple
func ChecksumVerifySimple(rec map[string]any) (ChecksumRes, error)ChecksumVerify ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ JSON Π·Π°ΠΏΠΈΡΠΈ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ ChecksumRes. ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎ Π½Π΅ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ JSON (time, level, msg, logId, err).
ΠΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ°ΡΠΏΠ°ΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Sum ΠΈ LogSum Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ΄ (ΠΏΡΠΈ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ). ΠΡΠ»ΠΈ Π² Π·Π°ΠΏΠΈΡΠΈ ΠΆΡΡΠ½Π°Π»Π° Π½Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ logId, ΠΈ logSum, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°.
rec - Π·Π°ΠΏΠΈΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΠ°Ρ ΠΈΠ· ΠΆΡΡΠ½Π°Π»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ JSON Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠ°
func (ChecksumRes) SourceToString
func (res ChecksumRes) SourceToString() stringSourceToString - ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ map/JSON ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡ (file/function/line) Π² ΡΡΡΠΎΠΊΡ Π²ΠΈΠ΄Π° "file:function():line". Π€ΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»Ρ Source ΡΡΡΡΠΊΡΡΡΡ ChecksumRes.
type Conf
Conf - ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ°
type Conf struct {
// ΠΠ°Π΄Π°Π½Π½ΡΠΉ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
// ΠΠ°Π΄Π°Π΅ΡΡΡ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΎΠΉ (trace/debug/info/warn/error/crit/fatal/...),
// ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΎΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΡΠ΅Π»ΠΎΠ΅ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π² Π½ΠΎΡΠ°ΡΠΈΠΈ `slog.Level`
// (ΡΠΌ. ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠΈΠΏΠ° LogLevelTrace/LogLevelInfo/...).
// ΠΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»Ρ Level ΡΡΡΡΠΊΡΡΡΡ Logger ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ
// Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
// ΠΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΡΠΎΠ²Π΅Π½Ρ "info".
//
// flood = slog.Level(-12) - ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
// trace = slog.Level(-8) - ΡΡΠΎΠ²Π΅Π½Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π²ΡΠ΅Ρ
Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΎΠ² (syslog)
// debug = slog.LevelDebug - ΡΡΠΎΠ²Π΅Π½Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (ΠΎΠΏΡΡΠ½Π°Ρ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΡ)
// info = slog.LevelInfo - ΡΡΠΎΠ²Π΅Π½Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΡ)
// notice = slog.Level(2) - Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π²Π°ΠΆΠ½ΡΡ
ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ (syslog)
// warn = slog.LevelWarn - ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ
// error = slog.LevelError - ΡΡΠΎΠ²Π΅Π½Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ
// crit = slog.Level(10) - ΡΡΠΎΠ²Π΅Π½Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΡΠΈΠ±ΠΎΠΊ
// alert = slog.Level(12) - ΡΡΠΎΠ²Π΅Π½Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ (syslog)
// emerg = slog.Level(14) - ΡΡΠΎΠ²Π΅Π½Ρ Π°Π²Π°ΡΠΈΠΈ (syslog)
// fatal = slog.Level(16) - ΡΡΠΎΠ²Π΅Π½Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
// panic = slog.Level(18) - ΡΡΠΎΠ²Π΅Π½Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ°Π½ΠΈΠΊΠΎΠΉ
// silent = slog.Level(20) - ΠΏΠΎΠ»Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΆΡΡΠ½Π°Π»
Level string `json:"level"`
// ΠΠ°Π΄Π°Π½Π½ΡΠΉ Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ("stdout", "stderr", "null" ΠΈΠ»ΠΈ ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°).
// ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π·Π°Π΄Π°Π½ (ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°) ΠΈ Π½Π΅ Π·Π°Π΄Π°Π½ ΡΠ°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π° (ΠΏΡΡΡΠ°Ρ
// ΡΡΡΠΎΠΊΠ°), ΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ "stdout" (Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ).
// ΠΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ
// Pipe="null" ΠΈ File="".
Pipe string `json:"pipe"`
// ΠΠ°Π΄Π°Π½Π½ΡΠΉ Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π° (ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°, Π΅ΡΠ»ΠΈ Π½Π΅ Π·Π°Π΄Π°Π½).
// ΠΡΠ»ΠΈ Π·Π°Π΄Π°Π½ File, Π° Pipe="", ΡΠΎ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ
// Π² ΡΠ°ΠΉΠ». ΠΡΠ»ΠΈ ΡΠ²Π½ΠΎ Π·Π°Π΄Π°ΡΡ Pipe (stdout ΠΈΠ»ΠΈ stderr) ΠΈ File, ΡΠΎ
// ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ Π² Π΄Π²ΡΡ
Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ
.
// Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΠΎΡΠΎΠΊ stdout ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ systemd/journald,
// Π° Π΄Π»Ρ ΠΆΡΡΠ½Π°Π»Π° Π² ΡΠ°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π·Π°Π΄Π°Π½Π½Π°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ
// ΠΈ ΡΠΎΡΠ°ΡΠΈΠΈ.
File string `json:"file"`
// ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»Π° (ΡΡΡΠΎΠΊΠ° Π² Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΠΎΠΉ Unix Π½ΠΎΡΠ°ΡΠΈΠΈ).
// ΠΡΠ»ΠΈ FileMode - ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°, ΡΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠ°Π²Π° 0640
// (ΡΠΌ. ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ FileModeDefault).
// ΠΡΠ»ΠΈ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»Π°
// Π²ΡΠ΅ΠΌ ΠΊΡΠΎΠΌΠ΅ Π²Π»Π°Π΄Π΅Π»ΡΡΠ°, ΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°ΡΡ "0600".
// ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π»ΠΎΠ³ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌ, ΡΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ
// ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "0644".
// Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ),
// ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΌΡΠ΅ "ΡΡΡΠΎΠ³ΠΈΠ΅" ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° 0600
// (ΡΠΌ. ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ FileModeOnError).
FileMode string `json:"file-mode"`
// Π€ΠΎΡΠΌΠ°Ρ ΠΆΡΡΠ½Π°Π»Π° ("json", "logfmt", "tinted", "default").
// ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΡΠΌΠ°Ρ "tinted" (!).
// ΠΠΌΠ΅ΡΡΠΎ "json" Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ "prod".
// ΠΠΌΠ΅ΡΡΠΎ "logfmt" Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ "slog" ΠΈ "text".
// ΠΠΌΠ΅ΡΡΠΎ "tinted" Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ "tint" ΠΈ "human".
// ΠΠΌΠ΅ΡΡΠΎ "default" Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ "std".
// ΠΠ»Ρ ΡΠΎΡΠΌΠ°ΡΠ° JSON ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ slog.JSONHandler.
// ΠΠ»Ρ ΡΠΎΡΠΌΠ°ΡΠ° Logfmt - slog.TextHandler.
// ΠΠ»Ρ Tinted - ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ TintHandler.
// ΠΠ»Ρ Default - slog.defaultHandler "ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ Go".
// Π€ΠΎΡΠΌΠ°ΡΡ JSON ΠΈ Logfmt - ΡΡΠΎ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΡ Π΄Π»Ρ ΠΆΡΡΠ½Π°Π»ΠΎΠ².
// Π€ΠΎΡΠΌΠ°Ρ Tinted - ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΡΠ΅Π½Π΄ΠΎΠ²ΠΎΠΉ ΠΎΡΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ
// Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ (Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΡΠΌΠ°Ρ ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ,
// Π²ΠΊΠ»ΡΡΠΈΡΡ ANSI/Escape ΠΏΠΎΠ΄ΠΊΡΠ°ΡΠΊΡ).
// Π€ΠΎΡΠΌΠ°Ρ Default ΡΠΎΡ
ΡΠ°Π½Π΅Π½ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ,
// ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ log/slog Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ Π½Π°ΡΡΡΠΎΠ΅ΠΊ.
// Π Π΅Π³ΠΈΡΡΡ ΡΡΡΠΎΠΊΠΈ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Format string `json:"format"`
// ΠΠΎΠ±Π°Π²Π»ΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΡΡ Π·Π°ΠΏΠΈΡΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π³ΠΎΡΡΡΠΈΠ½Ρ Ρ ΠΊΠ»ΡΡΠΎΠΌ "goroutine"
GoId bool `json:"go-id"`
// ΠΠ±ΠΎΠ³Π°Π΄ΠΈΡΡ ΠΆΡΡΠ½Π°Π» ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ UUID ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΡ Π·Π°ΠΏΠΈΡΡ.
// Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ UUIDv7
// ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Ρ ΠΊΠ»ΡΡΠΎΠΌ "logId". Π UUID ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ΅ ΠΌΠ»Π°Π΄ΡΠΈΠ΅ Π±ΠΈΡΡ ΠΌΠΎΠ³ΡΡ
// Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°Π½Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΠΎΠΉ.
IdOn bool `json:"id-on"`
// ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΆΡΡΠ½Π°Π» ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ.
// ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΌΠ»Π°Π΄ΡΠΈΠ΅ Π±ΠΈΡΡ UUID ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈΠ»ΠΈ
// Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΆΡΡΠ½Π°Π» Ρ ΠΊΠ»ΡΡΠΎΠΌ "logSum".
SumOn bool `json:"sum-on"`
// ΠΡΡΠΈΡΠ»ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ ΠΏΠΎ ΠΠ‘ΠΠ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ.
// ΠΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ
// Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ.
SumFull bool `json:"sum-full"`
// ΠΡΡΠΈΡΠ»ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
// ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅.
// ΠΠ°Π½Π½Π°Ρ ΠΎΠΏΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΡΠ΅ΡΠΈ ΠΈΠ»ΠΈ
// ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΠΆΡΡΠ½Π°Π»Π΅.
SumChain bool `json:"sum-chain"`
// ΠΠ΅ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ (ΠΠ‘) Π² ΠΌΠ»Π°Π΄ΡΠΈΠ΅ Π±ΠΈΡΡ UUID
// ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π·Π°ΠΏΠΈΡΠΈ (ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ).
// ΠΡΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΠΠ‘ Π² UUID Π΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ
// ΠΌΠΎΠ½ΠΎΡΠΎΠ½Π½ΠΎΡΡΠΈ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΎΡ Π·Π°ΠΏΠΈΡΠΈ ΠΊ Π·Π°ΠΏΠΈΡΠΈ.
// Π‘ Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠ΅ΠΉ ΠΠ‘ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΠΆΡΡΠ½Π°Π» ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ Ρ
// ΠΊΠ»ΡΡΠΎΠΌ "logSum" Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅.
SumAlone bool `json:"sum-alone"`
// ΠΡΠΈΠ·Π½Π°ΠΊ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (timestamp) Π² ΠΆΡΡΠ½Π°Π».
// Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΌΠ΅ΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ
// ΠΏΡΠΈ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΠΆΡΡΠ½Π°Π»Π΅ systemd/journald ΠΊ Π½ΠΈΠΌ ΠΌΠ΅ΡΠΊΠ°
// Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ.
TimeOff bool `json:"time-off"`
// ΠΡΠΈΠ·Π½Π°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² ΠΌΠ΅ΡΠΊΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
// (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ UTC)
TimeLocal bool `json:"time-local"`
// ΠΡΠΈΠ·Π½Π°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ.
// ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΌΠ΅ΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΎΠ² Tinted/JSON/Logfmt
// ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ. ΠΠ»Ρ ΡΠΎΡΠΌΠ°ΡΠ° Default Π΄ΠΎΠ»ΠΈ ΡΠ΅ΠΊΡΠ½Π΄
// Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. ΠΠ°Π½Π½Π°Ρ ΠΎΠΏΡΠΈΡ "ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π°" Π΅ΡΠ΅ ΠΎΡ legacy
// Π»ΠΎΠ³Π³Π΅ΡΠ° ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° "log".
TimeMicro bool `json:"time-micro"`
// Π€ΠΎΡΠΌΠ°Ρ ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ TintHandler'Π° (Π΅ΡΠ»ΠΈ Format="tinted").
// ΠΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° "Kitchen", "DateTime", "space" ΠΈ Π΄ΡΡΠ³ΠΈΠ΅,
// ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠ° Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Go-Π½ΠΎΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΠΈΠ΄Π°
// "2006-01-02_15.04.05.999".
// ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. ΡΡΠ½ΠΊΡΠΈΡ TimeFormat(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
// Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
// Π Π΅Π³ΠΈΡΡΡ ΡΡΡΠΎΠΊΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
TimeFormat string `json:"time-format"`
// ΠΡΠΈΠ·Π½Π°ΠΊ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΠΆΡΡΠ½Π°Π» ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π½Π° ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡ
// Π² ΠΌΠ΅ΡΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΡΠ°ΠΉΠ»:Π½ΠΎΠΌΠ΅Ρ_ΡΡΡΠΎΠΊΠΈ).
//
// ΠΠΠΠΠΠΠΠ: Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π¦Π£ΠΠ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅ Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
// Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΠΠ―ΠΠΠ’ΠΠΠ¬ΠΠ Π·Π°Π΄Π°Π½ΠΎ ΠΊΠ°ΠΊ true Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΠΎΠ³Π°ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ
// Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΆΡΡΠ½Π°Π»Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ° (ΠΏΠΎΠ»Π΅ id, ΡΠΌ. Π½ΠΈΠΆΠ΅ SrcFields).
Src bool `json:"src"`
// ΠΡΠΈΠ·Π½Π°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊ ΠΈΠΌΠ΅Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π° Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° (ΠΏΠ°ΠΊΠ΅ΡΠ°)
// (ΠΏΠ°ΠΊΠ΅Ρ/ΡΠ°ΠΉΠ»:Π½ΠΎΠΌΠ΅Ρ_ΡΡΡΠΎΠΊΠΈ)
SrcPkg bool `json:"src-pkg"`
// ΠΡΠΈΠ·Π½Π°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΠΆΡΡΠ½Π°Π» ΠΈΠΌΠ΅Π½ ΡΡΠ½ΠΊΡΠΈΠΉ (ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²) ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΊΠΎΡΠΎΡΡΡ
// ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
// (ΠΏΠ°ΠΊΠ΅Ρ/ΡΠ°ΠΉΠ»:ΡΡΠ½ΠΊΡΠΈΡ():Π½ΠΎΠΌΠ΅Ρ_ΡΡΡΠΎΠΊΠΈ)
SrcFunc bool `json:"src-func"`
// ΠΡΠΈΠ·Π½Π°ΠΊ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ".go" Π² ΠΈΠΌΠ΅Π½Π°Ρ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΡΠ΅ΠΊΡΡΠΎΠ².
// ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΏΡΠ°Π·Π΄Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ.
SrcExt bool `json:"src-ext"`
// ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠ΅ Π² Π±Π»ΠΎΠΊ "source".
// ΠΠ±ΡΡΠ½ΠΎ Π±Π»ΠΎΠΊ source ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ»Ρ file, function, line
// (ΡΠΌ. ΡΠΈΠΏ slog.Source), Π½ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ
// Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ.
// ΠΡΠΈΠΌΠ΅Ρ: id="superService", ver="1.2.3", instanceId=1234.
//
// ΠΠΠΠΠΠΠΠ: Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π¦Π£ΠΠ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ
// id (ΡΡΡΠΎΠΊΠ°), ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ
// ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅/ΡΠ΅ΡΠ²ΠΈΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
Π²ΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ
// ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ°.
SrcFields *Fields `json:"src-fields"`
// ΠΡΠΈΠ·Π½Π°ΠΊ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ "ΠΏΠΎΠ΄ΠΊΡΠ°ΡΠΊΠΈ" ΠΆΡΡΠ½Π°Π»ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ANSI/Escape
// ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ, Π΅ΡΠ»ΠΈ Format="tinted"
ColorOff bool `json:"color-off"`
// ΠΡΠΈΠ·Π½Π°ΠΊ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° Π² ΠΆΡΡΠ½Π°Π» ΠΌΠ΅ΡΠΊΠΈ ΡΡΠΎΠ²Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
// (ΡΠΈΠΏΠ° level="INFO"). ΠΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ
// "ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ" Π»ΠΎΠ³Π³Π΅ΡΠ° Π±Π΅Π· ΡΡΠΎΠ²Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
LevelOff bool `json:"level-off"`
// ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ legacy Π»ΠΎΠ³Π³Π΅ΡΠ° (log.Print())
Prefix string `json:"prefix"`
// ΠΠ»ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡΠΌ Π² ΠΆΡΡΠ½Π°Π»Π΅
AddKey string `json:"add-key"`
// ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡΠΌ Π² ΠΆΡΡΠ½Π°Π»Π΅
AddValue any `json:"add-value"`
// ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π² ΠΆΡΡΠ½Π°Π» Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΡ
ΠΎΠ΄Π½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
// Π·Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Ρ.Π½. Rate Limiter.
RateLimit RateLimitConf `json:"rateLimit"`
// ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΎΡΠ°ΡΠΈΠΈ ΠΆΡΡΠ½Π°Π»ΠΎΠ², Π΅ΡΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π² ΡΠ°ΠΉΠ»
Rotate RotateConf `json:"rotate"`
}type Fields
Fields - ΡΡΠΎ ΠΏΡΠΎΡΡΠ°Ρ ΠΎΠ±Π΅ΡΡΠΊΠ° Π΄Π»Ρ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠ°ΡΡ (key/value)
type Fields map[string]anyfunc (Fields) Args
func (fields Fields) Args() []anyArgs ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Fields Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Log, Info, Debug, With ΠΈ Ρ.ΠΏ. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ nil ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΈΠ· Π²ΡΠ²ΠΎΠ΄Π°.
func (Fields) Attrs
func (fields Fields) Attrs() []slog.AttrAttrs ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Fields Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ []slog.Attr Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° Π²ΡΡΠΎΠΊΠΎΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ slog ΠΌΠ΅ΡΠΎΠ΄Π° LogAttrs. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ nil ΠΈ ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΡΡ.
func (Fields) Fields
func (f Fields) Fields() FieldsFields ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠΎΠΏΡΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ FieldsProvider. ΠΠ°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Fields Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ FieldsProvider.
func (Fields) Value
func (fields Fields) Value() slog.ValueValue ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Fields Π² Π³ΡΡΠΏΠΏΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ slog.GroupValue()
type FieldsProvider
FieldsProvider - ΠΎΠ±ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² Π²ΠΈΠ΄Π΅ key/value
type FieldsProvider interface {
Fields() Fields
}type HandleFunc
HandlerFunc - ΡΡΠΎ ΡΠΈΠΏ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Handle() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler Π΄Π»Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΆΡΡΠ½Π°Π»Π° Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π»/ΡΠ°ΠΉΠ»
type HandleFunc func(context.Context, slog.Record) errortype IdHandler
IdHandler - ΡΡΠΎ ΠΎΠ±Π΅ΡΡΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ slog.Handler'Π° Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΠΎΠ³Π°ΡΠ΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ (goroutine, logId, logSum). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, IdHandler ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Middleware Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Handle ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler.
type IdHandler struct {
// contains filtered or unexported fields
}func NewIdHandler
func NewIdHandler(handler slog.Handler, opts *IdOptions, sum uint16, mws ...Middleware) *IdHandlerΠ‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ Id-Ρ Π΅Π½Π΄Π»Π΅Ρ ΠΎΠ±Π΅ΡΡΠΊΡ Π΄Π»Ρ slog.Handler'Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² ΠΆΡΡΠ½Π°Π» Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ "goroutine", "logId" (Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ UUID) ΠΈ "logSum" (ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ), Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Handle() Π·Π°Π΄Π°Π½ΠΎΠ³ΠΎ handler'Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠ΅ΠΏΠΎΡΠ½ΠΎΠΉ Middleware.
handler - ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠΉ slog handler
opts - ΠΎΠΏΡΠΈΠΈ Id-Ρ
Π΅Π½Π΄Π»Π΅ΡΠ° ΠΈΠ»ΠΈ nil
sum - Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ (ΠΎΠ±ΡΡΠ½ΠΎ 0)
mws - ΡΠ΅ΠΏΠΎΡΠΊΠ° Middleware Π΄Π»Ρ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° Hanlde()
func (*IdHandler) Enabled
func (h *IdHandler) Enabled(ctx context.Context, level slog.Level) boolΠΠ΅ΡΠΎΠ΄ Enabled() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ slog.Handler
func (*IdHandler) Handle
func (h *IdHandler) Handle(ctx context.Context, r slog.Record) errorΠΠ΅ΡΠΎΠ΄ Handle() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ slog.Handler
func (*IdHandler) WithAttrs
func (h *IdHandler) WithAttrs(attrs []slog.Attr) slog.HandlerΠΠ΅ΡΠΎΠ΄ WithAttrs() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ slog.Handler
func (*IdHandler) WithGroup
func (h *IdHandler) WithGroup(name string) slog.HandlerΠΠ΅ΡΠΎΠ΄ WithGroup() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ slog.Handler
type IdOptions
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ IdHandler'Π°
type IdOptions struct {
// ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΆΡΡΠ½Π°Π» ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π³ΠΎΡΡΡΠΈΠ½Ρ ("goroutine")
GoId bool `json:"goId"`
// ΠΠΎΠ±Π°Π²Π»ΡΡΡ UUID ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅ ("logId")
LogId bool `json:"logId"`
// ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄ΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ (ΠΠ‘)
AddSum bool `json:"addSum"`
// ΠΡΡΠΈΡΠ»ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ
SumFull bool `json:"sumFull"`
// ΠΠΊΠ»ΡΡΠΈΡΡ Π² ΡΠ°ΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ ΠΌΠ΅ΡΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
SumTime bool `json:"sumTime"`
// ΠΠΎΠ΄ΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ Ρ ΡΡΡΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ
SumChain bool `json:"sumChain"`
// ΠΠ΅ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ ΠΠ‘ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π°ΠΉΡ UUID, Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»ΡΡ "LogSum"
SumAlone bool `json:"sumAlone"`
}type Logger
Logger ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π»ΠΎΠ³Π³Π΅ΡΠΎΠΌ.
type Logger struct {
// Logger - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ slog-Π»ΠΎΠ³Π³Π΅Ρ.
// ΠΠΎΠΏΡΡΡΠΈΠΌΠΎ (ΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ
// ΠΏΠ°ΠΊΠ΅ΡΠ° "log/slog" ΠΏΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π»ΠΎΠ³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
,
// ΠΏΠΎΡΠΎΠΌΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π°Π½Π½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅Π»ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ (ΡΠ°Π±ΡΠΈΠΊ)
// ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΡ
ΡΡΡΡΠΊΡΡΡΡ Logger.
*slog.Logger
// Level - ΡΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
// ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅
// Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Set().
// ΠΠ΅ΡΠΎΠ΄ Level() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Level *slog.LevelVar
// Writer - ΡΡΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π»ΠΎΠ³ΠΎΠ².
// ΠΠ°Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Rotate() ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ
// ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ,
// Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΡΠΈΠ³Π½Π°Π»Ρ SIGHUP.
// ΠΠ΅ΡΠΎΠ΄ IsRotatable() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΈΠ·Π½Π°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π°.
// ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΊ ΠΆΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Write(),
// ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΡΡΠΌΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΊΠ°Π½Π°Π» ΠΈ/ΠΈΠ»ΠΈ
// Π² ΡΠ°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π°.
// ΠΠ°ΠΊΠ΅Ρ xlog ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π±ΡΠΈΠΊΡ Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² NewWriter().
Writer
}func Current
func Current() *LoggerCurrent Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ (Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ) Π»ΠΎΠ³Π³Π΅Ρ
func Default
func Default() *LoggerDefault() ΡΠΎΠ·Π΄Π°Π΅Ρ Π»ΠΎΠ³Π³Π΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΡΠΎΠ΄Π½ΠΎΠ³ΠΎ slog Π»ΠΎΠ³Π³Π΅ΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΎΠΏΡΠΈΠΉ, Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π½Π° stdout), Π½ΠΎ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
func FromSlog
func FromSlog(logger *slog.Logger) *LoggerFromSlog ΡΠΎΠ·Π΄Π°Π΅Ρ X-logger ΠΈΠ· *slog.Logger. Π£ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ "ΡΡΡΡΠΎΠ³Π°ΡΠ½ΠΎΠ³ΠΎ" Π»ΠΎΠ³Π³Π΅ΡΠ° Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ "ΡΠ°Ρ Π°ΡΠ½ΡΠ΅" ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΈΠΏΠ° Trace() ΠΈΠ»ΠΈ Noticef().
func New
func New(conf Conf, mws ...Middleware) *LoggerNew - ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ X-logger Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΆΡΡΠ½Π°Π»Π° Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» (stdout/stderr) ΠΈ/ΠΈΠ»ΠΈ Ρ Π·Π°ΠΏΠΈΡΡΡ ΠΆΡΡΠ½Π°Π»Π° Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠΎΡΠ°ΡΠΈΠΈ (ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ), Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΆΡΡΠ½Π°Π»Π° Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ (JSON/Text). Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΎΠΉ Π½Π°Π΄ NewWriter() ΠΈ NewEx().
conf - ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π»ΠΎΠ³Π³Π΅ΡΠ°
mws - ΠΎΠ±ΡΡΡΠΊΠΈ (middleware) Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Hanlde() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler
func NewEx
func NewEx(conf Conf, writer Writer, mws ...Middleware) *LoggerNewEx - ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ X-logger Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf Ρ Π²ΡΠ΄Π°ΡΠ΅ΠΉ ΠΆΡΡΠ½Π°Π»Π° ΡΠ΅ΡΠ΅Π· Π·Π°Π΄Π°Π½Π½ΡΠΉ Writer. ΠΠΎΠ»Ρ Pipe ΠΈ File ΡΡΡΡΠΊΡΡΡΡ conf ΠΏΡΠΈ ΡΡΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ, Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΆΡΡΠ½Π°Π»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΡΠΌ writer. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½Π°Ρ ΡΠ΅ΠΏΠΎΡΠΊΠ° Middleware.
conf - ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π»ΠΎΠ³Π³Π΅ΡΠ°
writer - Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π»ΠΎΠ³ΠΎΠ² (Π² Ρ.Ρ. Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ)
mws - ΠΎΠ±ΡΡΡΠΊΠΈ (middleware) Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Hanlde() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler
func NewWithWriter
func NewWithWriter(conf Conf, writer io.Writer, mws ...Middleware) *LoggerNewWithWriter - ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ X-logger Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΆΡΡΠ½Π°Π»Π° Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» (stdout/stderr) ΠΈ/ΠΈΠ»ΠΈ Ρ Π·Π°ΠΏΠΈΡΡΡ ΠΆΡΡΠ½Π°Π»Π° Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠΎΡΠ°ΡΠΈΠΈ (ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ), Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΆΡΡΠ½Π°Π»Π° Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ (JSON/Text), Π° Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ writer, ΡΠΎ Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ io.Writer. Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΎΠΉ Π½Π°Π΄ NewWriter() ΠΈ NewEx().
conf - ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π»ΠΎΠ³Π³Π΅ΡΠ°
writer - Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π»ΠΎΠ³ΠΎΠ²
mws - ΠΎΠ±ΡΡΡΠΊΠΈ (middleware) Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Hanlde() ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler
func With
func With(args ...any) *LoggerWith ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°
func WithAttrs
func WithAttrs(attrs []slog.Attr) *LoggerWithAttrs ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ c Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°
func WithFields
func WithFields(fields FieldsProvider) *LoggerWithFields ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°.
func WithGroup
func WithGroup(name string) *LoggerWithGroup ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π³ΡΡΠΏΠΏΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°
func WithMiddleware
func WithMiddleware(mws ...Middleware) *LoggerWithMiddleware ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ c Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Middleware Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³Π΅ΡΠ°
func (*Logger) Alert
func (c *Logger) Alert(msg string, args ...any)Alert Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelAlert)
func (*Logger) Alertf
func (c *Logger) Alertf(format string, args ...any)Alertf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelAlert)
func (*Logger) Crit
func (c *Logger) Crit(msg string, args ...any)Crit Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelCrit)
func (*Logger) Critf
func (c *Logger) Critf(format string, args ...any)Critf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelCrit)
func (*Logger) Debug
func (c *Logger) Debug(msg string, args ...any)Debug Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelDebug)
func (*Logger) Debugf
func (c *Logger) Debugf(format string, args ...any)Debugf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelDebug)
func (*Logger) Emerg
func (c *Logger) Emerg(msg string, args ...any)Emerg Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelEmerg)
func (*Logger) Emergf
func (c *Logger) Emergf(format string, args ...any)Emergf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelEmerg)
func (*Logger) Error
func (c *Logger) Error(msg string, args ...any)Error Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelError)
func (*Logger) Errorf
func (c *Logger) Errorf(format string, args ...any)Errorf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelError)
func (*Logger) Fatal
func (c *Logger) Fatal(msg string, args ...any)Fatal Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelFatal) ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° os.Exit(1)
func (*Logger) Fatalf
func (c *Logger) Fatalf(format string, args ...any)Fatalf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelFatal) ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° os.Exit(1)
func (*Logger) Flood
func (c *Logger) Flood(msg string, args ...any)Flood Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelFlood)
func (*Logger) Floodf
func (c *Logger) Floodf(format string, args ...any)Floodf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelFlood)
func (*Logger) GetLevel
func (c *Logger) GetLevel() slog.LevelGetLevel Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ - ΠΎΠ±ΡΡΡΠΊΠ° Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° c.Leveler.Level()
func (*Logger) GetLvl
func (c *Logger) GetLvl() stringGetLvl Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ Π²ΠΈΠ΄Π° "info", "debug" ΠΈ Ρ.ΠΏ.
func (*Logger) Info
func (c *Logger) Info(msg string, args ...any)Info Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelInfo)
func (*Logger) Infof
func (c *Logger) Infof(format string, args ...any)Infof Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelInfo)
func (*Logger) IsRotatable
func (c *Logger) IsRotatable() boolIsRotatable Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΈΠ·Π½Π°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π°
func (*Logger) Log
func (c *Logger) Log(ctx context.Context, level slog.Level, msg string, args ...any) errorLog Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ
func (*Logger) LogAttrs
func (c *Logger) LogAttrs(ctx context.Context, level slog.Level, msg string, attrs ...slog.Attr) errorLogAttr Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ
func (*Logger) Logf
func (c *Logger) Logf(level slog.Level, format string, args ...any)Log Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
func (*Logger) Notice
func (c *Logger) Notice(msg string, args ...any)Notice Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelNotice)
func (*Logger) Noticef
func (c *Logger) Noticef(format string, args ...any)Noticef Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelNotice)
func (*Logger) Panic
func (c *Logger) Panic(msg string)Fatal Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelPanic) ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° panic()
func (*Logger) Rotate
func (c *Logger) Rotate() errorRotate ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠΎΡΠ°ΡΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° (Π΅ΡΠ»ΠΈ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) - ΠΎΠ±ΡΡΡΠΊΠ° Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° c.Writer.Rotable()/c.Writer.Rotate(). Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΠ°ΡΠΈΡ Π»ΠΎΠ³ΠΎΠ² ΠΏΠΎ ΡΠΈΠ³Π½Π°Π»Ρ SIGHUP.
func (*Logger) SetDefault
func (c *Logger) SetDefault()SetDefault ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π°Π΄Π°Π½Π½ΡΠΉ Π»ΠΎΠ³Π³Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ
func (*Logger) SetDefaultLogs
func (c *Logger) SetDefaultLogs()SetDefaultLogs ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠΉ Π»ΠΎΠ³Π³Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ log/slog Π»ΠΎΠ³Π³Π΅ΡΠΎΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
func (*Logger) SetLevel
func (c *Logger) SetLevel(level slog.Level)SetLevel ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ - ΠΎΠ±ΡΡΡΠΊΠ° Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° c.Leveler.Update()
func (*Logger) SetLvl
func (c *Logger) SetLvl(level string)SetLvl ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΠΎΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠΈΠΏΠ° "trace", "error" ΠΈ Ρ.ΠΏ.
func (*Logger) Slog
func (c *Logger) Slog() *slog.LoggerSlog Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ *slog.Logger
func (*Logger) Trace
func (c *Logger) Trace(msg string, args ...any)Trace Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelTrace)
func (*Logger) Tracef
func (c *Logger) Tracef(format string, args ...any)Tracef Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelTrace)
func (*Logger) Warn
func (c *Logger) Warn(msg string, args ...any)Warn Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΆΡΡΠ½Π°Π» (LevelWarn)
func (*Logger) Warnf
func (c *Logger) Warnf(format string, args ...any)Warnf Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΆΡΡΠ½Π°Π» (LevelWarn)
func (*Logger) With
func (c *Logger) With(args ...any) *LoggerWith ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². ΠΠ΅ΡΠΎΠ΄ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΌΠ΅ΡΠΎΠ΄Ρ With Π΄Π»Ρ *slog.Logger.
func (*Logger) WithAttrs
func (c *Logger) WithAttrs(attrs []slog.Attr) *LoggerWithAttrs ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ c Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
func (*Logger) WithFields
func (c *Logger) WithFields(fields ...FieldsProvider) *LoggerWith ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
func (*Logger) WithGroup
func (c *Logger) WithGroup(name string) *LoggerWithGroup ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π³ΡΡΠΏΠΏΡ. ΠΠ΅ΡΠΎΠ΄ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΌΠ΅ΡΠΎΠ΄Ρ WithGroup Π΄Π»Ρ *slog.Logger.
func (*Logger) WithMiddleware
func (c *Logger) WithMiddleware(mws ...Middleware) *LoggerWithMiddleware ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π»ΠΎΠ³Π³Π΅Ρ c Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Middleware
type Middleware
Middleware - ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΡΠΎΠΊ Π΄Π»Ρ slog.Handler'Π² (Ρ.Π½. middleware)
type Middleware func(next HandleFunc) HandleFuncfunc NewMiddleware
func NewMiddleware(mwf MiddlewareFunc) MiddlewareNewMiddleware ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ Middleware Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°-ΠΎΠ±ΡΡΡΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ
mwf - ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΡΡΠΊΠΈ ΡΠΈΠΏΠ° MiddlewareFunc
func NewMiddlewareForError(logErr *Logger) MiddlewareΠΡΠΈΠΌΠ΅Ρ Middleware, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ (Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ "err") Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ Π»ΠΎΠ³Π³Π΅Ρ. ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠΊΠΎΡΠ΅Π΅ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Middleware, ΡΠ΅ΠΌ Π΄Π»Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
func NewMiddlewareMulti
func NewMiddlewareMulti(log *Logger) MiddlewareΠΡΠΈΠΌΠ΅Ρ Middleware, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΡΠ±Π»ΠΈΡΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π»ΠΎΠ³Π³Π΅Ρ (ΠΈΠΌΠΈΡΠ°ΡΠΈΡ ΡΠ΅ΠΆΠΈΠΌΠ° "Multi Handler")
log - Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π»ΠΎΠ³Π³Π΅Ρ Π² ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
func NewMiddlewareNoPasswd() MiddlewareΠΡΠΈΠΌΠ΅Ρ middleware, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² passwd, password Π½Π° ********. ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠΊΠΎΡΠ΅Π΅ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Middleware, ΡΠ΅ΠΌ Π΄Π»Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
func NewMiddlewareRateLimit(conf RateLimitConf) MiddlewareNewMiddlewareRateLimit Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Middleware Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ ΡΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ.Π½. RateLimiter'Π°.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΡΠΎΠ²Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (level) ΠΈ ΡΠ΅ΠΊΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (msg).
conf - ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ RateLimeter'Π°
func NewMiddlewareWithFields(fields FieldsProvider) MiddlewareΠΡΠΈΠΌΠ΅Ρ Middleware, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ (Π² Π½Π°ΡΠ°Π»ΠΎ) Π·Π°ΠΏΠΈΡΠΈ Π·Π°Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ. ΠΡΠΈΠΌΠ΅Ρ Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π³ΡΡΠΏΠΏΠ°ΠΌΠΈ - Π²ΡΠ΅ ΠΏΠΎΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΎΡΠΊΡΡΡΡΡ Π³ΡΡΠΏΠΏΡ. ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠΊΠΎΡΠ΅Π΅ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Middleware, ΡΠ΅ΠΌ Π΄Π»Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
type MiddlewareFunc
MiddlewareFunc - ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΡΡΠΊΡ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Middleware
Π€ΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ctx ΠΈ r, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π² ΡΠ΅ΠΏΠΎΡΠΊΠ΅ Middleware ΠΈΠ»ΠΈ Handle.
type MiddlewareFunc func(
ctx context.Context, r slog.Record,
next HandleFunc) errortype MiddlewareHandler
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΡΡΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Handler'ΠΎΠ² Ρ Middleware
type MiddlewareHandler struct {
// contains filtered or unexported fields
}func NewMiddlewareHandler
func NewMiddlewareHandler(handler slog.Handler, mws ...Middleware) *MiddlewareHandlerΠ‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±Π΅ΡΡΠΊΡ MiddlewareHandler'Π° Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ middleware(s)
func (*MiddlewareHandler) Enabled
func (h *MiddlewareHandler) Enabled(ctx context.Context, level slog.Level) boolEnabled() ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler
func (*MiddlewareHandler) Handle
func (h *MiddlewareHandler) Handle(ctx context.Context, r slog.Record) errorHandle() ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler
func (*MiddlewareHandler) WithAttrs
func (h *MiddlewareHandler) WithAttrs(attrs []slog.Attr) slog.HandlerWithAttrs() ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler
func (*MiddlewareHandler) WithGroup
func (h *MiddlewareHandler) WithGroup(name string) slog.HandlerWithGroup() ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° slog.Handler
type MultiWriter
MultiWriter - ΡΡΠΎ ΠΎΠ±ΡΡΡΠΊΠ° Π΄Π»Ρ io.Writer Π΄Π»Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ. ΠΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΆΡΡΠ½Π°Π»Ρ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ syslog + NATS).
type MultiWriter []io.Writerfunc NewMultiWriter
func NewMultiWriter() MultiWriterNewMultiWriter cΠΎΠ·Π΄Π°Π΅Ρ "ΠΏΡΡΡΠΎΠΉ" MutliWriter. ΠΠ°Π»Π΅Π΅ Π² MultiWriter ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ io.Writer'Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° Add.
func (MultiWriter) Add
func (mw MultiWriter) Add(w io.Writer)Add Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π·Π°Π΄Π°Π½Π½ΡΠΉ io.Writer Π² MultiWriter
func (MultiWriter) Write
func (mw MultiWriter) Write(data []byte) (int, error)Write ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ io.Writer Π΄Π»Ρ MultiWriter'Π°. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ Π΄Π°Π½Π½ΡΡ data Π²ΠΎ Π²ΡΠ΅ io.Writer'Ρ MultiWriter'Π°. ΠΡΠΈΠ±ΠΊΠΈ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ.
type Opt
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. Π’ΠΈΠΏΠΎΠ²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
opt := xlog.NewOpt() // ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π±ΠΎΡ ΠΎΠΏΡΠΈΠΉ (*xlog.Opt)
conf := xlog.Conf{} // ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ°
xlog.Env(&conf) // ΠΎΠ±ΠΎΠ³Π°ΡΠΈΡΡ conf ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
flag.Parse() // ΠΎΠ±ΠΎΠ³Π°ΡΠΈΡΡ opt ΠΈΠ· ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
opt.UpdateConf(&conf) // ΠΎΠ±ΠΎΠ³Π°ΡΠΈΡΡ conf ΠΎΠΏΡΠΈΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
log := xlog.New(conf) // ΡΠΎΠ·Π΄Π°ΡΡ Π»ΠΎΠ³Π³Π΅Ρ (*xlog.Logger)
logger := log.Logger // ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° *slog.Logger
log.Notice("ΠΡΠΈΠ²Π΅Ρ, ΠΠΎΠ³Π³Π΅Ρ", "version", "1.0.0")
mylog := logger.With("app", "helloworld")
mylog.Info("application started")
type Opt struct {
Level string // -log-level
Pipe string // -log-pipe
File string // -log-file
FileMode string // -log-file-mode
Format string // -log-format
GoId string // -log-goid
Id string // -log-id
Sum string // -log-sum
SumFull string // -log-sum-full
SumChain string // -log-sum-chain
SumAlone string // -log-sum-alone
Time string // -log-time
TimeLocal string // -log-time-local
TimeMicro string // -log-time-micro
TimeFormat string // -log-time-format
Src string // -log-src
SrcPkg string // -log-src-pkg
SrcFunc string // -log-src-func
SrcExt string // -log-src-ext
Color string // -log-color
LevelOff string // -log-level-off
RateLimit string // -log-rate-limit
RateLimitMaxNum string // -log-rate-limit-max-num
RateLimitIntervalMs string // -log-rate-limit-interval-ms
RateLimitFlushPeriodMs string // -log-rate-limit-flush-period-ms
Rotate string // -log-rotate
RotateMaxSize string // -log-rotate-max-size
RotateMaxAge string // -log-rotate-max-age
RotateMaxBackups string // -log-rotate-max-backups
RotateLocalTime string // -log-rotate-local-time
RotateCompress string // -log-rotate-compress
}func NewOpt
func NewOpt(prefixOpt ...string) *OptNewOpt ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π±ΠΎΡ ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ°. ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΏΡΠΈΠΉ Opt ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² flag.Parse() Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ. ΠΡΠ»Π΅Π²Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
prefixOpt - ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ "log-")
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΡΠ²ΠΎΠΉ usage-Π²ΡΠ²ΠΎΠ΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅ΠΊΡΡ:
-log-level <level> - log level (flood/trace/debug/info/notice/warm/error/crit)
-log-pipe <pipe> - log pipe (stdout/stderr/null)
-log-file <file> - log file path
-log-file-mode <perm> - log file mode (0640, 0600, 0644)
-log-format <format> - log format (json|prod/text|logfmt/tint|tinted|human/default|std)
-log-goid <on/off> - force on/off goroutine id for each record (goroutine)
-log-id <on/off> - force on/off id (UUID) for each record (logId)
-log-sum <on/off> - force on/off check sum for each record
-log-sum-full <on/off> - force on/off calculate full sum for earch record
-log-sum-chain <on/off> - force on/off check sum chain
-log-sum-alone <on/off> - force on/off add check sum as alone atribute (logSum)
-log-time <on/off> - force on/off timestamp
-log-time-local <on/off> - use local time (UTC by default)
-log-time-micro <on/off> - force on/off microseconds in timestamp
-log-time-format <fmt> - override tinted log time format (e.g. 15:04:05.999 or timeOnly)
-log-src <on/off> - force on/off log source file name and line number
-log-src-pkg <on/off> - force on/off log source directory/file name and line number
-log-src-func <on/off> - force on/off log function name
-log-src-ext <on/off> - force enable/disable show ".go" extension of source file name
-log-color <on/off> - force enable/disable tinted colors (ANSI/Escape)
-log-level-off <true/false> - force disable/enable level output
-log-rate-limit <on/off> - force enable/disable rate limiter
-log-rate-limit-max-num <int> - maximal number of rate limit messages
-log-rate-limit-interval-ms <ms> - rate limiter interval [ms]
-log-rate-limit-flush-period-ms <ms> - rate limiter flush period [ms]
-log-rotate <on/off> - force on/off log rotate
-log-rotate-max-size <mb> - rotate max size (begabytes)
-log-rotate-max-age <days> - rotate max age (days)
-log-rotate-max-backups <num> - rotate max backup files
-log-rotate-local-time <yes/no> - use localtime (default UTC)
-log-rotate-compress <on/off> - on/off compress (gzip)
func (*Opt) UpdateConf
func (opt *Opt) UpdateConf(conf *Conf)UpdateConf ΠΎΠ±ΠΎΠ³Π°ΡΠ°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³Π³Π΅ΡΠ° ΠΎΠΏΡΠΈΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π½Π΅ Π·Π°Π΄Π°Π½Ρ, ΡΠΎ ΠΏΠΎΠ»Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ conf Π½Π΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡΡΡ.
type RateLimitConf
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π² ΠΆΡΡΠ½Π°Π» Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΡ ΠΎΠ΄Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π·Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Ρ.Π½. Rate Limiter.
ΠΠ»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² MaxNum ΠΈ IntervalMs ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 100 ΠΈ 1000 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΡΠΎΠ²Π½Π΅ 100 ΡΡ/ΡΠ΅ΠΊ.
ΠΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (level) ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ (msg).
ΠΡΠΈ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π»ΠΈΠΌΠΈΡΠ° ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ "Π³ΡΡΠΏΠΏΠΈΡΡΡΡΡΡ" ΠΏΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π·Π°Π΄Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΎΠ±ΡΠΈΠΉ key/value ΡΠΏΠΈΡΠΎΠΊ (ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΠ΅) ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ `repeated` ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΠ΅Π΄Π΅Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
ΠΠ°Π½Π½ΡΠΉ Rate Limiter Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°Ρ Π°ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΈΠΏΠ° Infof/Errorf Π»ΠΎΠ³Π³Π΅ΡΠ°, Π΅ΡΠ»ΠΈ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΡΠΎΠΊΠ°, ΡΠΎ ΡΠ°ΠΊΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΠΌΠΈ. Π ΡΠ΅Π»ΠΎΠΌ ΡΡΠΎΡ ΡΡΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΠ°Π±ΠΎΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ Π΄Π»Ρ ΠΎΡΠΎΠ±ΠΎ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΡΠ΅ΠΊΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΡΠ°ΡΡΡ).
type RateLimitConf struct {
// ΠΠ΅Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ Rate Limiter (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½)
Disable bool `json:"disable"`
// ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΠΌ level/msg Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅
// Π·Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
// ΠΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ 100 ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
// Π§Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ Π·Π°Π΄Π°Π½ΠΎ, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ
// Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ ΠΏΡΠΈ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
MaxNum int `json:"maxNum"`
// ΠΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» (ΡΠ°Π·ΠΌΠ΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠΎΠ»ΡΠ·ΡΡΠ΅Π³ΠΎ ΠΎΠΊΠ½Π°) Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ
// ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎ MaxNum ΡΡΡΠΊ Π½Π΅ Π³ΡΡΠΏΠΏΠΈΡΡΡΡΡΡ,
// Π·Π°Π΄Π°Π΅ΡΡΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
.
// ΠΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Π·Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π² 1000 ΠΌΡ.
IntervalMs int `json:"intervalMs"`
// ΠΠ΅ΡΠΈΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ Π²ΡΠ±ΡΠΎΡΠ° Π² ΠΆΡΡΠ½Π°Π» ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ,
// Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΉ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ
// ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ Π² ΠΆΡΡΠ½Π°Π» Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ
, ΠΊΠΎΠ³Π΄Π° Π΄ΡΡΠ³ΠΈΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π΅Ρ,
// Π·Π°Π΄Π°Π΅ΡΡΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
.
//
// ΠΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Π·Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π² 5000 ΠΌΡ.
//
// ΠΡΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ
// ΠΈ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΆΡΡΠ½Π°Π» Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
// Π½ΠΎΠ²ΡΡ
Π·Π°ΠΏΠΈΡΠ΅ΠΉ (ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²ΡΠ΄Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄).
FlushPeriodMs int `json:"flushPeriodMs"`
}type RotateConf
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΎΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΆΡΡΠ½Π°Π»ΠΎΠ² (ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΎ ΠΎΡ lumberjack). Π‘ΠΌ. https://github.com/natefinch/lumberjack Π‘ΡΡΡΠΊΡΡΡΠ° Π²ΡΡΡΠΎΠ΅Π½Π° Π² ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Conf.
type RotateConf struct {
// ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΡΠ°ΡΠΈΡ Π»ΠΎΠ³ΠΎΠ².
// ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½ false) ΡΠΎΡΠ°ΡΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π°.
Enable bool `json:"enable"`
// ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° Π² ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΠ°Ρ
Π΄ΠΎ Π΅Π³ΠΎ ΡΠΎΡΠ°ΡΠΈΠΈ.
// ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½ 0) - 10 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ.
MaxSize int `json:"max-size"`
// ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠ°ΡΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΆΡΡΠ½Π°Π»Π° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ
// Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅ΡΠΊΠΈ, Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΈΡ
ΠΈΠΌΠ΅Π½ΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π΅Π½Ρ
// ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ 24 ΡΠ°ΡΡ ΠΈ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΠ½ΡΠΌ
// Π΄Π½ΡΠΌ ΠΈΠ·-Π·Π° ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° Π½Π° Π»Π΅ΡΠ½Π΅Π΅ Π²ΡΠ΅ΠΌΡ, Π²ΠΈΡΠΎΠΊΠΎΡΠ½ΡΡ
ΡΠ΅ΠΊΡΠ½Π΄ ΠΈ Ρ.Π΄.
// ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½ΠΎ 0), ΡΠΎ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΠΏΠΎΡΠ»Π΅ ΡΠΎΡΠ°ΡΠΈΠΈ
// Π½Π΅ ΡΠ΄Π°Π»ΡΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΠΎΠ·ΡΠ°ΡΡΠ°.
//
// ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 10 Π΄Π½Π΅ΠΉ.
MaxAge int `json:"max-age"`
// ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌΡΡ
ΡΡΠ°ΡΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΆΡΡΠ½Π°Π»ΠΎΠ².
// ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½ΠΎ 0), ΡΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ Π²ΡΠ΅ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ
// ΠΆΡΡΠ½Π°Π»ΠΎΠ² (Ρ
ΠΎΡΡ MaxAge Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΈΡ
ΡΠ΄Π°Π»Π΅Π½ΠΈΡ).
//
// ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π·Π°Π΄Π°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² 100.
MaxBackups int `json:"max-backups"`
// ΠΠ΅ΡΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π²ΡΠ΅ΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π΄Π»Ρ
// ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠΊ Π² ΡΠ°ΠΉΠ»Π°Ρ
ΡΠ΅Π·Π΅ΡΠ²Π½ΡΡ
ΠΊΠΎΠΏΠΈΠΉ, ΠΌΠ΅ΡΡΠ½ΡΠΌ
// Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½ΠΎ false), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
// Π²ΡΠ΅ΠΌΡ UTC.
LocalTime bool `json:"local-time"`
// Compress ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ ΡΠΆΠΈΠΌΠ°ΡΡ ΡΠΎΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»Π°
// Ρ ΠΏΠΎΠΌΠΎΡΡΡ gzip. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½ΠΎ false) ΡΠΆΠ°ΡΠΈΠ΅ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
Compress bool `json:"compress"`
}type Stringer
Π’ΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ Π΄Π°Π½Π½ΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° String() Π±Π΅Π· ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Sprint() ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ TintHandler
type Stringer interface {
String() string
}type TintHandler
Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ TintHandler, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ slog.Handler. TintHandler - ΡΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΡΠΊΠΈΠΉ slog.Handler Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΎΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² Ρ "github.com/lmittmann/tint" (https://github.com/lmittmann/tint/blob/main/handler.go\).
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
- MIT License
- ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (ΡΠΎΠ»ΡΠΊΠΎ slog)
- ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΉ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ ΡΡ ΠΎΠΆ Ρ zerolog.ConsoleWriter ΠΈ slog.TextHandler
- "ΡΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅" ΠΌΠ΅ΡΠΎΠΊ ΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
- ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ
- Π²ΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ANSII ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ
- ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° `ReplaceAtt` ΠΊΠ°ΠΊ Ρ slog.TextHandler/slog.JSONHandler
Π§ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
- ΡΠΏΡΠΎΡΠ΅Π½Π° ΠΏΠΎΠ΄ΠΊΡΠ°ΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π²ΡΠ²ΠΎΠ΄ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°/ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΏΠΎ ΠΎΠΏΡΠΈΡΠΌ: sourcePkg/source/Func)
- Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΌΠ΅ΡΠΊΡ ΡΡΠΎΠ²Π½Ρ (noLevel)
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ".go"
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² UTC
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ²ΠΎΠ΄Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡ, Π² Ρ.Ρ. ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌ (ΡΠΌ. ΡΡΠ½ΠΊΡΠΈΡ Sprint())
- Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ Π² ΠΆΡΡΠ½Π°Π»Π΅ (ΠΊΠ°ΠΊ Π² JSON)
- Π²ΡΠ΅ΠΌΡ Π² Π°ΡΡΠΈΠ±ΡΡΠ°Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ time.RFC3339Nano (Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊ t.String())
type TintHandler struct {
// contains filtered or unexported fields
}func NewTintHandler
func NewTintHandler(w io.Writer, opts *TintOptions) *TintHandlerΠ‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ Tinted Ρ Π΅Π½Π΄Π»Π΅Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ slog.Handler'Ρ
func (*TintHandler) Enabled
func (h *TintHandler) Enabled(_ context.Context, level slog.Level) boolΠΠ΅ΡΠΎΠ΄ Enabled() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ slog.Handler
func (*TintHandler) Handle
func (h *TintHandler) Handle(ctx context.Context, r slog.Record) errorΠΠ΅ΡΠΎΠ΄ Handle() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ slog.Handler
func (*TintHandler) WithAttrs
func (h *TintHandler) WithAttrs(attrs []slog.Attr) slog.HandlerΠΠ΅ΡΠΎΠ΄ WithAttrs() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ slog.Handler
func (*TintHandler) WithGroup
func (h *TintHandler) WithGroup(name string) slog.HandlerΠΠ΅ΡΠΎΠ΄ WithGroup() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ slog.Handler
type TintOptions
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ TintHandler'Π°
type TintOptions struct {
// Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
// (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ DefaultLevel=slog.LevelInfo).
// Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½ΠΈΠΆΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π² ΠΆΡΡΠ½Π°Π».
Level slog.Leveler
// ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ (ΡΠ°ΠΉΠ»:ΡΡΡΠΎΠΊΠ°)
AddSource bool
// ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠΌΡ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° (ΠΏΠ°ΠΊΠ΅Ρ/ΡΠ°ΠΉΠ»:ΡΡΡΠΎΠΊΠ°)
SourcePkg bool
// ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΉ/ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
SourceFunc bool
// Π£Π΄Π°Π»ΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ".go" ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°
NoExt bool
// ΠΡΠΊΠ»ΡΡΠΈΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΌΠ΅ΡΠΊΠΈ ΡΡΠΎΠ²Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
NoLevel bool
// ΠΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΡ ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ Π²ΡΠ²ΠΎΠ΄ ANSI/Escape ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
NoColor bool
// ΠΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΌΠ΅ΡΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² UTC
TimeUTC bool
// Π€ΠΎΡΠΌΠ°Ρ ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
TimeFormat string
// Π€ΡΠ½ΠΊΡΠΈΡ "Ρ
ΡΠΊ" Π΄Π»Ρ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
// Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΠΆΡΡΠ½Π°Π»Π΅.
// Π‘ΠΌ. https://pkg.go.dev/log/slog#HandlerOptions for details.
ReplaceAttr func(groups []string, attr slog.Attr) slog.Attr
}type Writer
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π»ΠΎΠ³ΠΎΠ² (Ρ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π±Π΅Π·, Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΆΡΡΠ½Π°Π»Π° Π½Π° stdout/stderr ΠΈΠ»ΠΈ Π±Π΅Π·, Ρ Π²ΡΠ΄Π°ΡΠ΅ΠΉ Π² ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ io.Writer ΠΈΠ»ΠΈ Π±Π΅Π·).
type Writer interface {
IsRotatable() bool // ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΡΠ°ΡΠΈΠΈ
Rotate() error // Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎΡΠ°ΡΠΈΡ ΠΆΡΡΠ½Π°Π»Π° (Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°)
Close() error // Π·Π°ΠΊΡΡΡΡ ΡΠ°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π°
io.Writer // ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Wite([]byte) (int, error)
}func NewWriter
func NewWriter(pipeName, fileName, mode string, rotate *RotateConf, writer io.Writer) WriterNewWriter ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π»ΠΎΠ³ΠΎΠ² Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Writer Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
pipeName - ΠΈΠΌΡ ΠΊΠ°Π½Π°Π»Π° ("stdout", 'stderr", "nil" ΠΈΠ»ΠΈ ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°)
fileName - ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° ΠΈΠ»ΠΈ ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°
mode - ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ "0644" ΠΈΠ»ΠΈ "0660")
rotate - ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΎΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° ΠΈΠ»ΠΈ nil
writer - ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ io.Writer ΠΈΠ»ΠΈ nil
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ Writer ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ Π»ΠΎΠ³ΠΎΠ² ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (ΠΎΡ Π½ΡΠ»Ρ Π΄ΠΎ ΡΡΠ΅Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ). ΠΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ:
- ΠΠ°Π½Π°Π» (pipe): stdout ΠΈΠ»ΠΈ stderr
- Π€Π°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π° (file) Ρ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π±Π΅Π·
- ΠΠ°ΡΡΠΎΠΌΠ½ΡΠΉ io.Writer
ΠΠ°Π½Π½Π°Ρ ΡΠ°Π±ΡΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 12 ΡΠΈΠΏΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Writer: ΠΎΡ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π² "/dev/null" Π΄ΠΎ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π² ΡΡΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
Generated by gomarkdoc