pictcode / lib / Cake / Log / Engine / SyslogLog.php @ 0b1b8047
履歴 | 表示 | アノテート | ダウンロード (4.195 KB)
1 | 635eef61 | spyder1211 | <?php
|
---|---|---|---|
2 | /**
|
||
3 | * Syslog logger engine for CakePHP
|
||
4 | *
|
||
5 | * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||
6 | * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
7 | *
|
||
8 | * Licensed under The MIT License
|
||
9 | * For full copyright and license information, please see the LICENSE.txt
|
||
10 | * Redistributions of files must retain the above copyright notice.
|
||
11 | *
|
||
12 | * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
13 | * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project
|
||
14 | * @package Cake.Log.Engine
|
||
15 | * @since CakePHP(tm) v 2.4
|
||
16 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||
17 | */
|
||
18 | |||
19 | App::uses('BaseLog', 'Log/Engine'); |
||
20 | |||
21 | /**
|
||
22 | * Syslog stream for Logging. Writes logs to the system logger
|
||
23 | *
|
||
24 | * @package Cake.Log.Engine
|
||
25 | */
|
||
26 | class SyslogLog extends BaseLog { |
||
27 | |||
28 | /**
|
||
29 | * By default messages are formatted as:
|
||
30 | * type: message
|
||
31 | *
|
||
32 | * To override the log format (e.g. to add your own info) define the format key when configuring
|
||
33 | * this logger
|
||
34 | *
|
||
35 | * If you wish to include a prefix to all messages, for instance to identify the
|
||
36 | * application or the web server, then use the prefix option. Please keep in mind
|
||
37 | * the prefix is shared by all streams using syslog, as it is dependent of
|
||
38 | * the running process. For a local prefix, to be used only by one stream, you
|
||
39 | * can use the format key.
|
||
40 | *
|
||
41 | * ## Example:
|
||
42 | *
|
||
43 | * ```
|
||
44 | * CakeLog::config('error', array(
|
||
45 | * 'engine' => 'Syslog',
|
||
46 | * 'types' => array('emergency', 'alert', 'critical', 'error'),
|
||
47 | * 'format' => "%s: My-App - %s",
|
||
48 | * 'prefix' => 'Web Server 01'
|
||
49 | * ));
|
||
50 | * ```
|
||
51 | *
|
||
52 | * @var array
|
||
53 | */
|
||
54 | protected $_defaults = array( |
||
55 | 'format' => '%s: %s', |
||
56 | 'flag' => LOG_ODELAY, |
||
57 | 'prefix' => '', |
||
58 | 'facility' => LOG_USER |
||
59 | ); |
||
60 | |||
61 | /**
|
||
62 | * Used to map the string names back to their LOG_* constants
|
||
63 | *
|
||
64 | * @var array
|
||
65 | */
|
||
66 | protected $_priorityMap = array( |
||
67 | 'emergency' => LOG_EMERG, |
||
68 | 'alert' => LOG_ALERT, |
||
69 | 'critical' => LOG_CRIT, |
||
70 | 'error' => LOG_ERR, |
||
71 | 'warning' => LOG_WARNING, |
||
72 | 'notice' => LOG_NOTICE, |
||
73 | 'info' => LOG_INFO, |
||
74 | 'debug' => LOG_DEBUG |
||
75 | ); |
||
76 | |||
77 | /**
|
||
78 | * Whether the logger connection is open or not
|
||
79 | *
|
||
80 | * @var bool
|
||
81 | */
|
||
82 | protected $_open = false; |
||
83 | |||
84 | /**
|
||
85 | * Make sure the configuration contains the format parameter, by default it uses
|
||
86 | * the error number and the type as a prefix to the message
|
||
87 | *
|
||
88 | * @param array $config Options list.
|
||
89 | */
|
||
90 | public function __construct($config = array()) { |
||
91 | $config += $this->_defaults; |
||
92 | parent::__construct($config); |
||
93 | } |
||
94 | |||
95 | /**
|
||
96 | * Writes a message to syslog
|
||
97 | *
|
||
98 | * Map the $type back to a LOG_ constant value, split multi-line messages into multiple
|
||
99 | * log messages, pass all messages through the format defined in the configuration
|
||
100 | *
|
||
101 | * @param string $type The type of log you are making.
|
||
102 | * @param string $message The message you want to log.
|
||
103 | * @return bool success of write.
|
||
104 | */
|
||
105 | public function write($type, $message) { |
||
106 | if (!$this->_open) { |
||
107 | $config = $this->_config; |
||
108 | $this->_open($config['prefix'], $config['flag'], $config['facility']); |
||
109 | $this->_open = true; |
||
110 | } |
||
111 | |||
112 | $priority = LOG_DEBUG; |
||
113 | if (isset($this->_priorityMap[$type])) { |
||
114 | $priority = $this->_priorityMap[$type]; |
||
115 | } |
||
116 | |||
117 | $messages = explode("\n", $message); |
||
118 | foreach ($messages as $message) { |
||
119 | $message = sprintf($this->_config['format'], $type, $message); |
||
120 | $this->_write($priority, $message); |
||
121 | } |
||
122 | |||
123 | return true; |
||
124 | } |
||
125 | |||
126 | /**
|
||
127 | * Extracts the call to openlog() in order to run unit tests on it. This function
|
||
128 | * will initialize the connection to the system logger
|
||
129 | *
|
||
130 | * @param string $ident the prefix to add to all messages logged
|
||
131 | * @param int $options the options flags to be used for logged messages
|
||
132 | * @param int $facility the stream or facility to log to
|
||
133 | * @return void
|
||
134 | */
|
||
135 | protected function _open($ident, $options, $facility) { |
||
136 | openlog($ident, $options, $facility); |
||
137 | } |
||
138 | |||
139 | /**
|
||
140 | * Extracts the call to syslog() in order to run unit tests on it. This function
|
||
141 | * will perform the actual write in the system logger
|
||
142 | *
|
||
143 | * @param int $priority Message priority.
|
||
144 | * @param string $message Message to log.
|
||
145 | * @return bool
|
||
146 | */
|
||
147 | protected function _write($priority, $message) { |
||
148 | return syslog($priority, $message); |
||
149 | } |
||
150 | |||
151 | /**
|
||
152 | * Closes the logger connection
|
||
153 | */
|
||
154 | public function __destruct() { |
||
155 | closelog();
|
||
156 | } |
||
157 | |||
158 | } |