The current set of instructions mention 'crash_log' being left undefined
as a variable to disable it, but when that happens, lager starts it at a
default location.
This commit makes it obvious that the value must explicitly set to
'undefined' in order to disable crash_log.
Add ability for handlers to 'fatally' fail, so they won't attempt to
reinstall themselves later.
Also fix an issue with the INT_LOG macro not doing the right thing when
only the lager_throttle_backend was installed.
There's a nasty problem with the Erlang VM + lager when the old-style
Erlang console is used. You can use the "-oldshell" flag to explicitly
get the old-style shell. However, if the Erlang VM is started when
*not* associated with a pseudo-tty, the VM will silently use the
old-style shell (because the new-style shell requires a pty to
support command line editing, etc.). The most common way of starting
the Erlang VM without a pty is to start it via a non-interactive
SSH session.
This patch is opinionated in what to do in the case when the old-
style shell is detected. My opinion is:
1. Shout loudly to the console log (in a separate Erlang process, so
that the main lager event handler proc won't be blocked by any
problems with the old-style console). It's almost certainly
likely that you really don't want to run Erlang with the old-style
shell. But many sysadmins don't look closely at their systems'
log files, so (for example) shouting the same message 10x in a row
is legit. Reviewers: YMMV.
2. Set a SASL alarm. Again, many sysadmins' are bad at looking at
log messages. Setting a SASL alarm is another method to try to
get their attention.
To test, create a test script called `/tmp/testit.sh`, changing the
`-pz` parameter to point to the correct place for lager's `ebin`
subdirectory:
#!/bin/sh
erl -pz /Users/fritchie/b/src/lager/ebin -eval '{application:start(sasl), lager_console_backend:init([error, true]), timer:sleep(5*1000), io:format("\n\nInfo: ~p\n\n", [{{alarms, alarm_handler:get_alarms()}, {user_drv, whereis(user_drv)}}]), erlang:halt()}.'
Then run it twice, using the following:
First time: ssh -t localhost sh /tmp/testit.sh
Second time: ssh localhost sh /tmp/testit.sh
The last lines of the first time should look like:
Info: {{alarms,[]},{user_drv,<0.22.0>}}
The last lines of the second time should look like:
Info: {{alarms,
[{lager_console_backend,
"WARNING: old-style console is in use, so lager_console_backend log output to the console is disabled. Restart the VM on a pseudo-tty to ensure use of the new-style VM console."}]},
{user_drv,undefined}}
Adds transparent event stream processing and statistics.
A new 3-tuple trace is introduced as `{Key, Op, Value}`, but
for backwards compatibility `{Key, Val}` implies `=` for `Op`
and `{Key, '*'}` remains as is in the case of wildcards.
A simplified query tree module is generated which reduces
redundant selection conditions to minimize filtering overhead.
This is done via a combination of several things:
* Make the loglevel that triggers a sync configurable
* Make the delayed_write size and intervals configurable
* Make the interval at which external rotation is checked for
configurable
* Store the timestamp a lager_msg was created inside the lager_msg
To support these changes, several other things had to be modified:
* lager_msg:timestamp now returns a timestamp
* lager_msg:datetime was added to return the {date, time} of a message,
like lager_msg:timestamp used to
* The configuration syntax for file backends was changed to be of the
form {lager_file_backend, proplist()} and the old syntax was
deprecated
Additionally, the defaults for the check_interval was raised from
'always' to 1 second, and the sync_interval was changed from 2 seconds
to one second.