1
0
mirror of https://github.com/meineerde/rackstash.git synced 2025-12-27 09:51:12 +00:00

187 Commits

Author SHA1 Message Date
d8300a125e Rename Buffer#allow_empty? to Buffer#allow_silent?
This new name better reflects what this option actually does: it allows
to flush a Buffer even if there were just added fields or tags. A tryely
empty Buffer, i.e., one which has neither added messages, fields, or
tags is never flushed.
2017-08-16 20:46:28 +02:00
0a5e0a4aab Add TruncateMessage filter to restrict the size of the logged message 2017-08-16 00:43:09 +02:00
6558c4b63f Require the Message encoder on load 2017-08-15 22:15:39 +02:00
2da9bdd212 Require the Logstash encoder on load 2017-08-15 22:11:43 +02:00
fa174bba9d Freeze the raw object along the wrapper for all fields 2017-08-15 18:36:33 +02:00
57f1197299 Do not alter the message in JSON encoder
If required, users can setup filters for that. We shouldnot assume any
overly specific use-cases here.
2017-08-14 23:25:59 +02:00
cc8e5db6b4 Remove useless newline 2017-08-14 23:19:11 +02:00
0a1fe46ea5 Add filter to remove all ANSI color codes from the event message 2017-08-14 23:18:19 +02:00
10993d2b1a Serialize Rational numbers to a String
With this, we are more compatible with the common JSON encoders,
including the one on RUby core.
2017-08-14 14:10:48 +02:00
ab595d031b Add Logstash encoder
This encoder is very similar to the JSON encoder. It handles a few
additional specifics for Logstash to be suotable for Logstash's json
input.
2017-08-14 13:33:52 +02:00
2fbdf3c1f5 Don't create the @version fields in events by default
This field is only relevant when actually sending JSON to Logstash.
Other formats don't need it. It is thus more desireable to only include
this field in a specific logstash JSON encoder.
2017-08-14 13:27:20 +02:00
536bb9a087 Ensure that the Formatter freezes the strings in all cases
Previously, the returned String would been frozen only in Rubies
understanding the frozen_literals magic comment.
2017-08-12 14:05:20 +02:00
168e62b63c Remove useless newlines 2017-08-12 14:02:03 +02:00
3a1f3686c0 Add Message#strip methods to strip whitespace from messages
These mehods work very similar to their String equivalents.
2017-08-08 22:26:34 +02:00
e999746f1e Add Message#gsub and Message#sub methods
These allow to create new Message objects with an updated message,
similar to `gsub` and `sub` of the core String.
2017-08-08 22:15:21 +02:00
eb93d70468 Add Message#copy_with to create an adjusted copy of an exising message
You can overwrite any (or none) of the existing fields to create a new
frozen copy of a message object.
2017-08-08 22:15:13 +02:00
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
8c7900f17b Refactor: extract checks in FilterChain 2017-08-05 15:47:17 +02:00
7ba2010412 Use Range@cover? instead of Range#include? in FilterChain for slightly better performance 2017-08-05 15:05:04 +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
ca394ddfe4 Improve documentation of Logger#with_buffer 2017-08-04 23:50:14 +02:00
f4ca82011f Add documentation for Rackstash.severity_label 2017-08-04 16:08:48 +02:00
3dc3302794 Move Rackstash.severity_label below the defined severities 2017-08-04 16:05:12 +02:00
3f70abde1a Simplify the setup of the static Rackstash::Version data 2017-08-04 15:09:23 +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
0fa327bb3a Don't refer to methods not available on the current class in yard docs 2017-08-04 14:38:24 +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
65e272347d Preemptively freeze more Strings on normalize to ensure that we don't create unnecessary copies 2017-08-02 19:59:18 +02:00
ab7331a7a9 Fix code intentation 2017-08-02 19:59:10 +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
cbcfec88a8 Synchronize FilterChain#to_s and FilterChain#inspect
This ensures that any access to the internal @filters array is only done
with an aquired lock to ensure data consistency.
2017-08-02 17:29:27 +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
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
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