logger

package module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 22, 2022 License: MIT Imports: 7 Imported by: 0

README

GoLogger.

Процесс логирования имеет несколько уровней:

  • DEBUG - фиксируются события с уровнями: DEBUG, INFO, WARNING, ERROR, CRITICAL;
  • INFO - фиксируются события с уровнями: INFO, WARNING, ERROR, CRITICAL;
  • WARNING - фиксируются события с уровнями: WARNING, ERROR, CRITICAL;
  • ERROR - фиксируются события с уровнями: ERROR и CRITICAL;
  • CRITICAL - фиксируются события с уровнем CRITICAL.

Настройка уровня логирования:

  • В файле конфигурации yml поле Logger.LOG_LEVEL
  • Параметр выставляется в соответствии с необходимым уровнем логирования: DEBUG, INFO, WARNING, ERROR, CRITICAL.

Описание уровней сообщений о событиях, попадающих в лог файлы:

  • DEBUG - подробное и детальное логирование всей системной информации для последующего использования в отладке;
  • INFO - подтверждение, информация о событиях, не приводящих к ошибкам в работе модулей;
  • WARNING - информация о событиях, которые могут привести к ошибкам в работе модулей;
  • ERROR - информация об ошибках, возникших в работе модулей;
  • CRITICAL - информация о критических ошибках, возникших в работе модулей.

Метод создания лога:

EXEMPALE 1 (Пробрасование логера для дальшейшего вывода трассировки логирования):
  • Создание логера на корневом уровне (handler): logger := logger.logger.NewLogger(UserID, "NameService")
UserID - Индификатор пользователя тип (int) если требуется фиксировать кто вызвал данный обработчик.
NameService - Имя сервиса например Back-logger
  • Инициализируем родительское событие (Backgraund EventStruct): bEventStruct := logger.InitBackgroundEventStruct("NamePackage", "NameFunction")
NamePackage - имя пакета.
NameFunction - имя функции.
  • Создаем события нужного типа от родительского: EventStruct:= bEventStruct.Error(logger.Code, params1, params2)
