NAME
    Log::ger::Output::File - Send logs to file

VERSION
    version 0.011

SYNOPSIS
     use Log::ger::Output 'File' => (
         path => '/path/to/file.log', # or handle => $fh
         lazy => 1,                   # optional, default 0
     );
     use Log::ger;

     log_warn "blah ...";

DESCRIPTION
    This is a plugin to send logs to a file, with some options. File will be
    opened with append mode. A lock can be requested at every write, or when
    opening the file. By default, filehandle will be flushed after each log.

CONFIGURATION
  path => filename
    Specify filename to open. File will be opened in append mode.

  handle => glob|obj
    Alternatively, you can provide an already opened filehandle.

  autoflush => bool (default: 1)
    Can be turned off if you need more speed, but note that under the
    absence of autoflush, partial log messages might be written.

  lazy => bool (default: 0)
    If set to true, will only open the file right before we need to log the
    message (instead of during output initialization). If you have lots of
    applications that use file logging, this can avoid the proliferation of
    zero-sized log files. On the other hand, the application bears an
    additional risk of failing to open a log file in the middle of the run.

  lock_mode => str (none|write|exclusive, default: none)
    If you set this to "none" (the default), no locking is done. When there
    are several applications/processes that output log to the same file,
    messages from applications might get jumbled, e.g. partial message from
    application 1 is followed by message from application 2 and 3, then
    continued by the rest of message from application 1, and so on.

    If you set this to "write", an attempt to acquire an exclusive lock to
    "<PATH>.lck" will be made. If all logger processes use locking, this
    makes it safe to log to the same file. However, this increases the
    overhead of writing the log which will become non-negligible once you
    log to files at the rate of thousands per second. Also, when a locking
    attempt fails after 60 seconds, this module will die. "autoflush" is
    automatically turned on under this locking mode.

    If you set this to "exclusive", locking will be attempted only once
    during the output initialization.

TODO
    When "lock_mode" is set to "exclusive", and user switches output, we
    have not released the lock.

SEE ALSO
    Log::ger

    Log::ger::Output::SimpleFile is a simpler output plugin: no locking,
    autoflush, or lazy options.

    Log::ger::Output::FileWriteRotate offers autorotation feature.

AUTHOR
    perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2020, 2019, 2017 by perlancar@cpan.org.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

