1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/rookie-ninja-rk-query

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

rk-query

построение codecov Go Report Card ![Лицензия](https://img.shields.io/badge/License-Apache%202. Yöntem)

Человеко-читаемый логгер запросов с использованием zap, lumberjack и rk-logger

Содержание сгенерировано с помощью DocToc

Установка

go get github.com/rookie-ninja/rk-query

Быстрое начало работы

Для записи логов Zap-логгер должен быть передан запросу.

Пожалуйста, обратитесь к https://github.com/rookie-ninja/rk-logger для простого запуска Zap-логгера.

Консольное кодирование

Это человеко-дружественный тип кодирования логов запросов.Пример:

var (
    bytes = []byte(`{
     "level": "info",
     "encoding": "console",
     "outputPaths": ["stdout"],
     "errorOutputPaths": ["stderr"],
     "initialFields": {},
     "encoderConfig": {
       "messageKey": "msg",
       "levelKey": "",
       "nameKey": "",
       "timeKey": "",
       "callerKey": "",
       "stacktraceKey": "",
       "callstackKey": "",
       "errorKey": "",
       "timeEncoder": "iso8601",
       "fileKey": "",
       "levelEncoder": "capital",
       "durationEncoder": "second",
       "callerEncoder": "full",
       "nameEncoder": "full"
     },
    "maxsize": 1024,
    "maxage": 7,
    "maxbackups": 3,
    "localtime": true,
    "compress": true
   }`)
)
``````md
Функция с событием в консольном кодировании:

```go
func withEventConsoleEncoding() {
	logger, _, _ := rklogger.NewZapLoggerWithBytes(bytes, rk_logger.JSON)

	fac := rkquery.NewEventFactory(
		rkquery.WithAppName("appName"),
		rkquery.WithEncoding(rkquery.CONSOLE),
		rkquery.WithOperation("op"),
		rkquery.WithLogger(logger))
	event := fac.CreateEvent()

	event.SetStartTime(time.Now())
	event.StartTimer("t1")
	time.Sleep(1 * time.Second)
	event.EndTimer("t1")
	event.AddPair("key", "value")
	event.SetCounter("count", 1)
	event.AddFields(zap.String("f1", "f2"), zap.Time("t2", time.Now()))
	event.AddErr(MyError{})
	event.SetEndTime(time.Now())
	event.WriteLog()
}

Выходные данные:

--------------------------------------------------------------------------------
endTime=2021-06-13T01:16:27.58556+08:00
startTime=2021-06-13T01:16:26.581691+08:00
elapsedNano=1003868481
часовой пояс=CST
ids={"eventId":"581812ae-924a-44b2-83f8-fa8eef071393"}
приложение={"appName":"appName","appVersion":"v0.0.1","entryName":"entry-example","entryType":"example"}
окружение={"arch":"amd64","hostname":"lark.local","realm":"*","region":"*","az":"*","domain":"*","os":"darwin"}
параметры={"f1":"f2","t2":"2021-06-13T01:16:27.58554+08:00"}
ошибка={"my error":1}
счетчики={"count":1}
пары={"key":"value"}
тайминг={"t1.count":1,"t1.elapsedMs":1004}
удалённый адрес=localhost
операция=op
код ответа=200
статус события=Закончено
EOE

Перевод непереведенных частей:

часовой пояс=CST
приложение={"appName":"appName","appVersion":"v0.0.1","entryName":"entry-example","entryType":"example"}
окружение={"arch":"amd64","hostname":"lark.local","realm":"*","region":"*","az":"*","domain":"*","os":"darwin"}
параметры={"f1":"f2","t2":"2021-06-13T01:16:27.58554+08:00"}
ошибка={"my error":1}
счетчики={"count":1}
пары={"key":"value"}
тайминг={"t1.count":1,"t1.elapsedMs":1004}
удалённый адрес=localhost
операция=op
код ответа=200
статус события=Закончено
EOE

Полностью переведенный текст:

Функция с событием в консольном кодировании:

```go
func withEventConsoleEncoding() {
	logger, _, _ := rklogger.NewZapLoggerWithBytes(bytes, rk_logger.JSON)

	fac := rkquery.NewEventFactory(
		rkquery.WithAppName("appName"),
		rkquery.WithEncoding(rkquery.CONSOLE),
		rkquery.WithOperation("op"),
		rkquery.WithLogger(logger))
	event := fac.CreateEvent()

	event.SetStartTime(time.Now())
	event.StartTimer("t1")
	time.Sleep(1 * time.Second)
	event.EndTimer("t1")
	event.AddPair("key", "value")
	event.SetCounter("count", 1)
	event.AddFields(zap.String("f1", "f2"), zap.Time("t2", time.Now()))
	event.AddErr(MyError{})
	event.SetEndTime(time.Now())
	event.WriteLog()
}

Выходные данные:

--------------------------------------------------------------------------------
endTime=2021-06-13T01:16:27.58556+08:00
startTime=2021-06-13T01:16:26.581691+08:00
elapsedNano=1003868481
часовой пояс=CST
ids={"eventId":"581812ae-924a-44b2-83f8-fa8eef071393"}
приложение={"appName":"appName","appVersion":"v0.0.1","entryName":"entry-example","entryType":"example"}
окружение={"arch":"amd64","hostname":"lark.local","realm":"*","region":"*","az":"*","domain":"*","os":"darwin"}
параметры={"f1":"f2","t2":"2021-06-13T01:16:27.58554+08:00"}
ошибка={"my error":1}
счетчики={"count":1}
пары={"key":"value"}
тайминг={"t1.count":1,"t1.elapsedMs":1004}
удалённый адрес=localhost
операция=op
код ответа=200
статус события=Закончен
EOE
Это тип вывода запроса лога, удобный для парсинга.

Пример:
```go
var (
    bytes = []byte(`{
     "level": "info",
     "encoding": "console",
     "outputPaths": ["stdout"],
     "errorOutputPaths": ["stderr"],
     "initialFields": {},
     "encoderConfig": {
       "messageKey": "msg",
       "levelKey": "",
       "nameKey": "",
       "timeKey": "",
       "callerKey": "",
       "stacktraceKey": "",
       "callstackKey": "",
       "errorKey": "",
       "timeEncoder": "iso8601",
       "fileKey": "",
       "levelEncoder": "capital",
       "durationEncoder": "second",
       "callerEncoder": "full",
       "nameEncoder": "full"
     },
    "maxsize": 1024,
    "maxage": 7,
    "maxbackups": 3,
    "localtime": true,
    "compress": true
   }`)
)

func withEventJSONEncoding() {
	logger, _, _ := rklogger.NewZapLoggerWithBytes(bytes, rk_logger.JSON)

	fac := rkquery.NewEventFactory(
		rkquery.WithAppName("appName"),
		rkquery.WithEncoding(rkquery.JSON),
		rkquery.WithOperation("op"),
		rkquery.WithLogger(logger))
	event := fac.CreateEvent()

Уровень события

Описание уровня события

Уровнем события в логах может быть info, debug, warn или error. В данном примере используется уровень info.

Пример использования:

event.SetStartTime(time.Now())
event.StartTimer("t1")
time.Sleep(1 * time.Second)
event.EndTimer("t1")
event.AddPair("key", "value")
event.SetCounter("count", 1)
event.AddFields(zap.String("f1", "f2"), zap.Time("t2", time.Now()))
event.AddErr(MyError{})
event.SetEndTime(time.Now())
event.WriteLog()
}

Выходной формат JSON

Для удобства представлена отформатированная версия JSON, однако реальные логи могут иметь другой вид.```json { "endTime": "2021-06-13T00:24:21.261+0800", "startTime": "2021-06-13T00:24:20.257+0800", "elapsedNano": 1004326112, "timezone": "CST", "ids": { "eventId": "72a59682-230f-4ba2-a9fc-e99a031e4d8c", "requestId": "", "traceId": "" }, "app": { "appName": "appName", "appVersion": "неизвестная", "entryName": "неизвестная", "entryType": "неизвестная" }, "env": { "arch": "amd64", "hostname": "lark.local", "realm": "", "region": "", "az": "", "domain": "", "os": "darwin" }, "payloads": { "f1": "f2", "t2": "2021-06-13T00:24:21.261768+08:00" }, "error": { "моя ошибка": 1 }, "counters": { "количество": 1 }, "pairs": { "ключ": "значение" }, "timing": { "t1.count": 1, "t1.elapsed_ms": 1004 }, "remoteAddr": "localhost", "operation": "оп", "eventStatus": "Закончен", "resCode": "200" }


Этот формат будет пропускать большую часть значений и оставлять только наиболее важные.

Пример:
```go
	var (
		bytes = []byte(`{
			"level": "info",
			"encoding": "console",
			"outputPaths": ["stdout"],
			"errorOutputPaths": ["stderr"],
			"initialFields": {},
			"encoderConfig": {
				"messageKey": "msg",
				"levelKey": "",
				"nameKey": "",
				"timeKey": "",
				"callerKey": "",
				"stacktraceKey": "",
				"callstackKey": "",
				"errorKey": "",
				"timeEncoder": "iso8601",
				"fileKey": "",
				"levelEncoder": "capital",
				"durationEncoder": "second",
				"callerEncoder": "full",
				"nameEncoder": "full"
			},
			"maxsize": 1024,
			"maxage": 7,
			"maxbackups": 3,
			"localtime": true,
			"compress": true
		}`)
	)

	func configurationConsoleLogging() {
		logger, _, _ := rklogger.NewZapLoggerWithBytes(bytes, rk_logger.JSON)
	}
```go
	fac := rkquery.NewEventFactory(
		rkquery.WithAppName("appName"),
		rkquery.WithEncoding(rkquery.FLATTEN),
		rkquery.WithOperation("оп"),
		rkquery.WithLogger(logger))
	event := fac.CreateEvent()

	event.SetStartTime(time.Now())
	event.StartTimer("t1")
	time.Sleep(1 * time.Second)
	event.EndTimer("t1")
	event.AddPair("ключ", "значение")
	event.SetCounter("счетчик", 1)
	event.AddFields(zap.String("f1", "f2"), zap.Time("t2", time.Now()))
	event.AddErr(MyError{})
	event.SetEndTime(time.Now())
	event.WriteLog()
}
```

Выходные данные
```
2022-03-04T02:29:53.478+0800    [200]    1002ms    оп    пример-ввода    пример    localhost    [f76ab5d3-e765-46ce-8c6f-8ad16e77f3b4]
```


## Статус разработки: Устойчивый

## Вклад
Мы приветствуем и поддерживаем активное, здоровое сообщество вкладчиков — включая вас!
Детали указаны в [руководстве по вкладу](CONTRIBUTING.md) и [коде поведения](CODE_OF_CONDUCT.md).
Поддерживатели rk следят за проблемами и запросами на слияние, но вы также можете отчитаться о любом негативном поведении на lark@rkdev.info.Размещено под лицензией [Apache 2.0](LICENSE).

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Human readable query logger. See https://rkdev.info/docs/ for details. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/rookie-ninja-rk-query.git
git@api.gitlife.ru:oschina-mirror/rookie-ninja-rk-query.git
oschina-mirror
rookie-ninja-rk-query
rookie-ninja-rk-query
master