1
0
mirror of https://github.com/meineerde/rackstash.git synced 2025-10-17 14:01:01 +00:00

297 Commits

Author SHA1 Message Date
011249bb75 Add Flows#first and Flows#last 2017-08-07 22:49:39 +02:00
eab3d16ec5 Fix minor code formatting issues 2017-08-05 23:53:01 +02:00
d362b7efaa Make Flow#unshift_filter the primary alias before filter_prepend to be more consistent 2017-08-05 23:29:54 +02:00
581b8b1819 Allow to insert a new filter defined by a symbol or String into a FilterChain 2017-08-05 23:29:54 +02:00
f0c65524a7 Build a new Filter from a String or Symbol 2017-08-05 23:29:54 +02:00
77675f65a6 Add Logger#push_buffer and Logger#pop_buffer for manual Buffer management
Most of the time, these methods should be used. They are only required
for special cases where the Buffer needs to be flushed later than when
its poped. In this case, special precautions need to be made to ensure
that the Buffer is always reliably poped and flushed to avoid loosing
logs.
2017-08-05 00:05:41 +02:00
a987e92250 Add BufferStack#pop to remove the top-most Buffer without flushing it
This can be used for certain advanced constructs where the Buffer needs
to be manually flushed later, after it was already removed from the
stack.
2017-08-04 14:49:10 +02:00
3f8745e32c Move the responsiblity for creating the event hash to the Buffer
With this move, we can also optimize the sinplest case where there are
no fields or tags on the Buffer and no defines default_fields or
default_tags on the Sink. In that case, we don't need to merge them,
avoiding the creation of several unecessary objects on Buffer flush.
2017-08-04 00:53:36 +02:00
4438bf42bc Lazy instanciate tags and fields on a Buffer instance 2017-08-03 22:31:48 +02:00
697641635b Don't use Concurrent::{Hash|Array} objects in Fields
Since the fields are (through the thread-local BufferStack) only ever
accessed from a single Thread, there is no need to accept the additional
locking overhead of the Concurrent raw values.

We can just use simple Hashes and Arrays here for higher performance.
2017-08-03 21:09:50 +02:00
271c547f05 Initialize monitor and copy internal filters list on FilterChain#dup 2017-08-02 17:50:53 +02:00
6c145579ed Add FilterChain#to_a to get a plain Array representation of the chain 2017-08-02 17:37:29 +02:00
597f605e06 Don't stub FilterChain#to_s in test of #inspect
That way, we can also ensure that the nested locking works correctly
without any deadlock.
2017-08-02 17:32:10 +02:00
f6c5930db6 Use __dir__ instead of deriving from __FILE__ where suitable 2017-08-02 16:06:21 +02:00
b228494d14 Raise a custom Rackstash::NotImplementedHereError instead of NotImplementedError
Using the core `NotInmplementedError` is not desireable since its
documentation includes:

> Note that if `fork` raises a `NotImplementedError`, then
> `respond_to?(:fork)` returns `false`.

Since we are responding to the method but still raise an error, our
usage of the exception does not fulfill its documentation.

A custom error instead of a default `NoMethodError` is still desireable
since it significantly helps with debugging. With a different Exception,
we make it clear that a method is expected to be there and just wasn't
implemented by a subclass as opposed to the caller just using an object
wrong and calling entirely unexpected methods on it.
2017-08-01 12:28:58 +02:00
4eb381a733 Move Logger#add_exception to the Buffer and forward from the Logger 2017-07-28 16:58:51 +02:00
65cad497f0 Add complete tests for setting a custom error_flow on Flows 2017-07-28 12:59:46 +02:00
c4f0b9cdeb Use an error_flow to log any exceptions during logging
During normal operation, the Flows will rescue all exceptions and log
them to the special error_flow. By default, we will write JSON logs to
STDERR.

The log location and format can either be change globally by setting (or
changing) the Rackstash.error_flow or for each Flow for a Logger
individually by setting Flow#error_flow.
2017-07-28 02:16:31 +02:00
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
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
f92bde5af2 Add Logger#[] and Logger#[]= alias methods to get and set fields 2017-07-25 00:03:47 +02:00
12261ef786 Fix Typo in spec description 2017-07-22 00:07:18 +02:00
9656297762 Remove ANSI color codes from the message in JSON encoder 2017-07-22 00:06:35 +02:00
667beb662f Freeze Messages directly after initialization
This ensures that they are actually immutable.
2017-07-21 22:50:44 +02:00
57f200ab35 Check that Logger#tag implements the same interface as Buffer#tag 2017-07-21 18:34:50 +02:00
9536b0473b Forward Logger#timestamp to Buffer#timestamp 2017-07-21 18:34:29 +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
25dfa87de7 Add Rackstash::Logger#add_exception to easily add details about exceptions as buffer fields 2017-07-20 23:19:06 +02:00
d9ea199d4f Remove useless variable assignment in logger spec 2017-07-20 22:49:03 +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
ba3e0676e5 Test for invalid matchers for registered Adapters
Yes, this commit is required only because of my unhealthy urge to
achieve real 100% test coverage...
2017-07-20 01:25:16 +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
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
ca339a84fa Replace specific class-under-test with described_class in all specs 2017-07-19 12:55:29 +02:00
b6768c6547 Test all conditions of Rackstash::Fields::Hash() 2017-07-19 12:02:21 +02:00
9950d783cf Ensure behavior of Rackstash::Adapters::File#auto_reopen? 2017-07-19 00:40:47 +02:00
0420984d92 Ensure more reliable concurrency in tests for Rackstash::Adapters::File 2017-07-19 00:27:35 +02:00
2ff1e1e5dc Ensure Rackstash::Fields::Tags.merge! accepts nested procs 2017-07-18 23:33:48 +02:00
dc3d2b20bf Add tests and clarify edge-case for Rackstash.severity_label 2017-07-18 23:28:26 +02:00
d609c2409a Fix test condition in file adapter cncurrency spec
Previously, we have counted successivly equal lines. However, we want to
count the number of lines with different content to ensure proper
concurrency during the test.
2017-07-18 23:13:35 +02:00