logger.Code - логер содержит коды (либо дает возможность дать код определеному событию. Каждый код события соответсвует текстовому сообщению.
params - это параметры для сообщения события. Пример: Ошибка подключения к БД %v. - params1 подставиться вместо %v.
  • (Опционально) Добавление оригинальной ошибки и http статуса: EventStruct.AddError(err, http.Status)
err - оригинальная ошибка.
http.Status - это статус который будет установлен в ответе на http запрос REST API.
  • (Опционально) Добавление контекста события: EventStruct.AddContext(map[string]interface{}{"url": url, "password": b64})
    В функцию передается хэш-таблица с типом map[string]interface{}.
  • Логирование логера: logger.WriteToStdOut() - выводит loger в stdout в json формате.
loger.SendToLogService() - данный метод требуется описать самостоятельно (TODO)

Documentation

Index

Constants

View Source
const (
	Code_NoCode                              = 0
	Code_ErrorStarting__NameService__Service = 1 // Ошибка запуска %s сервиса.
	Code_ErrorInitializingConfiguration      = 2 // Ошибка инициализации конфигурации.
	Code_ErrorInitializingRepository         = 3 // Ошибка инициализации репозитория.

	Code_ErrorConnectingToDatabase__NameDB__          = 20 // Ошибка подключения к БД %s.
	Code_ConnectionToDataBase__NameDB__IsNotSupported = 21 // Подключение к БД %s не поддерживается.

	Code_ErrorSendingGETrequest      = 1001 // Ошибка отправки GET запроса.
	Code_ErrorSendingPOSTrequest     = 1002 // Ошибка отправки POST запроса.
	Code_ErrorSendingPUTrequest      = 1003 // Ошибка отправки PUT запроса.
	Code_ErrorSendingPATCHrequest    = 1004 // Ошибка отправки PATCH запроса.
	Code_ErrorSendingDELETErequest   = 1005 // Ошибка отправки DELETE запроса.
	Code_ErrorSendingCOPYrequest     = 1006 // Ошибка отправки COPY запроса.
	Code_ErrorSendingHEADrequest     = 1007 // Ошибка отправки HEAD запроса.
	Code_ErrorSendingOPTIONSrequest  = 1008 // Ошибка отправки OPTIONS запроса.
	Code_ErrorSendingLINKrequest     = 1009 // Ошибка отправки LINK запроса.
	Code_ErrorSendingUNLINKrequest   = 1010 // Ошибка отправки UNLINK запроса.
	Code_ErrorSendingPURGErequest    = 1011 // Ошибка отправки PURGE запроса.
	Code_ErrorSendingLOCKrequest     = 1012 // Ошибка отправки LOCK запроса.
	Code_ErrorSendingUNLOCKrequest   = 1013 // Ошибка отправки UNLOCK запроса.
	Code_ErrorSendingPROPFINDrequest = 1014 // Ошибка отправки PROPFIND запроса.
	Code_ErrorSendingVIEWrequest     = 1015 // Ошибка отправки VIEW запроса.

	Code_ProxyError = 1020 // Ошибка проксирования.

	Code_JsonEncodingError       = 1050 // Ошибка кодирования в JSON.
	Code_ErrorDecodingJson       = 1051 // Ошибка декодирования JSON.
	Code_ErrorReadingRequestBody = 1052 // Ошибка чтения тела запроса.

	Code_ErrorUpgradingHTTPconnectionToWebSocket    = 1054 // Ошибка обновления соединения HTTP до Web-Socket.
	Code_ErrorReadingMessageFromWebSocketConnection = 1055 // Ошибка чтения сообщения из Web-Socket соединения.
	Code_WebSocketConnectionNotFound                = 1056 // Web-Socket соединение не найдено.
	Code_ErrorClosingWebSocketConnection            = 1057 // Ошибка закрытия Web-Socket соединения.

	Code_ErrorCreatingDirectory = 1078 // Ошибка создания каталога.
	Code_FileDeletionError      = 1079 // Ошибка удаления файла.
	Code_ErrorOpeningFile       = 1080 // Ошибка открытия файла.
	Code_ProjectNotFound        = 1081 // Проект не найден.
	Code_ErrorGettingLaunchPath = 1082 // Ошибка получения пути запуска.
	Code_ErrorTransferringFile  = 1083 // Ошибка при передаче файла.

	Code_InvalidRefreshToken                    = 1097 // Некорректный Refresh токен.
	Code_InvalidAccessToken                     = 1098 // Некорректный Access токен.
	Code_EmptyRefreshToken                      = 1099 // Пустой Refresh токен.
	Code_EmptyAccessToken                       = 1100 // Пустой Access токен.
	Code_TheProjectIdParameterIsEmpty           = 1101 // Параметр projectId пуст.
	Code_TheUserIdParameterIsEmpty              = 1102 // Параметр userId пуст.
	Code_TheUserIdHeaderIsEmpty                 = 1103 // Заголовок userId пуст.
	Code_TheServiceKeyParameterIsEmpty          = 1104 // Параметр serviceKey пуст.
	Code_ProjectItemsAreEmpty                   = 1105 // Элементы проекта пусты.
	Code_TheSchemaHasAnUnsupportedElementType   = 1106 // В схеме есть неподдерживаемый тип элемента.
	Code_AtTheInputPortTheOutputInformation     = 1107 // У входного порта информация выходного.
	Code_TheLinkRefersToANonExistentElement     = 1108 // Связь обращается к несуществующему элементу.
	Code_TheLinkAccessesANonExistentElementPort = 1109 // Связь обращается к несуществующему порту элемента.
	Code_AnInputPortHasAnOutputElement          = 1110 // У входного порта есть выходной элемент.
	Code_AnUnsupportedLibraryTypeWasSpecified   = 1111 // Указан неподдерживаемый тип библиотеки.
	Code_UnknownSolverType                      = 1112 // Неизвестный тип решателя.

	Code_TheSelectorChannelIsClosed = 1150 // Канал Селектора закрыт.
	Code_TheTrendChannelIsClosed    = 1151 // Канал трендов закрыт.

	Code_TheProjectIdParameterIsInvalid  = 1201 // Параметр projectId невалиден.
	Code_TheUserIdParameterIsInvalid     = 1202 // Параметр userId невалиден.
	Code_TheUserIdHeaderIsInvalid        = 1203 // Заголовок userId невалиден.
	Code_TheServiceKeyParameterIsInvalid = 1203 // Параметр serviceKey невалиден.

	Code_ErrorConvertingStringToInt           = 1210 // Ошибка конвертации string в int.
	Code_ErrorParsingAddressToRedirectRequest = 1211 // Ошибка парсинга адресса для перенаправления запроса.

	Code_ErrorWritingToDatabase = 3001 // Ошибка записи в БД.

	Code_SuccessfulConfigurationInitialization       = 5001 // Успешная инициализация конфигурации.
	Code_SuccessfulRepositoryInitialization          = 5002 // Успешная инициализации репозитория.
	Code_SuccessfulRoutingInitialization             = 5003 // Успешная инициализации роутинга.
	Code_SuccessfulConnectionToTheDatabase__NameDB__ = 5004 // Успешное подключение к БД %v.
	Code_SuccessfulWriteToTheDataBase                = 5005 // Успешная запись в БД.
	Code_SuccessfulLaunchOfTheProjectForCalculation  = 5006 // Успешный запуск проекта на расчет.
	Code_SuccessfulLaunchOfTheSelector               = 5007 // Успешный запуск Селектора.
	Code_SuccessfulLaunchOfTrends                    = 5008 // Успешный запуск Трендов.
	Code_SuccessfulClosingOfTheSelectorChannel       = 5009 // Успешное закрытие канала Селектора.
	Code_SuccessfulClosingOfTheTrendChannel          = 5010 // Успешное закрытие канала Трендов.
	Code_SuccessfulSettingOfTrendParameters          = 5011 // Успешная установка параметров трендов.
	Code_SuccessfullySettingANewValueToTheParameter  = 5012 // Успешная установка нового значения параметру.
	Code_SuccessfulDecodingOfTheRequest              = 5013 // Успешное декодирование запроса.
	Code_SuccessfullySettingANewVariableValue        = 5014 // Успешная установка нового значения переменной.

	Code_SuccessfulShutdownOfTheProject = 5050 // Успешная остановка проекта.

	Code_SuccessfulCreationOfTheNoNameFile = 5100 // Успешное создание NoName файла.
	Code_SuccessfulFileTransfer            = 5101 // Успешная передача файлов.

	Code_StartingAWebSocketConnection = 8001 // Старт подключения Web-Socket соединения.

)

Variables

View Source
var MapCodes = map[int]string{

	0: "No code.",
	1: "Error starting %v service.",
	2: "Configuration initialization error.",
	3: "Error initializing repository.",

	20: "Error connecting to database %v.",
	21: "Connection to database %v is not supported.",

	1000: "Reserve",
	1001: "Error sending GET request.",
	1002: "Error sending POST request.",
	1003: "Error sending PUT request.",
	1004: "Error sending PATCH request.",
	1005: "Error sending DELETE request.",
	1006: "Error sending COPY request.",
	1007: "Error sending HEAD request.",
	1008: "Error sending OPTIONS request.",
	1009: "Error sending LINK request.",
	1010: "Error sending UNLINK request.",
	1011: "Error sending PURGE request.",
	1012: "Error sending LOCK request.",
	1013: "Error sending UNLOCK request.",
	1014: "Error sending PROPFIND request.",
	1015: "Error sending VIEW request.",

	1020: "Proxy error.",

	1050: "JSON encoding error.",
	1051: "Error decoding JSON.",
	1052: "Error reading request body.",

	1054: "Error upgrading HTTP connection to Web-Socket.",
	1055: "Error reading message from Web-Socket connection.",
	1056: "Web-Socket connection not found.",
	1057: "Error closing Web-Socket connection.",

	1078: "Error creating directory.",
	1079: "File deletion error.",
	1080: "Error opening file.",
	1081: "Project not found.",
	1082: "Error getting launch path",
	1083: "Error transferring file.",

	1097: "",
	1099: "Empty Refresh token.",
	1100: "Empty Access token.",
	1101: "The projectId parameter is empty.",
	1102: "The userId parameter is empty.",
	1103: "The userId header is empty.",
	1104: "The serviceKey parameter is empty.",
	1105: "Project items are empty.",
	1106: "The schema has an unsupported element type.",
	1107: "At the input port, the output information",
	1108: "The link refers to a non-existent element.",
	1109: "The link accesses a non-existent element port.",
	1110: "An input port has an output element.",
	1111: "An unsupported library type was specified.",
	1112: "Unknown solver type.",

	1150: "The Selector channel is closed.",
	1151: "The Trend Channel is closed.",

	1201: "The projectId parameter is invalid",
	1202: "The userId parameter is invalid",
	1203: "The userId header is invalid",
	1204: "The serviceKey parameter is invalid",

	1210: "Error converting string to int.",
	1211: "Error parsing address to redirect request.",

	3000: "Reserve",
	3001: "Error writing to database.",

	4000: "Reserve",

	5000: "Reserve",
	5001: "Successful configuration initialization.",
	5002: "Successful repository initialization.",
	5003: "Successful routing initialization.",
	5004: "Successful connection to the database %v.",
	5005: "Successful write to the database.",
	5006: "Successful launch of the project for calculation.",
	5007: "Successful launch of the Selector.",
	5008: "Successful launch of Trends.",
	5009: "Successful closing of the Selector channel.",
	5010: "Successful closing of the Trend channel.",
	5011: "Successful setting of trend parameters.",
	5012: "Successfully setting a new value to the parameter.",
	5013: "Successful decoding of the request.",
	5014: "Successfully setting a new variable value.",

	5050: "Successful shutdown of the project.",

	5100: "Successful creation of the NoName file.",
	5101: "Successful file transfer.",

	8001: "Starting a Web-Socket connection.",
}

Соотношение кода к сообщению.

Functions

This section is empty.

Types

type BackgroundEvent

type BackgroundEvent interface {
	Critical(codeMessage int, paramsMessage ...string) Event
	Error(codeMessage int, paramsMessage ...string) Event
	Warning(codeMessage int, paramsMessage ...string) Event
	Info(codeMessage int, paramsMessage ...string) Event
	Debug(codeMessage int, paramsMessage ...string) Event
}

type BackgroundEventStruct

type BackgroundEventStruct struct {
	Logger   *LoggerStruct
	Package  string // Название пакета.
	Function string // Название функции.
}

Структура события.

func (*BackgroundEventStruct) Critical

func (b *BackgroundEventStruct) Critical(codeMessage int, paramsMessage ...string) Event

func (*BackgroundEventStruct) Debug

func (b *BackgroundEventStruct) Debug(codeMessage int, paramsMessage ...string) Event

func (*BackgroundEventStruct) Error

func (b *BackgroundEventStruct) Error(codeMessage int, paramsMessage ...string) Event

func (*BackgroundEventStruct) Info

func (b *BackgroundEventStruct) Info(codeMessage int, paramsMessage ...string) Event

func (*BackgroundEventStruct) Warning

func (b *BackgroundEventStruct) Warning(codeMessage int, paramsMessage ...string) Event

type Event

type Event interface {
	// Добавление информацию об оригинальной ошибке и http статусе.
	AddError(err error, httpStatus int) Event
	// Добавление контекста.
	AddContext(context map[string]interface{}) Event
	// Получение оригинальной ошибки в формате string.
	Error() string
	// Получение события в формате Json.
	ToJson() ([]byte, error)
	// Отправка события в сервис логирования, при неудаче - запись в StdOut.
	// Дублирование событий тип WARNING, ERROR, CRITICAL в StdOut.
	WriteToDataBase() error
	// Вывод EventStruct в StdOut в формате Json.
	WriteToStdOut()
}

type EventStruct

type EventStruct struct {
	LogServiceAPI string                 `json:"logServiceAPI,omitempty"` // API сервиса логирования.
	UserId        int                    `json:"userId"`                  // ID пользователя.
	CreatedAt     string                 `json:"createdAt"`               // Дата создания.
	Level         string                 `json:"level"`                   // Уровень.
	Service       string                 `json:"service"`                 // Название сервсиса.
	Package       string                 `json:"package"`                 // Название пакета.
	Function      string                 `json:"function"`                // Название функции.
	Code          int                    `json:"code"`                    // Код события.
	Message       string                 `json:"message"`                 // Сообщение.
	ParamsMessage []string               `json:"paramsMessage,omitempty"` // Параметры для сообщения.
	Context       map[string]interface{} `json:"context,omitempty"`       // Контекст (дополнительный данные).
	OriginalError string                 `json:"originalError,omitempty"` // Оригинальная ошибка от стороних пакетов.
	StatusHTTP    int                    `json:"statusHTTP,omitempty"`    // Код HTTP ответа. (200, 400, 404, 500...)
}

Данные события

func (*EventStruct) AddContext

func (e *EventStruct) AddContext(context map[string]interface{}) Event

Добавление контекста.

func (*EventStruct) AddError

func (e *EventStruct) AddError(err error, httpStatus int) Event

Добавление информацию об оригинальной ошибке и http статусе.

func (*EventStruct) Error

func (e *EventStruct) Error() string

Получение оригинальной ошибки в формате string.

func (*EventStruct) ToJson

func (e *EventStruct) ToJson() ([]byte, error)

Получение события в формате Json.

func (*EventStruct) WriteToDataBase

func (e *EventStruct) WriteToDataBase() error

Отправка события в сервис логирования, при неудаче - запись в StdOut. Дублирование событий тип WARNING, ERROR, CRITICAL в StdOut.

func (*EventStruct) WriteToStdOut

func (e *EventStruct) WriteToStdOut()

Вывод EventStruct в StdOut в формате Json.

type FrontError

type FrontError struct {
	Code    int         `json:"code"`             // Код ошибки.
	Message string      `json:"message"`          // Сообщение ошибки.
	Params  []string    `json:"params,omitempty"` // Параметры сообщения.
	Field   interface{} `json:"field,omitempty"`  // Поле(ключ) Json в котором произошла ошибка.
}

Структура ошибки в формате для Фронтенд.

type Level

type Level int8
const (
	DebugLevel Level = iota + 1
	InfoLevel
	WarningLevel
	ErrorLevel
	CriticalLevel
)

type Logger

type Logger interface {
	// Добавление API сервиса логирования.
	AddLogServiceAPI(urlAPI string) Logger
	// Добавление UserID в logger.
	AddUserId(userId int) Logger
	// Добавление имени сервиса в logger.
	AddServiceName(serviceName string) Logger
	// Инициализация BackgroundEventStruct. (Родитель событий).
	InitBackgroundEventStruct(packet, function string) (BackgroundEvent, error)
	// Отправка в сервис логирования.
	SendToLogService() error
	// Вывод logger в StdOut в формате Json.
	WriteToStdOut()
	// Получение logger с трасировкой событий в формате Json.
	ToJson() ([]byte, error)
	// Форматирование logger в формат приемлемый для фронтенда.
	ToFrontendJson() ([]byte, error)
	// Получение HTTP статуса logger (статус крайнего события).
	GetStatusHTTP() int
}

func NewLogger

func NewLogger(userId int, serviceName, loglevel, logServiceAPI string) Logger

Инициализация logger.

type LoggerStruct

type LoggerStruct struct {
	LogLevel      Level          `json:"logLevel,omitempty"`      // Уровень логирования.
	LogServiceAPI string         `json:"logServiceAPI,omitempty"` // API сервиса логирования.
	UserId        int            `json:"-"`                       // ID пользователя.
	Service       string         `json:"-"`                       // Название сервсиса.
	Events        []*EventStruct `json:"events,omitempty"`        // Массив событий.
}

Структура логера.

func (*LoggerStruct) AddLogServiceAPI

func (l *LoggerStruct) AddLogServiceAPI(urlAPI string) Logger

Добавление API сервиса логирования.

func (*LoggerStruct) AddServiceName

func (l *LoggerStruct) AddServiceName(serviceName string) Logger

Добавление имени сервиса в logger.

func (*LoggerStruct) AddUserId

func (l *LoggerStruct) AddUserId(userId int) Logger

Добавление UserID в logger.

func (*LoggerStruct) GetStatusHTTP

func (l *LoggerStruct) GetStatusHTTP() int

Получение HTTP статуса logger (статус крайнего события).

func (*LoggerStruct) InitBackgroundEventStruct

func (l *LoggerStruct) InitBackgroundEventStruct(packet, function string) (BackgroundEvent, error)

Инициализация BackgroundEventStruct. (Родитель событий).

func (*LoggerStruct) SendToLogService

func (l *LoggerStruct) SendToLogService() error

Отправка в сервис логирования.

func (*LoggerStruct) ToFrontendJson

func (l *LoggerStruct) ToFrontendJson() ([]byte, error)

Форматирование событий в формат приемлемый для фронтенда.

func (*LoggerStruct) ToJson

func (l *LoggerStruct) ToJson() ([]byte, error)

Получение logger с трасировкой событий в формате Json.

func (*LoggerStruct) WriteToStdOut

func (l *LoggerStruct) WriteToStdOut()

Вывод logger в StdOut в формате Json.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL