Permalink
Commits on Apr 24, 2013
  1. Merge pull request #139 from basho/adt-avoid-console-io-hang

    Disable console backend if oldshell is used
    Vagabond committed Apr 24, 2013
  2. Rework the 'old shell' warning, and some related work

    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.
    Vagabond committed Apr 24, 2013
  3. Disable I/O to the console if the old-style Erlang console is used

    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}}
    slfritchie committed with Vagabond Apr 23, 2013
Commits on Apr 22, 2013
Commits on Apr 19, 2013
  1. Pin the goldrush dep to a SHA

    Vagabond committed Apr 19, 2013
  2. Merge branch 'dz-event-stream-processing' of git://github.com/DeadZen…

    …/lager into DeadZen-dz-event-stream-processing
    
    Conflicts:
    	src/lager_util.erl
    Vagabond committed Apr 19, 2013
Commits on Apr 15, 2013
  1. Merge pull request #129 from basho/adt-unicode-fix

    Support writing unicode to files, thanks @jacktang
    Vagabond committed Apr 15, 2013
  2. Merge pull request #130 from gomoripeti/pgö-rotate-check-interval-test

    test internal log rotation when check_interval > 0
    Vagabond committed Apr 15, 2013
Commits on Apr 12, 2013
  1. Add a latin-1 test

    Vagabond committed Apr 12, 2013
Commits on Apr 9, 2013
  1. Fix typespecs for a clean dialyzer run

    Fix typespec of lager_file_backend:init() and lager_msg record
    gsmith committed Apr 9, 2013
  2. Implement event stream processing

    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.
    DeadZen committed Mar 21, 2013
Commits on Apr 5, 2013
Commits on Apr 4, 2013
  1. Merge pull request #128 from gomoripeti/pgö-rotate-check-interval

    fix internal log rotation when check_interval > 0
    Vagabond committed Apr 4, 2013
Commits on Apr 3, 2013
Commits on Mar 22, 2013
  1. Merge pull request #120 from basho/adt-msg-has-datetime

    Improve the performance of the file backend
    Vagabond committed Mar 22, 2013
Commits on Mar 19, 2013
  1. Merge pull request #124 from DeadZen/dz-lager-colors

    This change implements a color spectrum for severity levels, disabled by default.
    Vagabond committed Mar 19, 2013
  2. Merge pull request #121 from basho/adt-pdict-metadata

    Allow storage of persistant per-process lager metadata
    Vagabond committed Mar 19, 2013
Commits on Mar 16, 2013
  1. Improve the performance of the file backend

    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.
    Vagabond committed Mar 12, 2013
Commits on Mar 15, 2013
  1. Allow storage of persistant per-process lager metadata

    For persistant processes with some immutable metadata (riak vnode and
    the vnode ID, for example), implement lager:md/0 and lager:md/1 for
    getting/setting such metadata into the process dictionary.
    
    Such metadata is automatically included in any lager message metadata,
    so you can just set it in your init() function or whatever and not have
    to worry about passing the data around and using it in every lager call.
    Vagabond committed Mar 15, 2013
  2. Correct some dialyzer warnings

    Vagabond committed Mar 15, 2013
  3. Merge pull request #118 from basho/adt-skip-fast

    In code generated by the parse_transform skip unloggable messages fast
    Vagabond committed Mar 15, 2013
  4. In code generated by the parse_transform skip unloggable messages fast

    Originally an idea that Dizzy forwarded to me from Tony Rogvall.
    Basicially all the work lager does gathering metadata and stuff is
    wrapped in a case statement that fails-fast if the message is definitely
    not going to be logged; the severity isn't currently being consumed and
    there's no traces installed.
    
    In my simple test, logging 1 million debug messages, when the debug
    level is not being consumed, goes from taking 2.99 seconds to 1.21
    seconds with this change.
    
    Also, lager pre 1.0 actually had something similar to this, but it was
    removed during a refactor and never re-added.
    Vagabond committed Mar 12, 2013
Commits on Mar 14, 2013
  1. Merge pull request #117 from basho/adt-sync-switch

    Switch between gen_event notify/sync_notify based on message queue length
    Vagabond committed Mar 14, 2013
  2. Add a test for async_threshold

    Vagabond committed Mar 14, 2013