/[cvs]/nfo/php/libs/net.php.pear/Log/file.php
ViewVC logotype

Contents of /nfo/php/libs/net.php.pear/Log/file.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations)
Wed Feb 5 21:48:31 2003 UTC (21 years, 5 months ago) by joko
Branch: MAIN
Changes since 1.1: +241 -100 lines
+ updated to Log-1.5.3

1 <?php
2 // +-----------------------------------------------------------------------+
3 // | Copyright (c) 2002 Richard Heyes |
4 // | All rights reserved. |
5 // | |
6 // | Redistribution and use in source and binary forms, with or without |
7 // | modification, are permitted provided that the following conditions |
8 // | are met: |
9 // | |
10 // | o Redistributions of source code must retain the above copyright |
11 // | notice, this list of conditions and the following disclaimer. |
12 // | o Redistributions in binary form must reproduce the above copyright |
13 // | notice, this list of conditions and the following disclaimer in the |
14 // | documentation and/or other materials provided with the distribution.|
15 // | o The names of the authors may not be used to endorse or promote |
16 // | products derived from this software without specific prior written |
17 // | permission. |
18 // | |
19 // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
20 // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
21 // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
22 // | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
23 // | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
24 // | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
25 // | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
26 // | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
27 // | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
28 // | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
29 // | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 // | |
31 // +-----------------------------------------------------------------------+
32 // | Author: Richard Heyes <richard@phpguru.org> |
33 // | Jon Parise <jon@php.net> |
34 // +-----------------------------------------------------------------------+
35 //
36 // $Id: file.php,v 1.14 2002/12/02 05:23:00 jon Exp $
37
38 /**
39 * The Log_file class is a concrete implementation of the Log::
40 * abstract class which writes message to a text file. This is based
41 * on the previous Log_file class by Jon Parise.
42 *
43 * @author Richard Heyes <richard@php.net>
44 * @version $Revision: 1.14 $
45 * @package Log
46 */
47 class Log_file extends Log
48 {
49 /**
50 * String holding the filename of the logfile.
51 * @var string
52 */
53 var $_filename;
54
55 /**
56 * No idea what this does.
57 * @var string (maybe)
58 */
59 var $_ident;
60
61 /**
62 * Maximum level to log
63 * @var integer
64 */
65 var $_maxLevel;
66
67 /**
68 * Integer holding the file handle.
69 * @var integer
70 */
71 var $_fp;
72
73 /**
74 * Integer (in octal) containing the logfile's permissions mode.
75 * @var integer
76 */
77 var $_mode = 0644;
78
79 /**
80 * Array holding the lines to log
81 * @var array
82 */
83 var $_logLines;
84
85 /**
86 * Boolean which if true will mean
87 * the lines are *NOT* written out.
88 */
89 var $_writeOut;
90
91 /**
92 * Creates a new logfile object.
93 *
94 * @param string $name The filename of the logfile.
95 * @param string $ident The identity string.
96 * @param array $conf The configuration array.
97 * @param int $maxLevel Maximum level at which to log.
98 * @access public
99 */
100 function Log_File($name, $ident = '', $conf = array(), $maxLevel = PEAR_LOG_DEBUG)
101 {
102 /* If a file mode has been provided, use it. */
103 if (!empty($conf['mode'])) {
104 $this->_mode = $conf['mode'];
105 }
106
107 if (!file_exists($name)) {
108 touch($name);
109 chmod($name, $this->_mode);
110 }
111
112 $this->_filename = realpath($name);
113 $this->_ident = $ident;
114 $this->_maxLevel = $maxLevel;
115
116 $this->_logLines = array();
117 $this->_writeOut = true;
118
119 $this->PEAR();
120 }
121
122 /**
123 * Destructor. This will write out any lines to the logfile, UNLESS the dontLog()
124 * method has been called, in which case it won't.
125 *
126 * @access private
127 */
128 function _Log_File()
129 {
130 $this->_PEAR();
131
132 if (!empty($this->_logLines) AND $this->_writeOut AND $this->_openLogfile()) {
133
134 foreach ($this->_logLines as $line) {
135 $this->_writeLine($line['message'], $line['priority'], $line['time']);
136 }
137
138 $this->_closeLogfile();
139 }
140 }
141
142 /**
143 * Adds a line to be logged. Adds it to the internal array and will only
144 * get written out when the destructor is called.
145 *
146 * @param string $message The textual message to be logged.
147 * @param string $priority The priority of the message. Valid
148 * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, PEAR_LOG_CRIT,
149 * PEAR_LOG_ERR, PEAR_LOG_WARNING, PEAR_LOG_NOTICE, PEAR_LOG_INFO, and
150 * PEAR_LOG_DEBUG. The default is PEAR_LOG_INFO.
151 * @return boolean True on success or false on failure.
152 * @access public
153 */
154 function log($message, $priority = PEAR_LOG_INFO)
155 {
156 // Abort early if the priority is above the maximum logging level.
157 if ($priority > $this->_maxLevel) {
158 return false;
159 }
160
161 // Add to loglines array
162 $this->_logLines[] = array('message' => $message, 'priority' => $priority, 'time' => strftime('%b %d %H:%M:%S'));
163
164 // Notify observers
165 $this->notifyAll(array('message' => $message, 'priority' => $priority));
166
167 return true;
168 }
169
170 /**
171 * This function will prevent the destructor from logging.
172 *
173 * @access public
174 */
175 function dontLog()
176 {
177 $this->_writeOut = false;
178 }
179
180 /**
181 * Function to force writing out of log *now*. Will clear the queue.
182 * Using this function does not cancel the writeout in the destructor.
183 * Handy for long running processes.
184 *
185 * @access public
186 */
187 function writeOut()
188 {
189 if (!empty($this->_logLines) AND $this->_openLogfile()) {
190
191 foreach ($this->_logLines as $line) {
192 $this->_writeLine($line['message'], $line['priority'], $line['time']);
193 }
194
195 $this->_logLines = array();
196 $this->_closeLogfile();
197 }
198 }
199
200 /**
201 * Opens the logfile for appending. File should always exist, as
202 * constructor will create it if it doesn't.
203 *
204 * @access private
205 */
206 function _openLogfile()
207 {
208 if (($this->_fp = @fopen($this->_filename, 'a')) == false) {
209 return false;
210 }
211
212 chmod($this->_filename, $this->_mode);
213
214 return true;
215 }
216
217 /**
218 * Closes the logfile file pointer.
219 *
220 * @access private
221 */
222 function _closeLogfile()
223 {
224 return fclose($this->_fp);
225 }
226
227 /**
228 * Writes a line to the logfile
229 *
230 * @param string $line The line to write
231 * @param integer $priority The priority of this line/msg
232 * @return integer Number of bytes written or -1 on error
233 * @access private
234 */
235 function _writeLine($line, $priority, $time)
236 {
237 return fwrite($this->_fp, sprintf("%s %s [%s] %s\r\n", $time, $this->_ident, $this->priorityToString($priority), $line));
238 }
239
240 } // End of class
241 ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed