Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
42.86% |
6 / 14 |
CRAP | |
60.56% |
43 / 71 |
LoggerAppenderFile | |
0.00% |
0 / 1 |
|
42.86% |
6 / 14 |
76.09 | |
60.56% |
43 / 71 |
getTargetFile() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
openFile() | |
0.00% |
0 / 1 |
11.03 | |
56.52% |
13 / 23 |
|||
write($string) | |
0.00% |
0 / 1 |
4.18 | |
77.78% |
7 / 9 |
|||
writeWithLocking($string) | |
0.00% |
0 / 1 |
4.12 | |
50.00% |
5 / 10 |
|||
writeWithoutLocking($string) | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
activateOptions() | |
0.00% |
0 / 1 |
2.26 | |
60.00% |
3 / 5 |
|||
close() | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
append(LoggerLoggingEvent $event) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
setFile($file) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getFile() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getAppend() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
setAppend($append) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
setFileName($fileName) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getFileName() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
<?php | |
/** | |
* Licensed to the Apache Software Foundation (ASF) under one or more | |
* contributor license agreements. See the NOTICE file distributed with | |
* this work for additional information regarding copyright ownership. | |
* The ASF licenses this file to You under the Apache License, Version 2.0 | |
* (the "License"); you may not use this file except in compliance with | |
* the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
/** | |
* LoggerAppenderFile appends log events to a file. | |
* | |
* This appender uses a layout. | |
* | |
* ## Configurable parameters: ## | |
* | |
* - **file** - Path to the target file. Relative paths are resolved based on | |
* the working directory. | |
* - **append** - If set to true, the appender will append to the file, | |
* otherwise the file contents will be overwritten. | |
* | |
* @version $Revision: 1382274 $ | |
* @package log4php | |
* @subpackage appenders | |
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 | |
* @link http://logging.apache.org/log4php/docs/appenders/file.html Appender documentation | |
*/ | |
class LoggerAppenderFile extends LoggerAppender { | |
/** | |
* If set to true, the file is locked before appending. This allows | |
* concurrent access. However, appending without locking is faster so | |
* it should be used where appropriate. | |
* | |
* TODO: make this a configurable parameter | |
* | |
* @var boolean | |
*/ | |
protected $locking = true; | |
/** | |
* If set to true, appends to file. Otherwise overwrites it. | |
* @var boolean | |
*/ | |
protected $append = true; | |
/** | |
* Path to the target file. | |
* @var string | |
*/ | |
protected $file; | |
/** | |
* The file resource. | |
* @var resource | |
*/ | |
protected $fp; | |
/** | |
* Helper function which can be easily overriden by daily file appender. | |
*/ | |
protected function getTargetFile() { | |
return $this->file; | |
} | |
/** | |
* Acquires the target file resource, creates the destination folder if | |
* necessary. Writes layout header to file. | |
* | |
* @return boolean FALSE if opening failed | |
*/ | |
protected function openFile() { | |
$file = $this->getTargetFile(); | |
// Create the target folder if needed | |
if(!is_file($file)) { | |
$dir = dirname($file); | |
if(!is_dir($dir)) { | |
$success = mkdir($dir, 0777, true); | |
if ($success === false) { | |
$this->warn("Failed creating target directory [$dir]. Closing appender."); | |
$this->closed = true; | |
return false; | |
} | |
} | |
} | |
$mode = $this->append ? 'a' : 'w'; | |
$this->fp = fopen($file, $mode); | |
if ($this->fp === false) { | |
$this->warn("Failed opening target file. Closing appender."); | |
$this->fp = null; | |
$this->closed = true; | |
return false; | |
} | |
// Required when appending with concurrent access | |
if($this->append) { | |
fseek($this->fp, 0, SEEK_END); | |
} | |
// Write the header | |
$this->write($this->layout->getHeader()); | |
} | |
/** | |
* Writes a string to the target file. Opens file if not already open. | |
* @param string $string Data to write. | |
*/ | |
protected function write($string) { | |
// Lazy file open | |
if(!isset($this->fp)) { | |
if ($this->openFile() === false) { | |
return; // Do not write if file open failed. | |
} | |
} | |
if ($this->locking) { | |
$this->writeWithLocking($string); | |
} else { | |
$this->writeWithoutLocking($string); | |
} | |
} | |
protected function writeWithLocking($string) { | |
if(flock($this->fp, LOCK_EX)) { | |
if(fwrite($this->fp, $string) === false) { | |
$this->warn("Failed writing to file. Closing appender."); | |
$this->closed = true; | |
} | |
flock($this->fp, LOCK_UN); | |
} else { | |
$this->warn("Failed locking file for writing. Closing appender."); | |
$this->closed = true; | |
} | |
} | |
protected function writeWithoutLocking($string) { | |
if(fwrite($this->fp, $string) === false) { | |
$this->warn("Failed writing to file. Closing appender."); | |
$this->closed = true; | |
} | |
} | |
public function activateOptions() { | |
if (empty($this->file)) { | |
$this->warn("Required parameter 'file' not set. Closing appender."); | |
$this->closed = true; | |
return; | |
} | |
} | |
public function close() { | |
if (is_resource($this->fp)) { | |
$this->write($this->layout->getFooter()); | |
fclose($this->fp); | |
} | |
$this->fp = null; | |
$this->closed = true; | |
} | |
public function append(LoggerLoggingEvent $event) { | |
$this->write($this->layout->format($event)); | |
} | |
/** | |
* Sets the 'file' parameter. | |
* @param string $file | |
*/ | |
public function setFile($file) { | |
$this->setString('file', $file); | |
} | |
/** | |
* Returns the 'file' parameter. | |
* @return string | |
*/ | |
public function getFile() { | |
return $this->file; | |
} | |
/** | |
* Returns the 'append' parameter. | |
* @return boolean | |
*/ | |
public function getAppend() { | |
return $this->append; | |
} | |
/** | |
* Sets the 'append' parameter. | |
* @param boolean $append | |
*/ | |
public function setAppend($append) { | |
$this->setBoolean('append', $append); | |
} | |
/** | |
* Sets the 'file' parmeter. Left for legacy reasons. | |
* @param string $fileName | |
* @deprecated Use setFile() instead. | |
*/ | |
public function setFileName($fileName) { | |
$this->setFile($fileName); | |
} | |
/** | |
* Returns the 'file' parmeter. Left for legacy reasons. | |
* @return string | |
* @deprecated Use getFile() instead. | |
*/ | |
public function getFileName() { | |
return $this->getFile(); | |
} | |
} |