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 независимо от часового пояса по умолчанию.

Другие вопросы по тегам