loggun 0.3.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +0 -2
- data/CHANGELOG.md +49 -0
- data/README.md +191 -71
- data/lib/loggun/config.rb +29 -1
- data/lib/loggun/formatter.rb +55 -16
- data/lib/loggun/helpers.rb +7 -2
- data/lib/loggun/modifiers/sidekiq.rb +13 -0
- data/lib/loggun/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bdbf0283432b32fe9fe682ca29e432480e1bae6cc4ff31879b50a26120b10c9
|
4
|
+
data.tar.gz: bce5fe0878cba0d1e758289baa9b2227bfc81a1946443c2b7bfc8ee4580a3267
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8f76f5a5d5244f20d6b3cf5ed1f2c41ef87f93f50ac107626bc6f45cc2a3b44629d6b3d45af61bbd79e424f99ce99f1070937bb97c6e35906c8ea6d2609efd8
|
7
|
+
data.tar.gz: 923f02afe9583bbb919671fbeb6fb54e8553efd1a01a6102d2eed865158a21c30c1effdd9e46f836488541b622ac8ae7e5c6ca9bfaa89e43752de40f0827aef3
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## 0.6.0 - 2020-09-22
|
4
|
+
* features
|
5
|
+
* Sidekiq client middlware for logging enqueued jobs
|
6
|
+
|
7
|
+
## 0.5.1 - 2020-09-22
|
8
|
+
* fix
|
9
|
+
* `message` string only in `log_format == :json`
|
10
|
+
|
11
|
+
## 0.5.0 - 2020-09-22
|
12
|
+
* features
|
13
|
+
* `config.log_format` - for control full log rows format
|
14
|
+
* `config.exclude_keys`, `config.include_keys` - for include or exclude keys from `:json` log_format
|
15
|
+
|
16
|
+
## 0.4.1 - 2020-07-28
|
17
|
+
* fixes
|
18
|
+
* fill type with class name for empty `log_entity_name`
|
19
|
+
|
20
|
+
## 0.4.0 - 2020-06-02
|
21
|
+
* fixes
|
22
|
+
* fix key_value join character to space
|
23
|
+
* fix dummy dependency alerts
|
24
|
+
* features
|
25
|
+
* add new const MESSAGE_FORMATS and test for checking the value of message_format
|
26
|
+
* add check message_format
|
27
|
+
* boolean flag replace with a whitelist and create method for generating a message
|
28
|
+
* added ability to log messages format k=v
|
29
|
+
|
30
|
+
## 0.3.1 - 2020-04-21
|
31
|
+
* fixes
|
32
|
+
* fix error "modify frozen String" for class name in helpers
|
33
|
+
|
34
|
+
## 0.3.0 - 2020-04-17
|
35
|
+
* fixes
|
36
|
+
* make public #generate_log_transaction_id in helper
|
37
|
+
* removed incoming http modifier
|
38
|
+
|
39
|
+
## 0.2.0 - 2020-04-13
|
40
|
+
* fixes
|
41
|
+
* fix Readme with active_record modifier
|
42
|
+
* fix except option for helper #log_options
|
43
|
+
* refactor helpers #log_type
|
44
|
+
* fix helper define log_methods caller
|
45
|
+
* improve stability of helpers
|
46
|
+
* features
|
47
|
+
* remove legacy agent from default log pattern
|
48
|
+
* new active record modifier
|
49
|
+
* improve sidekiq modifier for difference versions
|
data/README.md
CHANGED
@@ -1,34 +1,52 @@
|
|
1
1
|
# Loggun
|
2
2
|
|
3
|
-
[](https://funbox.ru)
|
4
|
-
|
5
3
|
[](https://badge.fury.io/rb/loggun)
|
6
4
|
[](https://travis-ci.org/funbox/loggun)
|
7
5
|
|
8
|
-
|
9
|
-
|
6
|
+
Приводит логи приложения к единому формату.
|
7
|
+
|
8
|
+
## Содержание
|
9
|
+
|
10
|
+
- [Установка](#установка)
|
11
|
+
- [Использование](#использование)
|
12
|
+
- [Конфигурация](#конфигурация)
|
13
|
+
- [Настройки](#настройки)
|
14
|
+
- [Модификаторы](#модификаторы)
|
15
|
+
- [Rails модификатор](#rails-модификатор)
|
16
|
+
- [Active Record модификатор](#active-record-модификатор)
|
17
|
+
- [Sidekiq модификатор](#sidekiq-модификатор)
|
18
|
+
- [Clockwork модификатор](#clockwork-модификатор)
|
19
|
+
- [Модификатор исходящих HTTP-запросов](#модификатор-исходящих-http-запросов)
|
20
|
+
- [Модификатор входящих запросов в Rails](#модификатор-входящих-запросов-в-rails)
|
21
|
+
- [Пользовательские модификаторы](#пользовательские-модификаторы)
|
22
|
+
- [Хелперы](#хелперы)
|
10
23
|
|
11
24
|
## Установка
|
12
25
|
|
13
|
-
Чтобы установить гем, добавьте в
|
26
|
+
Чтобы установить гем, добавьте его в Gemfile:
|
14
27
|
|
15
28
|
```ruby
|
16
29
|
gem 'loggun'
|
17
30
|
```
|
18
31
|
|
19
|
-
И выполните
|
32
|
+
И выполните команду:
|
20
33
|
|
21
|
-
|
34
|
+
```bash
|
35
|
+
$ bundle
|
36
|
+
```
|
22
37
|
|
23
38
|
## Использование
|
24
|
-
|
25
|
-
|
39
|
+
|
40
|
+
Loggun можно использовать как обертку для вашего `logger`. Для этого необходимо передать
|
41
|
+
ему инстанс логгера и настроить его `formatter`:
|
42
|
+
|
26
43
|
```ruby
|
27
44
|
Loggun.logger = Rails.logger
|
28
45
|
Loggun.logger.formatter = Loggun::Formatter.new
|
29
46
|
```
|
30
47
|
|
31
|
-
Теперь
|
48
|
+
Теперь можно использовать Loggun для логирования в стандартизированном формате:
|
49
|
+
|
32
50
|
```ruby
|
33
51
|
Loggun.info('http_request.api.request', user_id: current_user.id)
|
34
52
|
#=> 2020-04-11T22:35:04.225+03:00 - 170715 INFO http_request.api.request - {"user_id": 5465}
|
@@ -37,18 +55,16 @@ Loggun.info('http_request.api.response', user_id: current_user.id, success: true
|
|
37
55
|
#=> 2020-04-11T22:35:04.225+03:00 - 170715 INFO http_request.api.response - {"user_id": 5465, "success": true}
|
38
56
|
```
|
39
57
|
|
40
|
-
|
58
|
+
## Конфигурация
|
41
59
|
|
42
|
-
|
43
|
-
Для успешной конфигурации гема необходимо подгружать файл при инициализации вашего приложения.
|
44
|
-
|
45
|
-
`config/initializers/loggun.rb`
|
60
|
+
Конфигурацию гема необходимо производить при инициализации приложения. Например, так:
|
46
61
|
|
47
62
|
```ruby
|
48
63
|
Loggun::Config.configure do |config|
|
49
64
|
config.precision = :milliseconds
|
50
65
|
config.pattern = '%{time} - %{pid} %{severity} %{type} %{tags_text} %{message}'
|
51
66
|
config.parent_transaction_to_message = false
|
67
|
+
config.message_format = :json
|
52
68
|
|
53
69
|
config.modifiers.rails = true
|
54
70
|
config.modifiers.sidekiq = false
|
@@ -57,35 +73,116 @@ Loggun::Config.configure do |config|
|
|
57
73
|
config.modifiers.outgoing_http = false
|
58
74
|
end
|
59
75
|
```
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
- `
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
76
|
+
|
77
|
+
### Настройки
|
78
|
+
|
79
|
+
Все настройки опциональны.
|
80
|
+
|
81
|
+
- `precision` — точность отметок времени.
|
82
|
+
|
83
|
+
Может принимать одно из следующих значений:
|
84
|
+
`sec`, `seconds`, `ms`, `millis`, `milliseconds`, `us`, `micros`, `microseconds`, `ns`, `nanos`, `nanoseconds`.
|
85
|
+
|
86
|
+
По умолчанию `milliseconds`.
|
87
|
+
|
88
|
+
- `pattern` — текстовый шаблон для формата вывода данных в лог.
|
89
|
+
|
90
|
+
Доступные ключи внутри шаблона: `time`, `pid`, `severity`, `type`, `tags_text`, `message`, `parent_transaction`.
|
91
|
+
|
92
|
+
- `parent_transaction_to_message` — если `true`, то значение `parent_transaction` будет добавлено в тело логируемого сообщения.
|
93
|
+
|
94
|
+
Ключ `parent_transaction` в шаблоне `pattern` можно использовать вне зависимости от значения этой настройки.
|
95
|
+
|
96
|
+
- `force_utc` — если `true`, то значение `time` будет переведено в UTC.
|
97
|
+
|
98
|
+
По умолчанию `false`.
|
99
|
+
|
100
|
+
- `message_format` — формат переменной `message` в шаблоне `pattern`.
|
101
|
+
|
102
|
+
Доступные значения:
|
103
|
+
|
104
|
+
- `:json` — `message` логируется как JSON-строка;
|
105
|
+
- `:key_value` — `message` логируется в формате `key1=value1 key2=value2`.
|
106
|
+
|
107
|
+
- `log_format` — формат лога.
|
108
|
+
|
109
|
+
Доступные значения:
|
110
|
+
|
111
|
+
- `:json` — лог формируется как JSON-строка игнорируя шаблон `pattern` и настройку `message_format`;
|
112
|
+
- `:plain` — лог формируется по шаблону `pattern`.
|
113
|
+
|
114
|
+
По умолчанию `:plain`.
|
115
|
+
|
116
|
+
При `log_format == :json` в `message` будет попадать только сообщение, которое было передано строкой. Сообщение,
|
117
|
+
переданное хешем попадет в поле `metadata`. Пример:
|
118
|
+
```ruby
|
119
|
+
Loggun.info("my.best.action", "message string", test: true)
|
120
|
+
# {
|
121
|
+
# "metadata":{"test":true},
|
122
|
+
# "message":"message string",
|
123
|
+
# "type":"my.best.action",
|
124
|
+
# "timestamp":"2020-09-22T14:57:22.233+03:00",
|
125
|
+
# "severity":"INFO",
|
126
|
+
# ...
|
127
|
+
# }
|
128
|
+
```
|
129
|
+
|
130
|
+
- `exclude_keys` — список ключей, которые будут исключены из лога.
|
131
|
+
|
132
|
+
Используется, если `log_format` имеет значение `:json` и список `only_keys` пуст.
|
133
|
+
|
134
|
+
- `only_keys` — список ключей, которые будут включены в JSON-строку.
|
135
|
+
|
136
|
+
Используется, если `log_format` имеет значение `:json`.
|
137
|
+
|
138
|
+
- `modifiers` — модификаторы для переопределения формата логирования указанного компонента. См. «[Модификаторы](#модификаторы)».
|
139
|
+
|
140
|
+
### Модификаторы
|
141
|
+
|
70
142
|
Каждый модифкатор может быть активирован двумя равнозначными способами:
|
143
|
+
|
71
144
|
```ruby
|
72
145
|
config.modifiers.rails = true
|
73
146
|
```
|
147
|
+
|
74
148
|
или
|
149
|
+
|
75
150
|
```ruby
|
76
151
|
config.modifiers.rails.enable = true
|
77
152
|
```
|
78
153
|
|
79
|
-
|
80
|
-
|
154
|
+
(В качестве примера активируется Rails модификатор, но может быть любой другой.)
|
155
|
+
|
156
|
+
#### Rails модификатор
|
157
|
+
|
158
|
+
`config.modifier.rails`
|
159
|
+
|
160
|
+
Модифицирует форматирование логгера Rails.
|
161
|
+
|
162
|
+
#### Active Record модификатор
|
163
|
+
|
164
|
+
`config.modifier.active_record`
|
165
|
+
|
166
|
+
Добавляет (именно добавляет, а не модифицирует) нового подписчика на SQL-события.
|
167
|
+
|
168
|
+
SQL начинает дополнительно логироваться в Loggun формате, `severity` — `info`. Например:
|
81
169
|
|
82
|
-
##### Active Record модификатор
|
83
|
-
`config.modifier.active_record` - добавляет (именно добавляет, а не модифицирует) нового подписчика на SQL события.
|
84
|
-
SQL начинает дополнительно логгироваться в Loggun формате, severity - info. Например:
|
85
170
|
```text
|
86
171
|
2020-04-12T20:08:52.913+03:00 - 487257 INFO storage.sql.query - {"sql":"SELECT 1","name":null,"duration":0.837}
|
87
172
|
```
|
88
|
-
|
173
|
+
|
174
|
+
Дополнительные настройки:
|
175
|
+
|
176
|
+
- `log_subscriber_class_name` — имя класса, реализующего логирование SQL-события.
|
177
|
+
|
178
|
+
Необходим метод `#sql`. По умолчанию: `::Loggun::Modifiers::ActiveRecord::LoggunLogSubscriber`.
|
179
|
+
|
180
|
+
- `payload_keys` — необходимые ключи в полезной нарзуке. Используется в классе по умолчанию.
|
181
|
+
|
182
|
+
Доступные ключи: `%i[sql name duration source]`.
|
183
|
+
|
184
|
+
Пример:
|
185
|
+
|
89
186
|
```ruby
|
90
187
|
Loggun::Config.configure do |config|
|
91
188
|
#...
|
@@ -95,26 +192,46 @@ Loggun::Config.configure do |config|
|
|
95
192
|
#...
|
96
193
|
end
|
97
194
|
```
|
98
|
-
- `log_subscriber_class_name` - имя класса, реализующего логирование sql события.
|
99
|
-
Необходим метод `#sql`. По-умолчанию `::Loggun::Modifiers::ActiveRecord::LoggunLogSubscriber`
|
100
195
|
|
101
|
-
|
102
|
-
ключи: ```%i[sql name duration source]```.
|
196
|
+
#### Sidekiq модификатор
|
103
197
|
|
104
|
-
|
105
|
-
`config.modifiers.sidekiq` - модифицирует форматирование логгера Sidekiq.
|
198
|
+
`config.modifiers.sidekiq`
|
106
199
|
|
107
|
-
|
108
|
-
`config.modifiers.clockwork` - модифицирует форматирование логгера Clockwork.
|
200
|
+
Модифицирует форматирование логгера Sidekiq.
|
109
201
|
|
110
|
-
|
111
|
-
`config.modifiers.outgoing_http` - добавляет логирование исходящих http запросов.
|
112
|
-
На данный момент поддерживаются только запросы посредством гема `HTTP`.
|
202
|
+
#### Clockwork модификатор
|
113
203
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
204
|
+
`config.modifiers.clockwork`
|
205
|
+
|
206
|
+
Модифицирует форматирование логгера Clockwork.
|
207
|
+
|
208
|
+
#### Модификатор исходящих HTTP-запросов
|
209
|
+
|
210
|
+
`config.modifiers.outgoing_http`
|
211
|
+
|
212
|
+
Добавляет логирование исходящих HTTP-запросов.
|
213
|
+
На данный момент поддерживаются только запросы, выполненные с помощью гема `HTTP`.
|
214
|
+
|
215
|
+
#### Модификатор входящих запросов в Rails
|
216
|
+
|
217
|
+
`config.modifiers.incoming_http`
|
218
|
+
|
219
|
+
Добавляет логирование входящих HTTP-запросов для контроллеров Rails.
|
220
|
+
|
221
|
+
Может иметь дополнительные настройки:
|
222
|
+
|
223
|
+
- `controllers` — массив имён базовых контроллеров, для которых необходимо добавить указанное логирование.
|
224
|
+
|
225
|
+
- `success_condition` — лямбда, определяющая, содержит ли успех ответ экшена.
|
226
|
+
|
227
|
+
Например: `-> { JSON.parse(response.body)['result'] == 'ok' }`
|
228
|
+
|
229
|
+
- `error_info` — лямбда, позволяющая добавить в лог информацию об ошибке, содержащейся в неуспешном ответе экшена.
|
230
|
+
|
231
|
+
Например: `-> { JSON.parse(response.body)['error_code'] }`
|
232
|
+
|
233
|
+
|
234
|
+
Пример (приведены значения по умолчанию):
|
118
235
|
|
119
236
|
```ruby
|
120
237
|
Loggun::Config.configure do |config|
|
@@ -126,26 +243,25 @@ Loggun::Config.configure do |config|
|
|
126
243
|
#...
|
127
244
|
end
|
128
245
|
```
|
129
|
-
- `controllers` - массив имён базовых контроллеров, для которых необходимо добавить указанное логирование.
|
130
246
|
|
131
|
-
|
247
|
+
**Для Rails 6 и выше данный модификатор может работать некорректно.**
|
132
248
|
|
133
|
-
|
134
|
-
Например `-> { JSON.parse(response.body)['error_code'] }`
|
249
|
+
В этом случае можно добавить в требуемый базовый контроллер строку:
|
135
250
|
|
136
|
-
**Для Rails 6 и выше данный модификатор может работать некорректно.**
|
137
|
-
В этом случае можно указать в требуемом базовом контроллере строку:
|
138
251
|
```ruby
|
139
252
|
include Loggun::HttpHelpers
|
140
253
|
```
|
254
|
+
|
141
255
|
Это делает настройки `enable` и `controllers` модификатора безсполезными,
|
142
|
-
однако позволяет гарантированно логировать входящие
|
256
|
+
однако позволяет гарантированно логировать входящие HTTP-запросы.
|
143
257
|
|
144
258
|
Настройки `success_condition` и `error_info` продолжают использоваться и могут быть установлены требуемым образом.
|
145
259
|
|
146
|
-
|
260
|
+
#### Пользовательские модификаторы
|
261
|
+
|
147
262
|
Помимо указанных модификаторов существует возможность добавить собственный.
|
148
|
-
Необходимо уснаследовать его от `Loggun::Modifiers::Base` и указать в методе `apply` все необходимые
|
263
|
+
Необходимо уснаследовать его от `Loggun::Modifiers::Base` и указать в методе `apply` все необходимые действия:
|
264
|
+
|
149
265
|
```ruby
|
150
266
|
require 'sinatra/custom_logger'
|
151
267
|
|
@@ -155,7 +271,9 @@ class NewModifier < Loggun::Modifiers::Base
|
|
155
271
|
end
|
156
272
|
end
|
157
273
|
```
|
158
|
-
|
274
|
+
|
275
|
+
Затем необходимо добавить его при конфигурации гема:
|
276
|
+
|
159
277
|
|
160
278
|
```ruby
|
161
279
|
Loggun::Config.configure do |config|
|
@@ -166,10 +284,12 @@ end
|
|
166
284
|
```
|
167
285
|
|
168
286
|
### Хелперы
|
169
|
-
|
287
|
+
|
288
|
+
Подключение хэлперов в класс позволяет использовать методы логирования `log_info` и `log_error`,
|
170
289
|
а также генерировать идентификатор транзации для каждого метода класса.
|
171
290
|
|
172
291
|
Например:
|
292
|
+
|
173
293
|
```ruby
|
174
294
|
class SomeClass
|
175
295
|
include Loggun::Helpers
|
@@ -183,26 +303,26 @@ class SomeClass
|
|
183
303
|
end
|
184
304
|
end
|
185
305
|
```
|
186
|
-
|
306
|
+
|
307
|
+
При вызове `#download_data` будет следующий вывод в лог:
|
308
|
+
|
187
309
|
```
|
188
310
|
2020-03-04T16:58:38.207+05:00 - 28476 INFO http_request.some_class.download_data#ffg5431_1583323118203 - {"message":["Information"]}
|
189
311
|
2020-03-04T16:58:38.208+05:00 - 28476 INFO http_response.some_class.download_data#ffg5431_1583323118203 - {"success": true}
|
190
312
|
```
|
191
313
|
|
192
|
-
**Важно**, что с
|
314
|
+
**Важно**, что с хэлпером `log_options` необходимо использовать только методы вида `log_<severity>`.
|
193
315
|
Методы модуля `Loggun` не будут работать.
|
194
316
|
|
195
|
-
Список всех опций
|
196
|
-
|
197
|
-
- `entity_name` - имя сущности метода, string
|
198
|
-
- `entity_action` - действие сущности метода, string
|
199
|
-
- `as_transaction` - добавлять уникальный ID транзакции для метода, boolean
|
200
|
-
- `transaction_generator` - собственный генератор ID транзакции, lambda
|
201
|
-
- `log_all_methods` - признак необходимости применения хелпера ко всем методам, boolean
|
202
|
-
- `only` - список методов, для которых необходимо применить хелпер (работает только если `log_all_methods` - false), Array{Symbol}
|
203
|
-
- `except` - список методов, которые надо исключить для хелпера, Array{Symbol}
|
204
|
-
- `log_transaction_except` - список методов, логирование которых не нужно обогащать ID транзакции, Array{Symbol}
|
317
|
+
Список всех опций хэлпера `log_options`:
|
205
318
|
|
206
|
-
|
319
|
+
- `entity_name` — имя сущности метода, `string`;
|
320
|
+
- `entity_action` — действие сущности метода, `string`;
|
321
|
+
- `as_transaction` — добавлять ли уникальный ID транзакции для метода, `boolean`;
|
322
|
+
- `transaction_generator` — собственный генератор ID транзакции, `lambda`;
|
323
|
+
- `log_all_methods` — применять ли хэлпер ко всем методам, `boolean`;
|
324
|
+
- `only` — список методов, для которых необходимо применить хэлпер (работает только когда `log_all_methods = false`), `Array{Symbol}`;
|
325
|
+
- `except` — список методов, которые надо исключить для хэлпера, `Array{Symbol}`;
|
326
|
+
- `log_transaction_except` — список методов, логирование которых не нужно обогащать ID транзакции, `Array{Symbol}`.
|
207
327
|
|
208
|
-
|
328
|
+
[](https://funbox.ru)
|
data/lib/loggun/config.rb
CHANGED
@@ -8,6 +8,9 @@ module Loggun
|
|
8
8
|
DEFAULTS = {
|
9
9
|
pattern: '%{time} - %{pid} %{severity} %{type} %{tags_text} %{message}',
|
10
10
|
parent_transaction_to_message: true,
|
11
|
+
message_format: :json,
|
12
|
+
log_format: :plain,
|
13
|
+
force_utc: false,
|
11
14
|
precision: :milliseconds,
|
12
15
|
incoming_http: {
|
13
16
|
controllers: %w[ApplicationController],
|
@@ -20,14 +23,21 @@ module Loggun
|
|
20
23
|
}
|
21
24
|
}.freeze
|
22
25
|
DEFAULT_MODIFIERS = %i[rails active_record sidekiq clockwork outgoing_http].freeze
|
26
|
+
MESSAGE_FORMATS = %i[json key_value].freeze
|
27
|
+
LOG_FORMATS = %i[json plain].freeze
|
23
28
|
|
24
29
|
attr_accessor(
|
25
30
|
:formatter,
|
26
31
|
:pattern,
|
27
32
|
:parent_transaction_to_message,
|
33
|
+
:message_format,
|
34
|
+
:log_format,
|
35
|
+
:force_utc,
|
28
36
|
:precision,
|
29
37
|
:modifiers,
|
30
|
-
:custom_modifiers
|
38
|
+
:custom_modifiers,
|
39
|
+
:exclude_keys,
|
40
|
+
:only_keys
|
31
41
|
)
|
32
42
|
|
33
43
|
def initialize
|
@@ -35,8 +45,13 @@ module Loggun
|
|
35
45
|
@precision = DEFAULTS[:precision]
|
36
46
|
@pattern = DEFAULTS[:pattern]
|
37
47
|
@parent_transaction_to_message = DEFAULTS[:parent_transaction_to_message]
|
48
|
+
@message_format = DEFAULTS[:message_format]
|
49
|
+
@log_format = DEFAULTS[:log_format]
|
50
|
+
@force_utc = DEFAULTS[:force_utc]
|
38
51
|
@modifiers = Loggun::OrderedOptions.new
|
39
52
|
@custom_modifiers = []
|
53
|
+
@exclude_keys = []
|
54
|
+
@only_keys = []
|
40
55
|
set_default_modifiers
|
41
56
|
end
|
42
57
|
|
@@ -44,6 +59,7 @@ module Loggun
|
|
44
59
|
def configure(&block)
|
45
60
|
block.call(instance)
|
46
61
|
use_modifiers
|
62
|
+
check_config
|
47
63
|
instance
|
48
64
|
end
|
49
65
|
|
@@ -59,6 +75,16 @@ module Loggun
|
|
59
75
|
instance.custom_modifiers.each(&:use)
|
60
76
|
end
|
61
77
|
|
78
|
+
def check_config
|
79
|
+
unless MESSAGE_FORMATS.include? instance.message_format
|
80
|
+
raise FailureConfiguration, 'Unknown value for message_format'
|
81
|
+
end
|
82
|
+
|
83
|
+
unless LOG_FORMATS.include? instance.log_format
|
84
|
+
raise FailureConfiguration, 'Unknown value for log_format'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
62
88
|
def setup_formatter(app, formatter = nil)
|
63
89
|
Loggun.logger = app.logger
|
64
90
|
Loggun.logger.formatter = formatter || instance.formatter
|
@@ -91,5 +117,7 @@ module Loggun
|
|
91
117
|
3 # milliseconds
|
92
118
|
end
|
93
119
|
end
|
120
|
+
|
121
|
+
class FailureConfiguration < StandardError; end
|
94
122
|
end
|
95
123
|
end
|
data/lib/loggun/formatter.rb
CHANGED
@@ -7,29 +7,22 @@ module Loggun
|
|
7
7
|
|
8
8
|
def call(severity, time, _program_name, message, loggun_type: nil)
|
9
9
|
data = Hash.new(DEFAULT_VALUE)
|
10
|
-
|
11
|
-
data[:pid] = Process.pid
|
10
|
+
time = time.utc if config.force_utc
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
process_message(data, message)
|
13
|
+
|
14
|
+
data[:type] = loggun_type || Loggun.type || DEFAULT_VALUE.dup
|
15
|
+
|
16
|
+
data[:timestamp] = time.iso8601(config.timestamp_precision)
|
17
|
+
data[:time] = data[:timestamp] if config.log_format == :plain
|
19
18
|
|
20
|
-
data[:message] = message.to_s.tr("\r\n", ' ').strip
|
21
19
|
data[:severity] = severity&.to_s || 'INFO'
|
20
|
+
data[:pid] = Process.pid
|
22
21
|
data[:tags_text] = tags_text
|
23
|
-
data[:type] = loggun_type || Loggun.type || DEFAULT_VALUE.dup
|
24
22
|
data[:transaction_id] = Loggun.transaction_id
|
25
23
|
data[:parent_transaction] = parent_transaction if parent_transaction
|
26
24
|
|
27
|
-
|
28
|
-
data[:transaction_id].to_i != Process.pid
|
29
|
-
data[:type] = "#{data[:type]}##{data[:transaction_id]}"
|
30
|
-
end
|
31
|
-
|
32
|
-
format(config.pattern + "\n", data)
|
25
|
+
prepare_to_output(data)
|
33
26
|
end
|
34
27
|
|
35
28
|
def tagged(*tags)
|
@@ -69,6 +62,41 @@ module Loggun
|
|
69
62
|
|
70
63
|
private
|
71
64
|
|
65
|
+
def process_message(data, message)
|
66
|
+
if message.is_a?(Hash)
|
67
|
+
if config.parent_transaction_to_message && parent_transaction
|
68
|
+
message[:parent_transaction] = parent_transaction
|
69
|
+
end
|
70
|
+
|
71
|
+
if config.log_format == :plain
|
72
|
+
message = format_message(message)
|
73
|
+
else
|
74
|
+
simple_message = message.delete(:message)
|
75
|
+
data[:metadata] = message if message != {}
|
76
|
+
message = simple_message
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
message = message.to_s.tr("\r\n", ' ').strip if config.log_format == :plain
|
81
|
+
|
82
|
+
data[:message] = message
|
83
|
+
end
|
84
|
+
|
85
|
+
def prepare_to_output(data)
|
86
|
+
if data[:transaction_id] && data[:type] != DEFAULT_VALUE &&
|
87
|
+
data[:transaction_id].to_i != Process.pid
|
88
|
+
data[:type] = "#{data[:type]}##{data[:transaction_id]}"
|
89
|
+
end
|
90
|
+
|
91
|
+
if config.log_format == :json
|
92
|
+
data.except!(*config.exclude_keys) if config.only_keys.empty?
|
93
|
+
data.slice!(*config.only_keys) if config.only_keys.any?
|
94
|
+
JSON.generate(data) + "\n"
|
95
|
+
else
|
96
|
+
format(config.pattern + "\n", data)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
72
100
|
def parent_transaction
|
73
101
|
return unless Loggun.parent_type && Loggun.parent_transaction_id
|
74
102
|
|
@@ -78,5 +106,16 @@ module Loggun
|
|
78
106
|
def config
|
79
107
|
Loggun::Config.instance
|
80
108
|
end
|
109
|
+
|
110
|
+
def format_message(message)
|
111
|
+
if config.message_format == :json
|
112
|
+
JSON.generate(message)
|
113
|
+
elsif config.message_format == :key_value
|
114
|
+
message.map { |key, value| "#{key}=#{value}" }.join(' ')
|
115
|
+
else
|
116
|
+
warn('Unknown value for message_format')
|
117
|
+
JSON.generate(message)
|
118
|
+
end
|
119
|
+
end
|
81
120
|
end
|
82
121
|
end
|
data/lib/loggun/helpers.rb
CHANGED
@@ -86,7 +86,10 @@ module Loggun
|
|
86
86
|
attrs[:hidden] = { error: { backtrace: error.backtrace } }
|
87
87
|
end
|
88
88
|
end
|
89
|
-
|
89
|
+
unless args.empty?
|
90
|
+
attrs[:message] = args.first if args.size == 1
|
91
|
+
attrs[:message] ||= args
|
92
|
+
end
|
90
93
|
|
91
94
|
with_log_type(type) do
|
92
95
|
logger.send(method_name, **attrs, &block)
|
@@ -139,7 +142,9 @@ module Loggun
|
|
139
142
|
type_as_arr = type.split('.')
|
140
143
|
|
141
144
|
if type_as_arr.size == 1
|
142
|
-
log_entity_name = klass.
|
145
|
+
log_entity_name = klass.log_entity_name if klass.respond_to?(:log_entity_name)
|
146
|
+
|
147
|
+
log_entity_name ||= underscore(klass.name.dup)
|
143
148
|
type_as_arr << log_entity_name
|
144
149
|
end
|
145
150
|
|
@@ -8,6 +8,10 @@ module Loggun
|
|
8
8
|
def apply
|
9
9
|
return unless defined?(::Sidekiq) && ::Sidekiq::VERSION >= MIN_SIDEKIQ_V
|
10
10
|
|
11
|
+
::Sidekiq.client_middleware do |chain|
|
12
|
+
chain.add ClientMiddleware
|
13
|
+
end
|
14
|
+
|
11
15
|
::Sidekiq.configure_server do |config|
|
12
16
|
Loggun::Config.setup_formatter(config, LoggunFormatter.new)
|
13
17
|
end
|
@@ -20,6 +24,15 @@ module Loggun
|
|
20
24
|
require 'loggun/modifiers/sidekiq/sidekiq4'
|
21
25
|
end
|
22
26
|
end
|
27
|
+
|
28
|
+
class ClientMiddleware
|
29
|
+
def call(worker_class, _msg, queue, _redis_pool)
|
30
|
+
yield.tap do |options|
|
31
|
+
msg = "Job #{worker_class} JID-#{options['jid']} enqueued to `#{queue}`"
|
32
|
+
Loggun.info('app.sidekiq.enqueued', msg, worker_class: worker_class, jid: options['jid'], queue: queue)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
23
36
|
end
|
24
37
|
end
|
25
38
|
end
|
data/lib/loggun/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loggun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksandr Noskov
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-09-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- ".gitignore"
|
135
135
|
- ".rspec"
|
136
136
|
- ".travis.yml"
|
137
|
+
- CHANGELOG.md
|
137
138
|
- Gemfile
|
138
139
|
- LICENSE.txt
|
139
140
|
- README.md
|
@@ -182,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
183
|
- !ruby/object:Gem::Version
|
183
184
|
version: '0'
|
184
185
|
requirements: []
|
185
|
-
rubygems_version: 3.
|
186
|
+
rubygems_version: 3.1.2
|
186
187
|
signing_key:
|
187
188
|
specification_version: 4
|
188
189
|
summary: Loggun
|