Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
17 / 17 |
LoggerPatternConverterDate | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
7 | |
100.00% |
17 / 17 |
activateOptions() | |
100.00% |
1 / 1 |
4 | |
100.00% |
10 / 10 |
|||
convert(LoggerLoggingEvent $event) | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
date($format, $utimestamp) | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
<?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. | |
* | |
* @package log4php | |
*/ | |
/** | |
* Returns the date/time of the logging request. | |
* | |
* Option: the datetime format, as used by the date() function. If | |
* the option is not given, the default format 'c' will be used. | |
* | |
* There are several "special" values which can be given for this option: | |
* 'ISO8601', 'ABSOLUTE' and 'DATE'. | |
* | |
* @package log4php | |
* @subpackage pattern | |
* @version $Revision: 1326626 $ | |
* @since 2.3 | |
*/ | |
class LoggerPatternConverterDate extends LoggerPatternConverter { | |
const DATE_FORMAT_ISO8601 = 'c'; | |
const DATE_FORMAT_ABSOLUTE = 'H:i:s'; | |
const DATE_FORMAT_DATE = 'd M Y H:i:s.u'; | |
private $format = self::DATE_FORMAT_ISO8601; | |
private $specials = array( | |
'ISO8601' => self::DATE_FORMAT_ISO8601, | |
'ABSOLUTE' => self::DATE_FORMAT_ABSOLUTE, | |
'DATE' => self::DATE_FORMAT_DATE, | |
); | |
private $useLocalDate = false; | |
public function activateOptions() { | |
// Parse the option (date format) | |
if (!empty($this->option)) { | |
if(isset($this->specials[$this->option])) { | |
$this->format = $this->specials[$this->option]; | |
} else { | |
$this->format = $this->option; | |
} | |
} | |
// Check whether the pattern contains milliseconds (u) | |
if (preg_match('/(?<!\\\\)u/', $this->format)) { | |
$this->useLocalDate = true; | |
} | |
} | |
public function convert(LoggerLoggingEvent $event) { | |
if ($this->useLocalDate) { | |
return $this->date($this->format, $event->getTimeStamp()); | |
} | |
return date($this->format, $event->getTimeStamp()); | |
} | |
/** | |
* Currently, PHP date() function always returns zeros for milliseconds (u) | |
* on Windows. This is a replacement function for date() which correctly | |
* displays milliseconds on all platforms. | |
* | |
* It is slower than PHP date() so it should only be used if necessary. | |
*/ | |
private function date($format, $utimestamp) { | |
$timestamp = floor($utimestamp); | |
$ms = floor(($utimestamp - $timestamp) * 1000); | |
$ms = str_pad($ms, 3, '0', STR_PAD_LEFT); | |
return date(preg_replace('`(?<!\\\\)u`', $ms, $format), $timestamp); | |
} | |
} |