👁 查看:sfFileLogger.class.php
路径:/virtual/bigbrother/sns/lib/symfony/log/sfFileLogger.class.php
大小:3.55 KB · 修改:2010-08-11 06:11:37 · 权限:0644 · 可写
<?php
/*
* This file is part of the symfony package.
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* sfFileLogger logs messages in a file.
*
* @package symfony
* @subpackage log
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @version SVN: $Id: sfFileLogger.class.php 10964 2008-08-19 18:33:50Z fabien $
*/
class sfFileLogger extends sfLogger
{
protected
$type = 'symfony',
$format = '%time% %type% [%priority%] %message%%EOL%',
$timeFormat = '%b %d %H:%M:%S',
$fp = null;
/**
* Initializes this logger.
*
* Available options:
*
* - file: The file path or a php wrapper to log messages
* You can use any support php wrapper. To write logs to the Apache error log, use php://stderr
* - format: The log line format (default to %time% %type% [%priority%] %message%%EOL%)
* - time_format: The log time strftime format (default to %b %d %H:%M:%S)
* - dir_mode: The mode to use when creating a directory (default to 0777)
* - file_mode: The mode to use when creating a file (default to 0666)
*
* @param sfEventDispatcher $dispatcher A sfEventDispatcher instance
* @param array $options An array of options.
*
* @return Boolean true, if initialization completes successfully, otherwise false.
*/
public function initialize(sfEventDispatcher $dispatcher, $options = array())
{
if (!isset($options['file']))
{
throw new sfConfigurationException('You must provide a "file" parameter for this logger.');
}
if (isset($options['format']))
{
$this->format = $options['format'];
}
if (isset($options['time_format']))
{
$this->timeFormat = $options['time_format'];
}
if (isset($options['type']))
{
$this->type = $options['type'];
}
$dir = dirname($options['file']);
if (!is_dir($dir))
{
mkdir($dir, isset($options['dir_mode']) ? $options['dir_mode'] : 0777, true);
}
$fileExists = file_exists($options['file']);
if (!is_writable($dir) || ($fileExists && !is_writable($options['file'])))
{
throw new sfFileException(sprintf('Unable to open the log file "%s" for writing.', $options['file']));
}
$this->fp = fopen($options['file'], 'a');
if (!$fileExists)
{
chmod($options['file'], isset($options['file_mode']) ? $options['file_mode'] : 0666);
}
return parent::initialize($dispatcher, $options);
}
/**
* Logs a message.
*
* @param string $message Message
* @param string $priority Message priority
*/
protected function doLog($message, $priority)
{
flock($this->fp, LOCK_EX);
fwrite($this->fp, strtr($this->format, array(
'%type%' => $this->type,
'%message%' => $message,
'%time%' => strftime($this->timeFormat),
'%priority%' => $this->getPriority($priority),
'%EOL%' => PHP_EOL,
)));
flock($this->fp, LOCK_UN);
}
/**
* Returns the priority string to use in log messages.
*
* @param string $priority The priority constant
*
* @return string The priority to use in log messages
*/
protected function getPriority($priority)
{
return sfLogger::getPriorityName($priority);
}
/**
* Executes the shutdown method.
*/
public function shutdown()
{
if (is_resource($this->fp))
{
fclose($this->fp);
}
}
}