php-vn-lib/lib/log.php

69 lines
1.2 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;
}
}