1
0
mirror of https://github.com/meineerde/rackstash.git synced 2025-12-29 10:39:36 +00:00

25 Commits

Author SHA1 Message Date
74242caf0b There can be only one... UNDEFINED
By ensuring that we only ever create a single UNDEFINED object from the
UndefinedClass, it behaves more like nil
2017-09-07 21:18:03 +02:00
168e62b63c Remove useless newlines 2017-08-12 14:02:03 +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
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
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
be6e3517de Increase sub-second precision of timestamps to 6 decimal places 2017-07-25 23:32:14 +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
b573581a26 Add Null adapter which just swallows any logs 2017-07-19 13:08:11 +02:00
dc3d2b20bf Add tests and clarify edge-case for Rackstash.severity_label 2017-07-18 23:28:26 +02:00
a4a6b248cf Use frozen string literals throughout the codebase in Ruby >= 2.3 2017-07-17 13:35:24 +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
a0c92d57f8 Add File adapter to directly write to a local file 2017-07-10 23:45:02 +02:00
d6c3111999 Always generate positive object IDs in inspect
Sometimes, object_ids are created as signed Integers which are invalid
in `inspect`. By using the default implementation of `Object#to_s`, we
can get valid object_ids the same way Ruby itself would have created
them.

For a motivation of this change, see

* https://bugs.ruby-lang.org/issues/13397
* https://github.com/ruby-concurrency/concurrent-ruby/pull/651
2017-07-03 13:37:05 +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
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
3ccacfaab9 Move DEFAULT_OBJ_ID_STR_WIDTH to Rackstash module 2017-04-27 23:48:30 +02:00
473618c479 Extract the SEVERITY_NAMES constant
This array lists the lowercase names of the supported severities which
can be set on the Logger.
2017-04-18 21:26:31 +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
551b75c65d Add fields and tags to the Buffer
Each buffer instance can hold messages, fields and tags. These together
form the log event which will eventually be written to the log target.

By adding fields and tags, you can add highly details structured
information to your logs which allow to filter and analyze the logs
without having to parse complex multi-line logs.
2017-02-02 23:55:02 +01:00
407b52120a Add basic fields to hold additional data on Buffers
The fields follow the basic structure of basic Hashes and Arrays but
provide an interface better suitable for us. Specifically:

* They check and enforce the datatypes for keys and values to be
  strictly JSON-conforming. Only the basic data-types are accepted
  respectively converted to.
* Hashes only accept String keys.
* Basic values are always frozen.
2017-02-02 15:04:02 +01:00
3081b03db1 Add basic logger structure with early spikes
The Rackstash::Logger class will server as the public main entry point
for users. It will eventually implement the mostly complete interface of
Ruby's Logger.

The idea of Rackstash is the we will allow to buffer multiple log
messages allong with additional data until a combined log event is
eventually flushed to an underlying log target. This allows to keep
connected log messages and data as a single unit from the start without
having to painstakingly parse and connect these in later systems again.
2017-01-18 23:34:55 +01:00
572b95c580 Use single-quotes and check line-length to 80 chars 2017-01-15 18:49:43 +01:00
750da262b7 Add license headers to all code files 2017-01-15 18:38:33 +01:00
7e937904c0 Create inititial gem structure for rackstash
bundle gem --exe --coc --mit --test=rspec rackstash
2017-01-15 18:38:33 +01:00