<?php

namespace MailjetWp\Analog\Handler;

/**
 * Append to the specified log file. Does the same thing as the default
 * handling.
 *
 * Usage:
 *
 *     $log_file = 'log.txt';
 *     Analog::handler (Analog\Handler\File::init ($log_file));
 *     
 *     Analog::log ('Log me');
 *
 * Note: Uses Analog::$format for the appending format.
 */
class File
{
    public static function init($file)
    {
        return function ($info, $buffered = \false) use($file) {
            $f = \fopen($file, 'a+');
            if (!$f) {
                throw new \LogicException('Could not open file for writing');
            }
            if (!\flock($f, \LOCK_EX)) {
                throw new \RuntimeException('Could not lock file');
            }
            \fwrite($f, $buffered ? $info : \vsprintf(\MailjetWp\Analog\Analog::$format, $info));
            \flock($f, \LOCK_UN);
            \fclose($f);
        };
    }
}
