fb7732ef42
Extract close!, reopen!, and write! methods from Rackstash::Flow
...
These methods do not rescue any thrown errors. The usual loggers will
always want to use the non-bang methods which rescue errors and attempt
to log them.
2017-07-27 23:15:59 +02:00
dcf21d0bfa
Synchronize all writes of the IO adapter against the underlying IO object
2017-07-27 18:06:48 +02:00
be6e3517de
Increase sub-second precision of timestamps to 6 decimal places
2017-07-25 23:32:14 +02:00
7a32781c17
Return the pop'ed Buffer from the BufferStack on flush_and_pop
2017-07-25 23:32:14 +02:00
248a1d558f
No need to synchronize the BufferStack with a Mutex
...
A single BufferStack object is only ever accessed by a single thread.
This is guaranteed by the Logger. Exceptions to the rule are not special
enough to break the rules.
2017-07-25 23:31:39 +02:00
c370aecbcd
Stop splatting clean hash argument in Bufferstack#push
...
The optional keyword arguments are already cleaned by the keyword splat
in BufferStack#push. They are automatically unsplatted when calling
Buffer#initialize anyway.
2017-07-25 23:30:01 +02:00
f92bde5af2
Add Logger#[] and Logger#[]= alias methods to get and set fields
2017-07-25 00:03:47 +02:00
9656297762
Remove ANSI color codes from the message in JSON encoder
2017-07-22 00:06:35 +02:00
da97e9d54e
Inline Message#cleanup to save one method invocation per log line
2017-07-21 23:39:17 +02:00
05145b400b
Fix Typo
2017-07-21 23:34:29 +02:00
667beb662f
Freeze Messages directly after initialization
...
This ensures that they are actually immutable.
2017-07-21 22:50:44 +02:00
9536b0473b
Forward Logger#timestamp to Buffer#timestamp
2017-07-21 18:34:29 +02:00
5213574ec7
Don't include Forwardable into Rackstash::Logger anymore, we are not using it
2017-07-21 17:12:46 +02:00
cce94b70ed
Explicitly require concurrent gem for Buffer class
2017-07-21 17:06:37 +02:00
1b81e763b2
Improve documentation for Sink#default_* accessors
2017-07-21 17:04:25 +02:00
c53d85fac5
Forward Logger#tag to the current Buffer
2017-07-21 16:57:44 +02:00
fc4a917b71
Forward Logger#close and Logger#reopen to the Sink
2017-07-21 16:44:11 +02:00
40f920dafb
Forward config methods for the Sink on the Logger
2017-07-21 16:37:47 +02:00
1d67d819d0
Complete code documentation of Rackstash::Message
2017-07-20 23:46:03 +02:00
25dfa87de7
Add Rackstash::Logger#add_exception to easily add details about exceptions as buffer fields
2017-07-20 23:19:06 +02:00
67955f8629
Add force parameter to Rackstash::Fields::Hash#set so it works like #merge!
2017-07-20 22:11:11 +02:00
9fc9ea248b
Use Rackstash::Helpers::UTF8 in Message class
2017-07-20 14:12:05 +02:00
d73b7ba8e1
Extract utf8_encode helper into Rackstash::Helpers::UTF8 module
2017-07-20 14:12:05 +02:00
2c8d6ac009
Don't cleanup ANSI chars and newlines in messages anymore
...
These characters might be there deliberately. If they should be cleaned
up, it can easily be done later with a filter.
2017-07-20 13:45:55 +02:00
5eeaab4afa
Allow to overwrite logger attributes in Logger#initialize
2017-07-20 00:47:26 +02:00
4a62e3d189
Allow to write a Hash to the Logger to deep_merge fields
2017-07-20 00:29:43 +02:00
33ee63bffb
Improve code documentation for Logger
2017-07-20 00:20:23 +02:00
4e1f6af273
Use the same argument names in Logger methods
2017-07-20 00:18:41 +02:00
720406b318
Implement the full Sink class
...
A single Sink is tied to a single Logger. It is responsible to:
* Create a log event from a Buffer on #write and send it to each of the
flows independently.
* Forward all actions to all of the defined Flows.
The Sink provides access to all configured data of the Logger which is
used for persisting the Buffers.
2017-07-20 00:06:06 +02:00
54a6f5d160
Implement the Flow to transform and persist log events
...
A single Buffer can be send to one or more flows which in turn each
write to a different adapter. A Flow object is responsible for
filtering, encoding, and finally persisting the event to an adapter.
Each Flow object can be configured differently which allows to write a
single log event to multiple targets as required.
2017-07-19 23:55:52 +02:00
7032cc6999
Do not mutate external time objects when getting UTC time
2017-07-19 13:37:38 +02:00
b573581a26
Add Null adapter which just swallows any logs
2017-07-19 13:08:11 +02:00
b72b8cf94b
Fix @return documentation tag for Rackstash::Filters::SkipEvent#call
2017-07-19 11:09:32 +02:00
dc3d2b20bf
Add tests and clarify edge-case for Rackstash.severity_label
2017-07-18 23:28:26 +02:00
e21108b7c2
Add first example SkipEvent filter
2017-07-18 23:13:35 +02:00
466c377565
Add FilterChain to wrap and filters on event hashes
2017-07-18 16:49:04 +02:00
a4a6b248cf
Use frozen string literals throughout the codebase in Ruby >= 2.3
2017-07-17 13:35:24 +02:00
e3611c8720
Add Message#severity_label and Message#length utility methods
2017-07-17 12:00:13 +02:00
364426f228
Return the flows object in Rackstash::Flows#each
2017-07-15 16:27:09 +02:00
ba61940a95
Improve code formatting
2017-07-15 14:30:07 +02:00
9f2a330a6c
Support arbitrarily nested Procs when setting/merging fields
2017-07-15 11:13:41 +02:00
dd7f79db0a
No need to freeze Strings from utf8_encode again in Fields::Tags
2017-07-15 10:50:55 +02:00
2f33e10ba9
Clarify that Buffer#add_message also sets the timestamp
2017-07-14 11:05:19 +02:00
0d1ad5e170
Add basic documentation for Rackstash::Fields
2017-07-11 23:52:49 +02:00
637245d836
Don't detail other adapters in IO adapter documentation
2017-07-11 23:43:48 +02:00
ee429fa71e
Add Rackstash::Fields::Array#shift and #unshift
2017-07-11 23:42:13 +02:00
779f3bb81d
Improve code documentation of Rackstash::Fields
2017-07-11 23:42:13 +02:00
a461b36b97
Allow to query and replace subarrays of Rackstash::Fields::Array
2017-07-11 23:42:13 +02:00
d07a9452f4
Add Rackstash::UNDEFINED constant
...
The {UNDEFINED} object can be used as the default value for method
arguments to distinguish it from `nil`. See
https://holgerjust.de/2016/detecting-default-arguments-in-ruby/#special-default-value
for details.
2017-07-11 23:42:13 +02:00
da1999dba3
Unify the conflict resolution behavior of merge! and deep_merge! in Rackstash::Fields::Hash
...
When setting `force: true` (the default), in both cases we not raise an
ArgumentError when setting a forbidden field and overwrite existing
fields. When setting it to `false`, we ignore forbidden or existing
fields in both cases.
We also allow a custom conflict resolution block to be passed to both
methods. In the case of deep_merge! and deep_merge, this applies to all
(potentially deeply nested) fields. Compatible objects, i.e. Hashes and
Arrays are still always merged without calling the block.
2017-07-11 22:23:19 +02:00