NAME
    Dir::Write::Rotate - Write files to a directory, with rotate options

VERSION
    This document describes version 0.004 of Dir::Write::Rotate (from Perl
    distribution Dir-Write-Rotate), released on 2020-11-17.

SYNOPSIS
     use Dir::Write::Rotate;

     my $dwr = Dir::Write::Rotate->new(
         path               => 'somedir.log',            # required
         filename_pattern   => '%Y-%m-%d-%H%M%S.pid-%{pid}.%{ext}', # optional
         filename_sub       => sub { ... },              # optional
         max_size           => undef,                    # optional
         max_files          => undef,                    # optional
         max_age            => undef,                    # optional
         rotate_probability => 0.25,                     # optional
     );

     # will write to a file in the dir and return its name
     $dwr->write("some\ncontents\n");

    To limit total size of files in the directory, e.g. 10MB, set "max_size"
    to 10*1024*1024. To limit number of files, e.g. 5000, set "max_files" to
    5000. To keep only files that are at most 10 days old, set "max_age" to
    10*24*3600.

DESCRIPTION
    This module provides a simple object for writing files to directory.
    There are options to delete older files to keep the size of the
    directory in check.

METHODS
  new
    Syntax: $dwr = Dir::Write::Rotate->new(%args);

    Constructor. Arguments:

    *   path => str

        The directory path to write to. Must already exist.

    *   filename_pattern => str

        Names to give to each file, expressed in pattern a la strftime()'s.
        Optional. Default is '%Y-%m-%d-%H%M%S.pid-%{pid}.%{ext}'. Time is
        expressed in local time.

        If file of the same name already exists, a suffix ".1", ".2", and so
        on will be appended.

        Available pattern:

        %Y - 4-digit year number, e.g. 2009
        %y - 2-digit year number, e.g. 09 for year 2009
        %m - 2-digit month, e.g. 04 for April
        %d - 2-digit day of month, e.g. 28
        %H - 2-digit hour, e.g. 01
        %M - 2-digit minute, e.g. 57
        %S - 2-digit second, e.g. 59
        %z - the time zone as hour offset from GMT
        %Z - the time zone or name or abbreviation
        %{pid} - Process ID
        %{ext} - Guessed file extension
                Try to detect appropriate file extension based on the
                content using File::LibMagic (if that module is available).
                For example, if message message looks like an HTML document,
                then 'html'. If File::LibMagic is not available or type
                cannot be detected, defaults to 'log'.

        %% - literal '%' character

    *   filename_sub => code

        A more generic mechanism for filename_pattern. If filename_sub is
        given, filename_pattern will be ignored. The code will be called
        with the same arguments as log_message() and is expected to return a
        filename. Will die if code returns undef.

    *   max_size => num

        Maximum total size of files, in bytes. After the size is surpassed,
        oldest files (based on ctime) will be deleted. Optional. Default is
        undefined, which means unlimited.

    *   max_files => int

        Maximum number of files. After this number is surpassed, oldest
        files (based on ctime) will be deleted. Optional. Default is
        undefined, which means unlimited.

    *   max_age => num

        Maximum age of files (based on ctime), in seconds. After the age is
        surpassed, files older than this age will be deleted. Optional.
        Default is undefined, which means unlimited.

    *   rotate_probability => num

        A number between 0 and 1 which specifies the probability that
        write() will call rotate(). This is a balance between performance
        and rotate size accuracy. 1 means always rotate, 0 means never
        rotate. Optional. Default is 0.25.

  write
    Syntax: $dwr->write($msg) => $filename

    Write a file with content $msg.

  rotate
    Will be called automatically by write.

ENVIRONMENT
  DIR_WRITE_ROTATE_DEBUG
    Bool. If set to true, will print debug messages to stderr (particularly
    when instantiated and when deleting rotated files).

HOMEPAGE
    Please visit the project's homepage at
    <https://metacpan.org/release/Dir-Write-Rotate>.

SOURCE
    Source repository is at
    <https://github.com/perlancar/perl-Dir-Write-Rotate>.

BUGS
    Please report any bugs or feature requests on the bugtracker website
    <https://rt.cpan.org/Public/Dist/Display.html?Name=Dir-Write-Rotate>

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.

SEE ALSO
    File::Write::Rotate

AUTHOR
    perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2020, 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.

