log4php и часовой пояс
Кто-нибудь знает, возможно ли установить часовой пояс в конфигурации библиотеки log4php?
Я не видел никакой информации об этом в официальных документах, но log4j это реализовал.
Сейчас я полагаюсь на функцию php *date_default_timezone_set*, но я хотел оставить log4php, чтобы справиться с этим самостоятельно... Интересно, есть ли список дел для этого или мы должны полагаться на встроенную функцию сами.
Вот код, который у меня есть:
date_default_timezone_set("America/New_York");
require_once (dirname(__FILE__) . '/lib/log4php/Logger.php');
Logger::configure(
array(
'appenders' => array(
'default' => array(
'class' => 'LoggerAppenderRollingFile',
'layout' => array(
'class' => 'LoggerLayoutPattern',
'params' => array(
'conversionPattern' => '%d{Y-m-d H:i:s.u} [%t] %-5p - %m%n'
)
),
'params' => array(
'file' => '/var/log/myapp/myapp.' . date('Y-m-d') . '.log',
'maxFileSize' => '1MB',
'maxBackupIndex' => 10,
),
),
),
'rootLogger' => array(
'appenders' => array('default'),
),
)
);
$logger = Logger::getLogger('myapp');
for( $i=0; $i<5000; $i++ ) {
$logger->info("This is a test [${i}].");
}
В случае, если этот код обслуживает кого-то еще с подобной проблемой.
Быть в безопасности,
2 ответа
Определенный часовой пояс по умолчанию принадлежит полностью работающему php-приложению.
Кроме того, вы не очень ясно заявляете, что ожидаете от log4php. В проекте есть все, от рассылки до трекера - вы можете присылать свои пожелания.
У меня была похожая проблема. Вы можете записать дату и время для UTC/GMT в log4php, изменив одну строку кода в модуле.
Вот как я это сделал. Зайдите в модуль и найдите файл LoggerPatternConverterDate.php
,
cd log4php/pattern/
vim LoggerPatternConverterDate.php
Найти private
функция date($format, $utimestamp)
(Строка 84 для меня) и измените строку кода, которая возвращается.
Это:return date(preg_replace('`(?<!\\\\)u`', $ms, $format), $timestamp);
становится:return gmdate(preg_replace('`(?<!\\\\)u`', $ms, $format), $timestamp);
Также найдите файл: log4php/appenders/LoggerAppenderDailyFile.php
и измените следующую строку:
Это:return date($this->datePattern, $timestamp);
становится:return gmdate($this->datePattern, $timestamp);
ПРИМЕЧАНИЕ. Единственное, что изменилось, - это функция, используемая для форматирования строки даты. date()
зависит от часового пояса, который вы установили с помощью date_default_timezone_set
в то время как gmdate()
форматирует дату и время в формате UTC/GMT независимо от часового пояса по умолчанию.