Documentation
¶
Index ¶
- Constants
- Variables
- func BaseLogMarshal(buf *[]byte, depth int, now time.Time, level, message string) error
- func FormatColored(buf *[]byte, color, message string)
- func FormatFileLine(buf *[]byte, depth int, isShort bool)
- func FormatFuncLine(buf *[]byte, depth int)
- func FormatSlice(buf *[]byte, messages []string)
- func FormatTime(buf *[]byte, now time.Time, flags int)
- func FormatTrace(buf *[]byte, ctx context.Context, traceId any)
- func GetCaller(skip int) (runtime.Frame, bool)
- func GetCallers(skip int) *runtime.Frames
- func LookupEnv(name string, defVal interface{}) interface{}
- func MapLogMarshal(buf *[]byte, depth int, now time.Time, level, message string, args ...any) ([]byte, error)
- func ToInt(val interface{}) int
- func ToString(val interface{}) string
- type BaseLogger
- func (baselog *BaseLogger) Debug(msg string, args ...any)
- func (baselog *BaseLogger) Error(msg string, args ...any)
- func (baselog *BaseLogger) Fatal(msg string, args ...any)
- func (baselog *BaseLogger) FormatString(buf *[]byte, depth int, now time.Time, level, message string)
- func (baselog *BaseLogger) GetLevel() int
- func (baselog *BaseLogger) Info(msg string, args ...any)
- func (baselog *BaseLogger) Init(cfg *LogConfig, retErr *error, args ...any) *BaseLogger
- func (baselog *BaseLogger) OutMessage(content *[]byte) error
- func (baselog *BaseLogger) Outlog(depth int, now time.Time, level, message string)
- func (baselog *BaseLogger) Panic(msg string, args ...any)
- func (baselog *BaseLogger) Warn(msg string, args ...any)
- type Errors
- type JsonMessage
- type Levelable
- type LogConfig
- type LogJsonHandler
- type Loggable
Constants ¶
const ( // EnvLoggerJson -- отдавать строкой или в JSON? EnvLoggerJson = "LOG_JSON" DefLoggerJson = "json" DefLoggerText = "txt" // EnvLoggerFlags -- формат вывода сообщений "работать молча" EnvLoggerFlags = "LOG_FLAGS" DefLoggerFlags = -1 // EnvLoggerLevel -- уровень вывода сообщений логгером: EnvLoggerLevel = "LOG_LEVEL" DefLoggerLevel = "info" // EnvTraceId -- идентификатор сквозной трассировки, если не типовой EnvTraceId = "LOG_TRACE_ID" DefTraceId = CtxTraceId )
const ( LogDefault = 0 LogShortFile = 1 << iota LogLongFile LogFuncName LogUTC LogDate LogTime LogMicroSeconds LogLevelColored LogWithTrace LogPrefix )
const ( LogNoneLevel = 0 LogPanicLevel = iota * 10 LogFatalLevel LogErrorLevel LogWarnLevel LogInfoLevel LogDebugLevel LogPanicPrefix = "PANIC" LogFatalPrefix = "FATAL" LogErrorPrefix = "ERROR" LogWarnPrefix = "WARN " LogInfoPrefix = "INFO " LogDebugPrefix = "DEBUG" // LogFatalExitCode -- число, отдаваемое ОС при завершении программы из ...Fatal() вызовов. LogFatalExitCode = 500 // CtxTraceId -- упрощенная версия идентификатора значений сквозного лога CtxTraceId = "trace_id" // BaseDefFlags местный стандарт формата вывода: BaseDefFlags = LogUTC | LogMicroSeconds | LogShortFile // BaselogJsonHandlerId порядковый номер доп. параметра конструкторам логгеров - внешний преобразователь в json // можно задать конструктору свой, если не задан применит BaseLogMarshal() BaselogJsonHandlerId = 0 // CtxlogDefersId Номер в параметрах конструктору для предопределенного набора []func() -- завершателей контекстов CtxlogDefersId = 1 )
const ( EscStart = "\x1b[" EscColorEnd = "m" EscReset = "0" // Reset / Normal выключение всех атрибутов EscBold = "1" // Жирный или увеличить яркость EscDark = "2" // Блёклый (уменьшить яркость) Не везде поддерживается EscCoursive = "3" // Курсив: вкл. Не везде поддерживается. Иногда обрабатывается как инверсия. EscUnderLine = "4" // Подчёркнутый: один раз EscBlinkSlow = "5" // Мигание: Медленно менее 150 раз в минуту EscBlinkFast = "6" // Мигание: Часто MS-DOS ANSI.SYS; 150+ в минуту; не везде поддерживается EscInverse = "7" // Отображение: Негатив инвертирует или обращает; меняет цвета фона и текста EscHide = "8" // Скрытый Не везде поддерживается. EscDeprecate = "9" // Зачёркнутый Символы разборчивы, но помечены как удалённые. Не везде поддерживается. EscNormalFont = "10" // Основной (по умолчанию) шрифт EscFacture = "20" // Фрактура вряд ли поддерживается EscNoBold = "21" // Жирный: выкл. или Подчёркивание: Двойное жирный не всегда поддерживается; двойное подчёркивание вряд ли поддерживается. EscNormalLight = "22" // Обычный цвет или яркость Ни жирный ни блеклый EscNoCursive = "23" // Не курсивный, не фрактура EscNoUnderLine = "24" // Подчёркивание: Нет Подчёркивание ни одиночное ни двойное EscNoBlink = "25" // Мигание: выкл. EscNoIverse = "27" // Отображение: обычное не негатив EscNoHide = "28" // Отображающийся выключить скрытие EscNoDeprecate = "29" // Не зачёркнутый Esc256Sym = "38;5" // Зарезервировано для дополнительных цветов 5;n где n {\displaystyle n} n индекс цвета (0..255) EscRGBSym = "38;2" // или 2;r;g;b где r , g , b {\displaystyle r,g,b} {\displaystyle r,g,b} — красный, зелёный и синий каналы цвета (в пределах 255) EscDefSym = "39" // Цвет текста по умолчанию (на переднем плане) зависит от реализации (в соответствии со стандартом) Esc256Back = "48;5" // Зарезервировано для установки расширенного цвета фона 5;n где n {\displaystyle n} n индекс цвета (0..255) EscRGBBack = "48;2" // или 2;r;g;b где r , g , b {\displaystyle r,g,b} {\displaystyle r,g,b} — красный, зелёный и синий каналы цвета (в пределах 255) EscDefBack = "49" // Цвет фона по умолчанию зависит от реализации (в соответствии со стандартом) EscBorder1 = "51" // Обрамлённый EscBorder2 = "52" // Окружённый EscUpperLine = "53" // Надчёркнутый EscNoBorder = "54" // Не обрамлённый и не окружённый EscNoUpperLine = "55" // Не надчёркнутый EscBlackCurrent = "\x1b[10;30m" // черным по текущему (черный == hide!) EscRedCurrent = "\x1b[10;31m" // темнокрасный .. EscGreenCurrent = "\x1b[10;32m" // темнозеленый по текущему EscYellowCurrent = "\x1b[10;33m" // коричневый(?) по текущему EscBlueCurrent = "\x1b[10;34m" // синим по текущему EscMagentaCurrent = "\x1b[10;35m" // фиолетовым по текущему EscCyanCurrent = "\x1b[10;36m" // сианом по текущему EscLightGrayCurrent = "\x1b[10;37m" // светосерым по текущему EscWhiteCurrent = "\x1b[1;37m" // белым(ярким, жирным) по текущему )
Variables ¶
var GlDefColors = map[string]string{ LogPanicPrefix: EscStart + EscBlinkFast + EscColorEnd + EscStart + EscBold + ";" + EscRedCurrent + EscColorEnd, LogFatalPrefix: EscStart + EscBlinkSlow + EscColorEnd + EscStart + EscBold + ";" + EscRedCurrent + EscColorEnd, LogErrorPrefix: EscStart + EscBold + ";" + EscRedCurrent + EscColorEnd, LogWarnPrefix: EscStart + EscNormalFont + ";" + EscMagentaCurrent + EscColorEnd, LogInfoPrefix: EscStart + EscNormalFont + ";" + EscGreenCurrent + EscColorEnd, LogDebugPrefix: EscStart + EscCoursive + ";" + EscBlueCurrent + EscColorEnd, }
GlDefColors -- дефолтная таблица цветов для вывода сообщения
Functions ¶
func BaseLogMarshal ¶
BaseLogMarshal -- местный маршаллер в JSON лога с типовыми параметрами
func FormatColored ¶
FormatColored -- раскраска строки заданным цветом с последующей отменой
func FormatFileLine ¶
FormatFileLine -- добавляет в буфер информацию о файле и номере строки
func FormatFuncLine ¶
FormatFuncLine -- добавляет в буфер название функции(метода) и номер строки файла
func FormatSlice ¶
FormatSlice -- добавление в строку лога заданного списка текстовок
func FormatTime ¶
FormatTime -- добавляет в заданный буфер время в текущем формате лога
func FormatTrace ¶
FormatTrace -- достает из контекста значение по заданному иденту и добавляет его в лог
func GetCallers ¶
GetCallers -- отдает стек вызвавших логирование контекстов
func LookupEnv ¶
func LookupEnv(name string, defVal interface{}) interface{}
LookupEnv @return -- значение переменной окружения или дефолтное (пофиг: нет или с ошибкой)
func MapLogMarshal ¶
func MapLogMarshal(buf *[]byte, depth int, now time.Time, level, message string, args ...any) ([]byte, error)
MapLogMarshal -- местный маршаллер в JSON лога с типовыми параметрами
Types ¶
type BaseLogger ¶
type BaseLogger struct { Mu sync.Mutex // куда выводить сообщения (nil - в никуда) Out io.Writer // Level -- наибольший разрешенный уровень вывода сообщений Level int // Flags -- Что выводить в лог Flags int // ToJson -- маршаллер сообщений в json, если задан. Иначе - строка ToJson LogJsonHandler }
BaseLogger -- местная реализация базового интерфейса. По мотивам пакета log с упрощениями и добавлением типовых потребностей для полноценного логирования: 1. Управление уровнем вывода и возможность вывода "в никуда". 2. Внутренний вызов fmt.Sprintf() для вставки в лог параметров на лету 3. Возможность вывода в формате json 4. Реентерабельность и возможность применения одного логера в нескольких горутинах. Внутри структуры ничего лишнего нет. 5. Закрытие файла вывода при логировании Fatal() и Panic() блокировка мьютексом только непосредственно вывода сообщения в поток(файл) Все поля структуры публичны, для полноценного внедрения по мере потребности программиста в развитии пакета.
func (*BaseLogger) Debug ¶
func (baselog *BaseLogger) Debug(msg string, args ...any)
func (*BaseLogger) Error ¶
func (baselog *BaseLogger) Error(msg string, args ...any)
func (*BaseLogger) Fatal ¶
func (baselog *BaseLogger) Fatal(msg string, args ...any)
func (*BaseLogger) FormatString ¶
func (baselog *BaseLogger) FormatString(buf *[]byte, depth int, now time.Time, level, message string)
FormatString -- строчный режим вывода. Форматирует строку в заданном буфере порядок элементов в строке фиксирован: Level:{ yyyy-mm-dd hh:mm:ss.msec}{ file_name#line) | func_name#line }message\n {} -- опционально, если они есть. Склеиваются перед сообщением "как есть", разделять самостоятельно!
func (*BaseLogger) GetLevel ¶
func (baselog *BaseLogger) GetLevel() int
func (*BaseLogger) Info ¶
func (baselog *BaseLogger) Info(msg string, args ...any)
func (*BaseLogger) Init ¶
func (baselog *BaseLogger) Init(cfg *LogConfig, retErr *error, args ...any) *BaseLogger
Init -- настройка логгера из структуры настроек @see ./config, возвращает себя (this) param Args -- доп. параметры конфигуратора (если надо!): тут можно задать маршаллер в json Ошибка открытия файла лога возвращается в параметре, исключительно для улучшения работы escape алгоритма.
func (*BaseLogger) OutMessage ¶
func (baselog *BaseLogger) OutMessage(content *[]byte) error
OutMessage -- вывод сообщения в поток логирования(файл) или в никуда
func (*BaseLogger) Outlog ¶
func (baselog *BaseLogger) Outlog(depth int, now time.Time, level, message string)
Outlog -- собственно форматилка лога и его вывод куда сказано. Ориентировочно: level=6 символов, date=11, time=9, micro=4, long/short file=32/16, message <120> итого ~182символа Аллоцируем тут, для обеспечения реентерабельности в горутинах.
func (*BaseLogger) Panic ¶
func (baselog *BaseLogger) Panic(msg string, args ...any)
func (*BaseLogger) Warn ¶
func (baselog *BaseLogger) Warn(msg string, args ...any)
type Errors ¶
type Errors []error
func GetErrorList ¶
func GetErrorList() Errors
GetErrorList -- получение списка ошибок за пределами пакета
type JsonMessage ¶
type JsonMessage struct { Level string `json:"Level"` DateTime string `json:"date_time"` FuncName string `json:"func_name"` FileName string `json:"file_name"` LineNum int `json:"line_num"` Message string `json:"message"` }
JsonMessage -- структура сообщения для маршалирования лога
type Levelable ¶
type Levelable interface { Debug(msg string, args ...any) Info(msg string, args ...any) Warn(msg string, args ...any) Error(msg string, args ...any) Fatal(msg string, args ...any) Panic(msg string, args ...any) }
Levelable -- тот, кто умеет выводить разные сообщения с уровнем не ниже указанного
type LogConfig ¶
type LogConfig struct { // "" по умолчанию в stderr, иначе полный путь к файлу лога или "stdout"|"devnul" Out string // IsJson формировать лог в JSON (true) или строками (false)? IsJson bool // Flags флаги отображения. ==0 вывод только сообщения через Sprintf Flags int // Level std: 60 - debug, 50 - info, 40 - warn, 30 - error, 20 - fatal, 10 - panic, <10 не выводим ничего. // позволяет в обертках применить расширение уровней на свое усмотрение.. Level int // TraceId идент сквозной трассировки. Может приходить в контексте для CtxLogger TraceId string }
LogConfig -- настройки для инициализации логгеров. Одна структура на все типы. Если чего-то у логгера нет, то можно проигнорировать данный параметр тут.
type LogJsonHandler ¶
LogJsonHandler -- обработчик преобразования сообщения в json м.б. внешним
type Loggable ¶
type Loggable interface { // GetLevel -- получить наименьший разрешенный уровень сообщений GetLevel() int // Outlog -- вывести сообщение с заданной глубины вызовов, от времени, с таким уровнем, текстом и аргументами Outlog(depth int, now time.Time, level, message string) }
Loggable -- Тот, кто умеет выводить сообщения разного уровня в логгер: