Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
 
3
/*
4
 * This file is part of the symfony package.
5
 * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
 
11
/**
12
 * sfFileLogger logs messages in a file.
13
 *
14
 * @package    symfony
15
 * @subpackage log
16
 * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
17
 * @version    SVN: $Id: sfFileLogger.class.php 10964 2008-08-19 18:33:50Z fabien $
18
 */
19
class sfFileLogger extends sfLogger
20
{
21
  protected
22
    $type       = 'symfony',
23
    $format     = '%time% %type% [%priority%] %message%%EOL%',
24
    $timeFormat = '%b %d %H:%M:%S',
25
    $fp         = null;
26
 
27
  /**
28
   * Initializes this logger.
29
   *
30
   * Available options:
31
   *
32
   * - file:        The file path or a php wrapper to log messages
33
   *                You can use any support php wrapper. To write logs to the Apache error log, use php://stderr
34
   * - format:      The log line format (default to %time% %type% [%priority%] %message%%EOL%)
35
   * - time_format: The log time strftime format (default to %b %d %H:%M:%S)
36
   * - dir_mode:    The mode to use when creating a directory (default to 0777)
37
   * - file_mode:   The mode to use when creating a file (default to 0666)
38
   *
39
   * @param  sfEventDispatcher $dispatcher  A sfEventDispatcher instance
40
   * @param  array             $options     An array of options.
41
   *
42
   * @return Boolean      true, if initialization completes successfully, otherwise false.
43
   */
44
  public function initialize(sfEventDispatcher $dispatcher, $options = array())
45
  {
46
    if (!isset($options['file']))
47
    {
48
      throw new sfConfigurationException('You must provide a "file" parameter for this logger.');
49
    }
50
 
51
    if (isset($options['format']))
52
    {
53
      $this->format = $options['format'];
54
    }
55
 
56
    if (isset($options['time_format']))
57
    {
58
      $this->timeFormat = $options['time_format'];
59
    }
60
 
61
    if (isset($options['type']))
62
    {
63
      $this->type = $options['type'];
64
    }
65
 
66
    $dir = dirname($options['file']);
67
    if (!is_dir($dir))
68
    {
69
      mkdir($dir, isset($options['dir_mode']) ? $options['dir_mode'] : 0777, true);
70
    }
71
 
72
    $fileExists = file_exists($options['file']);
73
    if (!is_writable($dir) || ($fileExists && !is_writable($options['file'])))
74
    {
75
      throw new sfFileException(sprintf('Unable to open the log file "%s" for writing.', $options['file']));
76
    }
77
 
78
    $this->fp = fopen($options['file'], 'a');
79
    if (!$fileExists)
80
    {
81
      chmod($options['file'], isset($options['file_mode']) ? $options['file_mode'] : 0666);
82
    }
83
 
84
    return parent::initialize($dispatcher, $options);
85
  }
86
 
87
  /**
88
   * Logs a message.
89
   *
90
   * @param string $message   Message
91
   * @param string $priority  Message priority
92
   */
93
  protected function doLog($message, $priority)
94
  {
95
    flock($this->fp, LOCK_EX);
96
    fwrite($this->fp, strtr($this->format, array(
97
      '%type%'     => $this->type,
98
      '%message%'  => $message,
99
      '%time%'     => strftime($this->timeFormat),
100
      '%priority%' => $this->getPriority($priority),
101
      '%EOL%'      => PHP_EOL,
102
    )));
103
    flock($this->fp, LOCK_UN);
104
  }
105
 
106
  /**
107
   * Returns the priority string to use in log messages.
108
   *
109
   * @param  string $priority The priority constant
110
   *
111
   * @return string The priority to use in log messages
112
   */
113
  protected function getPriority($priority)
114
  {
115
    return sfLogger::getPriorityName($priority);
116
  }
117
 
118
  /**
119
   * Executes the shutdown method.
120
   */
121
  public function shutdown()
122
  {
123
    if (is_resource($this->fp))
124
    {
125
      fclose($this->fp);
126
    }
127
  }
128
}