Olivier Poitrey
8747b7b3a5
Add ErrorHandler global to allow handling of write errors
2018-11-20 10:56:21 -08:00
Olivier Poitrey
848482bc3d
Fix "could not write" error missing carriage return (again)
2018-11-12 17:50:30 -08:00
Olivier Poitrey
8e30c71369
Revert the wrapping of write errors
...
All errors generated by Go libraries on stderr won't be json encoded
anyway, so it does not make sense to have such a treatment for this one.
2018-11-08 14:49:44 -08:00
Olivier Poitrey
3f112dae87
Fix "could not write" error missing carriage return
2018-11-07 15:21:38 -08:00
Olivier Poitrey
20ad1708e7
Fix nil pointer exception on Discard when called with nil logger
...
Fixes #108
2018-09-26 09:52:52 -07:00
Olivier Poitrey
338f9bc140
Fix typo
2018-09-19 07:40:00 -07:00
Olivier Poitrey
e0f8de6c35
Fix usage of sync.Pool
...
The current usage of sync.Pool is leaky because it stores an arbitrary
sized buffer into the pool. However, sync.Pool assumes that all items in the
pool are interchangeable from a memory cost perspective. Due to the unbounded
size of a buffer that may be added, it is possible for the pool to eventually
pin arbitrarily large amounts of memory in a live-lock situation.
As a simple fix, we just set a maximum size that we permit back into the pool.
2018-09-19 00:20:01 -07:00
Olivier Poitrey
972f27185c
Remove unused hook field on event
2018-09-19 00:20:01 -07:00
Olivier Poitrey
71e1f5e052
Add the ability to discard an event from a hook
...
The Discard method has been added to the Event type so it can be called
from a hook to prevent the event from behing printed. This new method
works outside of the context of a hook too.
Fixes #90
2018-07-26 15:53:02 -07:00
su21
e8a8508f09
fix caller file and line number in context hook ( #89 )
...
* fix caller file and line number report in context hook
* update comment
* update comment
2018-07-25 02:48:22 -07:00
Dušan Kasan
1c6d99b455
Add custom error serialization support and provide sane defaults ( #78 )
...
As per https://github.com/rs/zerolog/issues/9 and to offer a different approach from https://github.com/rs/zerolog/pull/11 and https://github.com/rs/zerolog/pull/35 this PR introduces custom error serialization with sane defaults without breaking the existing APIs.
This is just a first draft and is missing tests. Also, a bit of code duplication which I feel could be reduced but it serves to get the idea across.
It provides global error marshalling by exposing a `var ErrorMarshalFunc func(error) interface{}` in zerolog package that by default is a function that returns the passed argument. It should be overriden if you require custom error marshalling.
Then in every function that accept error or array of errors `ErrorMarshalFunc` is called on the error and then the result of it is processed like this:
- if it implements `LogObjectMarshaler`, serialize it as an object
- if it is a string serialize as a string
- if it is an error, serialize as a string with the result of `Error()`
- else serialize it as an interface
The side effect of this change is that the encoders don't need the `AppendError/s` methods anymore, as the errors are serialized directly to other types.
2018-07-02 12:46:01 -07:00
Ravi Raju
a025d45231
EmbedObject() API and knob to change caller frames ( #66 )
...
* Fix for a bug in cbor decodeFloat
* Add EmbedObject() method
* knob to change the depth of caller frames to skip
* removed EmbedObj() for array - since it is same as Object()
2018-05-16 18:42:33 -07:00
Olivier Poitrey
ea1184be2b
Get back some ns by removing the extra inferance added by binary support
...
benchstat old new
name old time/op new time/op delta
LogEmpty-8 15.2ns ±14% 13.4ns ± 3% -12.11% (p=0.008 n=5+5)
Disabled-8 2.50ns ± 1% 2.28ns ± 6% -8.81% (p=0.008 n=5+5)
Info-8 44.4ns ± 1% 36.4ns ± 4% -17.99% (p=0.008 n=5+5)
ContextFields-8 47.6ns ± 1% 39.4ns ± 7% -17.30% (p=0.008 n=5+5)
ContextAppend-8 18.9ns ± 4% 15.2ns ± 4% -19.68% (p=0.008 n=5+5)
LogFields-8 181ns ± 2% 173ns ± 2% -4.63% (p=0.008 n=5+5)
LogArrayObject-8 530ns ± 3% 487ns ± 3% -8.11% (p=0.008 n=5+5)
LogFieldType/Int-8 29.5ns ± 3% 28.8ns ± 2% ~ (p=0.167 n=5+5)
LogFieldType/Interface-8 180ns ± 7% 175ns ± 4% ~ (p=0.579 n=5+5)
LogFieldType/Interface(Object)-8 87.8ns ± 3% 80.5ns ± 1% -8.29% (p=0.008 n=5+5)
LogFieldType/Object-8 83.7ns ± 2% 77.2ns ± 3% -7.76% (p=0.008 n=5+5)
LogFieldType/Bools-8 34.6ns ± 3% 32.3ns ± 6% -6.64% (p=0.032 n=5+5)
LogFieldType/Float-8 43.0ns ± 4% 40.5ns ± 4% -5.86% (p=0.016 n=5+5)
LogFieldType/Str-8 29.8ns ± 2% 26.5ns ± 5% -11.01% (p=0.008 n=5+5)
LogFieldType/Err-8 32.8ns ± 2% 29.8ns ± 4% -9.21% (p=0.008 n=5+5)
LogFieldType/Durs-8 309ns ± 3% 304ns ± 3% ~ (p=0.238 n=5+5)
LogFieldType/Floats-8 175ns ± 2% 174ns ± 3% ~ (p=0.968 n=5+5)
LogFieldType/Strs-8 51.0ns ± 3% 48.4ns ± 6% -5.06% (p=0.032 n=5+5)
LogFieldType/Dur-8 44.5ns ± 3% 41.3ns ± 3% -7.11% (p=0.008 n=5+5)
LogFieldType/Interface(Objects)-8 758ns ± 3% 760ns ± 6% ~ (p=1.000 n=5+5)
LogFieldType/Interfaces-8 772ns ± 5% 762ns ± 4% ~ (p=0.794 n=5+5)
LogFieldType/Bool-8 28.0ns ± 6% 26.5ns ± 9% ~ (p=0.143 n=5+5)
LogFieldType/Ints-8 49.6ns ± 2% 46.2ns ± 2% -6.70% (p=0.008 n=5+5)
LogFieldType/Errs-8 46.5ns ±11% 40.9ns ± 4% -11.92% (p=0.008 n=5+5)
LogFieldType/Time-8 115ns ± 3% 113ns ± 3% ~ (p=0.167 n=5+5)
LogFieldType/Times-8 810ns ± 1% 811ns ± 3% ~ (p=0.889 n=5+5)
ContextFieldType/Errs-8 158ns ± 6% 156ns ±12% ~ (p=1.000 n=5+5)
ContextFieldType/Times-8 165ns ±11% 173ns ± 9% ~ (p=0.651 n=5+5)
ContextFieldType/Interface-8 289ns ±13% 287ns ±11% ~ (p=0.690 n=5+5)
ContextFieldType/Interface(Object)-8 285ns ±12% 297ns ± 6% ~ (p=0.238 n=5+5)
ContextFieldType/Interface(Objects)-8 941ns ± 6% 941ns ± 5% ~ (p=1.000 n=5+5)
ContextFieldType/Object-8 201ns ± 5% 210ns ±12% ~ (p=0.262 n=5+5)
ContextFieldType/Ints-8 173ns ±10% 165ns ± 9% ~ (p=0.198 n=5+5)
ContextFieldType/Floats-8 297ns ± 6% 292ns ± 7% ~ (p=0.579 n=5+5)
ContextFieldType/Timestamp-8 174ns ± 9% 174ns ±11% ~ (p=0.810 n=5+5)
ContextFieldType/Durs-8 445ns ± 9% 425ns ± 3% ~ (p=0.151 n=5+5)
ContextFieldType/Interfaces-8 944ns ± 6% 876ns ±10% ~ (p=0.095 n=5+5)
ContextFieldType/Strs-8 179ns ±11% 165ns ±13% ~ (p=0.135 n=5+5)
ContextFieldType/Dur-8 158ns ± 8% 160ns ±19% ~ (p=1.000 n=5+5)
ContextFieldType/Time-8 152ns ±15% 148ns ±14% ~ (p=0.952 n=5+5)
ContextFieldType/Str-8 146ns ±12% 147ns ±16% ~ (p=0.841 n=5+5)
ContextFieldType/Err-8 138ns ±12% 145ns ±17% ~ (p=0.595 n=5+5)
ContextFieldType/Int-8 145ns ±10% 146ns ±13% ~ (p=0.873 n=5+5)
ContextFieldType/Float-8 181ns ± 9% 162ns ±12% ~ (p=0.151 n=5+5)
ContextFieldType/Bool-8 153ns ±10% 131ns ±19% ~ (p=0.063 n=5+5)
ContextFieldType/Bools-8 149ns ±11% 160ns ±16% ~ (p=0.500 n=5+5)
2018-05-10 15:01:41 -07:00
Olivier Poitrey
a572c9d1f6
Add missing support for zerolog marshable objects to Fields
2018-05-09 03:52:30 -07:00
Ravi Raju
2ccfab3e07
Support for adding IP Address/Prefix + stream based decoder ( #49 )
...
* added IPAddr, IPPrefix and stream based cbor decoder
* Update README with cbor decoder tool info
* Update README in cbor with comparison data
2018-04-03 23:07:18 +02:00
Ravi Raju
ddfae1b613
Binary format support ( #37 )
...
Adds support for binary logging (with cbor encoding) in addition to JSON. Use the binary_log compile tag to enable the feature.
2018-03-28 11:49:41 -07:00
Johan Sim Jian An
5250a1ba2d
Check nil in RawJSON. ( #45 )
2018-03-22 21:08:22 -07:00
Max Wolter
1c575db928
Add support for hex-encoded of byte slice ( #42 )
2018-03-15 10:29:26 -07:00
Kai Ren
b62d797a8d
Mention fields duplication caveat in documentation ( #41 )
2018-03-08 07:41:28 -08:00
Giovanni Bajo
9ee98f91c4
Remove allocations while logging an Array of Objects. ( #38 )
2018-02-13 11:18:01 -08:00
Olivier Poitrey
56a970de51
Add RawJSON field type
2018-02-12 16:05:27 -08:00
Olivier Poitrey
27e0a22cbc
Add the ability to capture the logger caller file and line number
...
Fixes #34 , #22
2018-02-07 13:54:26 -08:00
Olivier Poitrey
fcbdf23e9e
Use new hook internally to handle timestamp in context
2018-02-07 13:31:00 -08:00
Rodrigo Coelho
c3d02683c7
Add hook support ( #24 )
2017-12-01 10:52:37 -07:00
Giovanni Bajo
89e128fdc1
Speed up operations when logging is disabled. ( #18 )
...
Low-level optimizations to help the compiler generate better code
when logging is disabled. Measured improvement is ~30% on amd64
(from 21 ns/op to 16 ns/op).
2017-11-05 05:22:20 -08:00
Olivier Poitrey
89ff8dbc5f
Small comment fix
2017-07-26 23:42:12 -07:00
Olivier Poitrey
614d88bbf8
Add support for typed array.
2017-07-26 00:30:03 -07:00
Olivier Poitrey
6cdd9977c4
Refactor JSON encoding code
2017-07-25 22:05:32 -07:00
Olivier Poitrey
fdbdb09630
Add support for custom object marshaling
2017-07-25 18:41:05 -07:00
Olivier Poitrey
2aa3c3ae4f
Add some array types support
2017-07-25 12:50:35 -07:00
Olivier Poitrey
7af653895b
Add utility functions WithLevel and Fields
...
Add some utility functions to ease migration from other logger API.
2017-07-10 02:58:58 -07:00
Olivier Poitrey
72d41dedeb
Add []byte fields support
...
Add efficient []byte field support with no string conversion.
2017-07-01 12:48:32 -07:00
Olivier Poitrey
9889521807
Add TimeDiff event method
2017-06-06 22:10:36 -07:00
Olivier Poitrey
46cd35d1f2
Remove error returned by Msg and Msgf
...
When error happen, there is nothing the caller can really do and it is
not practicle to handle logging errors. Print an error on the standard
error instead.
2017-06-06 10:10:31 -07:00
Olivier Poitrey
7e8bba7e7f
Fix typos
2017-06-05 13:03:55 -07:00
Olivier Poitrey
49d553c9b8
Add AnErr field type
2017-06-02 00:56:14 -07:00
Olivier Poitrey
6bcd15ecf0
Add support for zerolog as an output for stdlib logger
2017-06-01 23:17:28 -07:00
Olivier Poitrey
bf4b44614c
Simplify Dur method usage.
2017-05-20 21:08:42 -07:00
Olivier Poitrey
3f54be8716
Improve context.Context logging
2017-05-20 00:22:37 -07:00
Olivier Poitrey
4f55c107b9
Fix typo
2017-05-19 22:48:00 -07:00
Olivier Poitrey
195fd3d7c6
Add support for the duration field
2017-05-19 22:43:10 -07:00
Olivier Poitrey
76d3c39327
Rename Object to Interface
2017-05-19 22:25:37 -07:00
Olivier Poitrey
6925dbdff1
Add support for object reflection field
2017-05-19 19:56:18 -07:00
Olivier Poitrey
d0cfcbbafe
Write directly into a single shared buffer per event for even better perf
2017-05-19 19:45:46 -07:00
Olivier Poitrey
5ebf00efab
Add dict support
2017-05-18 00:10:45 -07:00
Olivier Poitrey
5ec57ffb50
Add doc to all field types
2017-05-16 21:56:38 -07:00
Olivier Poitrey
7f302b00ec
Initial commit
2017-05-13 16:22:35 -07:00