php-vn-lib/lib/log.php

75 lines
1.3 KiB
PHP

<?php
namespace Vn\Lib;
class Log
{
private static $fd = NULL;
private static $count;
private static $file;
static function init ($file)
{
self::close ();
self::$file = $file;
self::$fd = fopen ($file, 'a');
self::rename ();
set_error_handler ('Vn\Lib\Log::phpHandler', E_ALL);
}
static function phpHandler ($no, $str, $file, $line, $context)
{
self::write ('PHP: %s:%d: %s', $file, $line, $str);
switch ($no)
{
case E_ERROR:
case E_PARSE:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
self::write ('PHP: Could not continue, exiting.');
self::close ();
exit (1);
}
return TRUE;
}
static function close ()
{
if (self::$fd != NULL)
{
fclose (self::$fd);
self::$fd = NULL;
}
}
static function write ()
{
if (self::$fd == NULL)
return;
if (self::$count > 5000)
self::rename ();
self::$count += fprintf (self::$fd, "%s: %s\n"
,strftime ('%Y-%m-%d %T')
,call_user_func_array ('sprintf', func_get_args ())
);
}
static private function rename ()
{
if (filesize (self::$file) > 1000000)
{
self::close ();
$rename = self::$file.'.1';
if (file_exists ($rename))
unlink ($rename);
rename (self::$file, $rename);
self::$fd = fopen ($file, 'a');
}
self::$count = 0;
}
}