Как вывести информацию об исключении в файл журнала с log4php? - PullRequest
8 голосов
/ 18 августа 2011

Я настроил log4php для входа в файл с помощью приложения LoggerAppenderRollingFile и макета LoggerLayoutTTCC . Однако, когда я регистрирую исключение, оно не отображает детали исключения, такие как трассировка стека, как я привык видеть в log4net.

Я быстро просмотрел код, и похоже, что LoggerAppenderMongoDB поддерживает отображение исключений с помощью метода formatThrowable , но я ничего не вижу похожи в других приложениях.

Я чувствую, что упускаю что-то очевидное. Есть ли что-то, что мне нужно настроить, чтобы распечатать эти данные в файл журнала? Нужно ли создавать собственный класс LoggerAppender? Или это можно сделать с помощью другого макета или с помощью специального средства визуализации?

Ответы [ 3 ]

2 голосов
/ 09 февраля 2013

К вашему сведению, теперь, когда LoggerLayoutTTCC устарело, вы можете использовать LoggerLayoutPattern с лучшей строкой формата для включения исключений.

<layout class="LoggerLayoutPattern">
   <param name="conversionPattern" value="%d{m/d/y H:i:s,u} [%t] %p %c %x - %m %newline%throwable" />
</layout>

<!-- %newline%throwable is the important part -->

См. Раздел «Исключения при ведении журнала» документации: http://logging.apache.org/log4php/docs/layouts/pattern.html#Logging_exceptions

1 голос
/ 13 сентября 2012

Я пришел к такому же выводу: похоже, что log4php что-то делает только с параметром $throwable в приложении LoggerAppenderMongoDB.php.

Базовый класс LoggerAppenderFile зависит от макета, LoggerLayoutTTCC, чтобы отформатировать сообщение (как и следовало ожидать).Этот класс имеет метод ignoresThrowable(), который возвращает true.Хотя этот метод, по-видимому, не вызывается, он мягко сообщает, что авторы, похоже, не собирались замечать ошибку.

Я добавил свой собственный класс макета, который расширяет LoggerLayoutTTCC и переопределяет формат)

    class LoggerLayoutTTCCWithException extends LoggerLayoutTTCC
    {
        public function format(LoggerLoggingEvent $event) {
            $format = parent::format($event);

            $throwableInfo = $event->getThrowableInformation();
            if ($throwableInfo === null) {
                return $format;
            }

            $renderer = new LoggerRendererException();
            return $format . $renderer->render($throwableInfo->getThrowable());
        }
    }
1 голос
/ 24 августа 2012

Вы должны использовать функцию PHP set_exception_handler и обернуть log4php с помощью этой функции. проверить это по адресу: http://php.net/manual/en/function.set-exception-handler.php

function exception_handler($exception) {

$ лог-> отладки ($ exception-> GetMessage ()); }

set_exception_handler ( 'exception_handler');

...