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
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
1da5ae4a38 Extract unrelated constant tests 2017-07-15 14:32:09 +02:00
724a373d66 Add MIT license header to file adapter spec 2017-07-15 14:30:07 +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
0cf89200f2 Use Arry.new(n) {...} instead of n.times.map {...} 2017-07-12 12:27:57 +02:00
ee429fa71e Add Rackstash::Fields::Array#shift and #unshift 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
a0c92d57f8 Add File adapter to directly write to a local file 2017-07-10 23:45:02 +02:00
e96a0aaf94 Separate the PRERELEASE version part with a dash instead of a dot 2017-07-05 19:21:24 +02:00
4eecc559a4 Transform list of forbidden_keys in Rackstash::Fields::Hash.new to a frozen Set
We then expose this frozen Set on the `forbidden_keys` attribute.
2017-06-30 19:27:46 +02:00
d26858c103 Add Rackstash::Fields::Array#size as an alias to length 2017-06-22 23:00:51 +02:00
7c0c983dc2 Add Message encoder to just log the log message
This encoder is useful for local consumption of the raw log stream, e.g.
during development where the developer might not care for any additional
fields. With this encoder, the log output can mostly resemble a "classic"
line-based log feed.
2017-06-21 01:38:11 +02:00
e29c8976bb Clarify that the JSON encoder strips all whitespace 2017-06-21 01:38:11 +02:00
32b3ef8e0e Add Rackstash::Fields::Array#pop
This method does exactly the same as `::Array#pop`
2017-06-21 01:38:11 +02:00
649de80698 Allow multiple arguments to Rackstash::Fields::Array#push
We now also support the new alias to `Array#push` called `append` which
will be added to the core `Array` with Ruby 2.5.
2017-06-21 01:38:11 +02:00
6eccf6cc37 Don't copy or alter frozen UTF-8 strings in fields
With this, we optimize the common case where we do have valid UTF-8
strings to begin with. If the given String is already frozen, as is
common for e.g. Hash keys, we don't even need to create a new object.

With this change, we also always return frozen strings from
`Rackstash::Fields::AbstractCollection#utf9_encode`. This avoids an
unecessary object copy when inserting it in a Hash and still ensures
that values are always frozen anyway.
2017-06-21 01:38:11 +02:00
aad1660135 Add Callable adapter to handle a log in a custom way
Users can provide a "callable", i.e. a proc or block which will be
called for each written log. This allows users to custom handle the
logs without having to write a full adapter.

Usually, users should still write a full adapter to handle all cases of
their wrapped log device.
2017-06-21 01:38:11 +02:00
0aa39483dd Add Raw encoder which just passes the log event 2017-06-16 23:04:55 +02:00
16d76a7217 Allow to automatically flush the IO adapter after each write 2017-06-16 23:04:55 +02:00
00786283f0 Add IO adapter
This adapter allows to write newline-separated log lines to an existing
IO object, e.g. STDOUT. It does not allow to reopen the IO device.
2017-06-16 23:04:55 +02:00
b3f9a63253 Allow to define a suitable default encoder per adapter
The global default (unless overwritten by an adapter class) is to use
the JSON encoder since it's the most versatile and flexible option for a
logger today.
2017-06-16 23:04:55 +02:00
bf178ef36d Add JSON encoder 2017-06-16 23:04:54 +02:00
05f0faeedc Add abstract adapter and adapter registry
An ada pert wraps a log device (e.g. a file, an underlying logger, ...)
and provides an uniform interface to write the encoded log event to its
final target.

By using a registry, we can create the required adapter instance for a
provided log device automatically.
2017-06-16 23:04:54 +02:00
da3113e880 Avoid Array instances when normalizing Arrays / Hashes
`each_with_object` allocates an array for each kv pair. Switching to
the slightly more verbose but less allocatey `each_pair` eliminates
array allocations.

This follows the similar change in Rails:
960de47f0e
2017-05-23 13:27:22 +02:00
7ffdc527af Ensure we are only adding actual Flow objects in Rackstash::Flows.new 2017-05-09 22:22:25 +02:00
54c10a0576 Improve code formatting in specs for Rackstash::Flows 2017-05-09 22:21:19 +02:00
da8904f412 Add a thread-safe Rackstash::Flows#each method 2017-05-09 22:20:23 +02:00
335bbe0064 Test the correct alias-methods for Flows#to_ary and Flows#to_a 2017-05-06 23:49:51 +02:00
eb6cb29440 Return only present flows from Flows#to_ary 2017-05-06 23:49:05 +02:00
b2c1a1da0e Rename Target(List) to Flow(s)
Since a flow will significantly affect the representation of a log event
over its life before being persistet by the final adapter, the new term
better reflects what it is responsible for.

It also helps to avoid the dupliction of meaning between Sink, Target,
Adapter.
2017-05-06 14:47:40 +02:00
ec30779429 Remove unused variable in specs 2017-05-04 21:40:23 +02:00
5f68082810 Add Rackstash::TargetList to hold a list of defined log targets
The TargetList behaves mostly like an array which ensures that all its
elements are Targets.
2017-04-27 23:49:56 +02:00
2b0de27956 Return nil on BufferStacl#flush_and_pop
The buffer should not be reused after a flush anyway. By not returning
it, we ensure that it does not leak outside.
2017-04-27 22:04:13 +02:00
0026cdb204 Format the message string in the Logger
Since the Message class now formats the passed message on initialization
anyways, there is no need anymore to retain the formatter there.
Instead, we can just format the message string in the Logger before
creating the Message instance.

This significantly simplifies the Message class and better encapsulates
the knowledge about the line formatter into the Logger class.
2017-04-18 21:25:05 +02:00
f3f6fba89b Format the passed message on Message initialization
Since we can not guarantee that a user-supplied formatter is side-effect
free, a delayed formatting might result in unexpected results. An
example of such a formatter is the one used by
ActiveSupport::TaggedLogging.
2017-04-13 17:42:28 +02:00
d9c7a2ad33 Add Fields::Array#push as an alias to #<< 2017-04-06 23:09:22 +02:00
bfa5e33c04 Add Fields::Hash#reverse_merge and reverse_merge! similar to the ActiveSupport methods on Hash 2017-03-07 16:45:47 +01:00
22d1cdb646 Add Rackstash::Fields::Hash#deep_merge! and deep_merge
These methods are useful convenience methods to add (nested) fields to a
hash while optionally retaining existing values. Usually, `#deep_merge!`
or `#set` will be the commonly used ways to set fields to a hash.
2017-02-18 22:36:21 +01:00
4a185096d6 Add Rackstash::Fields::Hash#key? predicate 2017-02-18 01:15:49 +01:00
e13efe5ed3 Add consistent hash method to Rackstash::Fields::AbstractCollection
This follows the rule that two objects which are eql? also have the same
hash value. It is also required to ensure that we can use collections in
sets, hashes and arrays where the hash-equality is checked for certain
operations.
2017-02-17 19:12:47 +01:00
411465073f Check code coverage of tests using coveralls 2017-02-16 23:26:24 +01:00
0339d4bced Test Rackstssh::Fields::AbstractCollection#clone 2017-02-16 23:08:42 +01:00
6958b8f509 Add Rubocop config and resolve most style issues 2017-02-16 22:47:17 +01:00