Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.
 All Data Structures Functions Variables Pages
ZurmoFileLogger.php
1 <?php
2  /*********************************************************************************
3  * Zurmo is a customer relationship management program developed by
4  * Zurmo, Inc. Copyright (C) 2017 Zurmo Inc.
5  *
6  * Zurmo is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Affero General Public License version 3 as published by the
8  * Free Software Foundation with the addition of the following permission added
9  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10  * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
11  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12  *
13  * Zurmo is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Affero General Public License along with
19  * this program; if not, see http://www.gnu.org/licenses or write to the Free
20  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  * 02110-1301 USA.
22  *
23  * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
24  * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
25  *
26  * The interactive user interfaces in original and modified versions
27  * of this program must display Appropriate Legal Notices, as required under
28  * Section 5 of the GNU Affero General Public License version 3.
29  *
30  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31  * these Appropriate Legal Notices must retain the display of the Zurmo
32  * logo and Zurmo copyright notice. If the display of the logo is not reasonably
33  * feasible for technical reasons, the Appropriate Legal Notices must display the words
34  * "Copyright Zurmo Inc. 2017. All rights reserved".
35  ********************************************************************************/
36 
40  class ZurmoFileLogger extends CApplicationComponent
41  {
45  protected $maxFileSize = 1024; // in KB
46 
50  protected $maxLogFiles = 5;
51 
55  protected $logPath;
56 
60  protected $logFile = 'fileLogger.log';
61 
65  protected $logs = '';
66 
71  public function init()
72  {
73  if ($this->getLogPath() === null)
74  {
75  $this->setLogPath(Yii::app()->getRuntimePath());
76  }
77  }
78 
82  public function getLogPath()
83  {
84  return $this->logPath;
85  }
86 
91  public function setLogPath($value)
92  {
93  $this->logPath = realpath($value);
94  if ($this->logPath === false || !is_dir($this->logPath) || !is_writable($this->logPath))
95  {
96  throw new CException(Zurmo::t('Default', 'CFileLogRoute.logPath "{path}" does not point to a valid directory. Make sure the directory exists and is writable by the Web server process.',
97  array('{path}' => $value)));
98  }
99  }
100 
104  public function getLogFile()
105  {
106  return $this->logFile;
107  }
108 
112  public function setLogFile($value)
113  {
114  $this->logFile = $value;
115  }
116 
120  public function getMaxFileSize()
121  {
122  return $this->maxFileSize;
123  }
124 
128  public function setMaxFileSize($value)
129  {
130  if (($this->maxFileSize = (int)$value) < 1)
131  {
132  $this->maxFileSize = 1;
133  }
134  }
135 
139  public function getMaxLogFiles()
140  {
141  return $this->maxLogFiles;
142  }
143 
147  public function setMaxLogFiles($value)
148  {
149  if (($this->maxLogFiles = (int)$value) < 1)
150  {
151  $this->maxLogFiles = 1;
152  }
153  }
154 
158  public function getLogs()
159  {
160  return $this->logs;
161  }
162 
166  public function setLogs($logs = '')
167  {
168  $this->logs = $logs;
169  }
170 
175  protected function addLog($data)
176  {
177  $logs = $this->getLogs();
178  $logs .= $data . PHP_EOL;
179  $this->setLogs($logs);
180  }
181 
186  public function log()
187  {
188  if (func_num_args() > 0)
189  {
190  foreach (func_get_args() as $argument)
191  {
192  if (is_array($argument))
193  {
194  $data = print_r($argument, true);
195  }
196  else
197  {
198  $data = $argument;
199  }
200  $this->addLog($data);
201  }
202  }
203  }
204 
208  public function processLogs()
209  {
210  $logFile = $this->getLogPath() . DIRECTORY_SEPARATOR . $this->getLogFile();
211  if (@filesize($logFile) > $this->getMaxFileSize()*1024)
212  {
213  $this->rotateFiles();
214  }
215  $fp = @fopen($logFile, 'a');
216  @flock($fp, LOCK_EX);
217  @fwrite($fp, $this->logs);
218  @flock($fp, LOCK_UN);
219  @fclose($fp);
220  }
221 
225  protected function rotateFiles()
226  {
227  $file = $this->getLogPath() . DIRECTORY_SEPARATOR . $this->getLogFile();
228  $max = $this->getMaxLogFiles();
229  for ($i = $max; $i>0; --$i)
230  {
231  $rotateFile = $file . '.' . $i;
232  if (is_file($rotateFile))
233  {
234  // suppress errors because it's possible multiple processes enter into this section
235  if ($i === $max)
236  {
237  @unlink($rotateFile);
238  }
239  else
240  {
241  @rename($rotateFile, $file . '.' . ($i + 1));
242  }
243  }
244  }
245  if (is_file($file))
246  {
247  @rename($file, $file . '.1'); // suppress errors because it's possible multiple processes enter into this section
248  }
249  }
250  }
251 ?>
Generated on Sat Oct 24 2020 07:10:25
Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.