mLogger - p
rosta klasa do logowania (zapisywania) błędów, komunikatów itp.Strona projektu:
http://www.michell.pl/moje-projekty/mlogger/Kod źródłowy:<?php
/**
* @package mLogger
* @author Michell `b4x` Hoduń
* @copyright (c) 2009 Michell `b4x` Hoduń <mhodun@gmail.com>
* @description Klasa odpowiedzialna za logowanie różnych informacji.
* @url <a href="http://www.michell.pl/moje-projekty/mlogger/" target="_blank">http://www.michell.pl/moje-projekty/mlogger/</a>
* @version 1.0
*/
class mLogger
{
protected
static $_mLogger_instance; (
'log_dir' => 'mlogger_logs', // Folder z logami
'date_format' => 'd/m/Y H:i:s', // Format daty logów via date()
'file_format' => 'd-m-Y', // Format nazewnictwa plików via date()
'file_extension' => '.txt', // Rozszerzenie logów
'log_mode' => 0, // 0 = Zapisuj wszystko, możesz ustawić dowolną liczbę dla logów.
'log_template' => '[:date: - :message: | level: :log_level: | :ip: <-> :req_url:]', // Szablon logów
);
public function instance
($config = array()) {
if(mLogger::$_mLogger_instance === NULL)
{
mLogger::$_mLogger_instance = new mLogger ($config);
}
return mLogger::$_mLogger_instance;
}
public function __construct
($config = array()) {
if (! file_exists(self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR
.date(self::$_mLogger_config['file_format']).self::$_mLogger_config['file_extension'])) {
try
{
self::create_files();
}
catch (Exception $e)
{
}
}
foreach ($config as $k => $v)
{
self::$_mLogger_config[$k] = $v;
}
}
public static function add_log
($message, $mode = 1
) {
mLogger
::$_mLogger_messages[$mode][] = array (
'date' => date(self::$_mLogger_config['date_format']), 'message' => $message,
'mode' => $mode,
);
}
protected
static function save_to_file
($logs = array()) {
$file_text = '';
foreach ($logs as $log)
{
$file_text .= strtr (self::$_mLogger_config['log_template'], array (
':date:' => date(self::$_mLogger_config['date_format']), ':message:' => $log['message'],
':ip:' => $_SERVER['REMOTE_ADDR'],
':req_url:' => $_SERVER['REQUEST_URI'],
':log_level:' => $log['mode'],
))."\r\n";
}
@file_put_contents
(self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR
.date(self::$_mLogger_config['file_format']).self::$_mLogger_config['file_extension'], file_get_contents(self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR
.date(self::$_mLogger_config['file_format']).self::$_mLogger_config['file_extension']).$file_text); }
protected
static function create_files
() {
if(! is_writable (self::$_mLogger_config['log_dir'])) throw
new Exception
('Log dir: <strong>'.self::$_mLogger_config['log_dir'].'</strong> is not writable'); if(!@touch (self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR
.date(self::$_mLogger_config['file_format']).self::$_mLogger_config['file_extension'])) throw
new Exception
('Can\'t create log file: <strong>'.self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR
.self::$_mLogger_config['file_format'].'</strong> — check chmod and try again.'); }
public function __destruct()
{
if(self::$_mLogger_config['log_mode'] === 0)
{
foreach (self::$_mLogger_messages as $message_mode)
{
foreach ($message_mode as $message) $messages[] = $message;
}
}
else
{
$messages = self::$_mLogger_messages[self::$_mLogger_config['log_mode']];
}
self::save_to_file ($messages);
}
}
?>
Przykładowe użycie klasy:<?php
require 'mLogger.php';
// Przykładowa konfiguracja
(
'log_dir' => dirname(__FILE__).DIRECTORY_SEPARATOR
.'mlogger_logs', // Absolutna ścieżka do katalogu z logami 'log_mode' => 0 // 0 = Zapisuj wszystko, możesz ustawić dowolną liczbę dla logów.
));
// Przykładowe użycie klasy
mLogger::instance()->add_log ('mLogger working!', 1);
?>
Klasę wraz z przykładem użycia można pobrać pod następującym adresem:
http://www.michell.pl/sources/mLogger/mLogger_1.0.rar