2011-08-18 26 views
8

Tôi đã thiết lập log4php để đăng nhập vào tệp bằng cách sử dụng ứng dụng LoggerAppenderRollingFile và bố cục LoggerLayoutTTCC. Tuy nhiên, khi tôi đăng nhập ngoại lệ, nó không hiển thị các chi tiết ngoại lệ như dấu vết ngăn xếp như tôi thường thấy trong log4net.Làm thế nào để xuất thông tin ngoại lệ trong tệp nhật ký với log4php?

Tôi đã xem qua mã và có vẻ như LoggerAppenderMongoDB có hỗ trợ hiển thị ngoại lệ với formatThrowable method, nhưng tôi không thấy bất kỳ điều gì tương tự trong các ứng dụng khác.

Tôi cảm thấy mình thiếu điều gì đó hiển nhiên. Có điều gì tôi cần phải cấu hình để in các chi tiết này vào tệp nhật ký không? Tôi có cần tạo một lớp LoggerAppender tùy chỉnh không? Hoặc chúng có thể được thực hiện với bố cục khác hoặc trình kết xuất tùy chỉnh không?

Trả lời

1

Bạn nên sử dụng hàm set_exception_handler PHP và gói log4php sử dụng hàm này. check it out tại địa chỉ: http://php.net/manual/en/function.set-exception-handler.php

function exception_handler($exception) { 

$ log-> debug ($ exception-> getMessage()); }

set_exception_handler ('exception_handler');

1

Tôi đã đi đến cùng một kết luận: có vẻ như log4php chỉ làm điều gì đó với thông số $throwable trong ứng dụng LoggerAppenderMongoDB.php.

Lớp cơ sở LoggerAppenderFile dựa trên bố cục, LoggerLayoutTTCC, để định dạng thư (như mong đợi). Lớp đó có phương thức ignoresThrowable(), trả về true. Mặc dù phương pháp này dường như không được gọi, nhưng nó truyền đạt một cách nhẹ nhàng rằng các tác giả dường như không có ý định ghi nhận bất kỳ lỗi nào.

Tôi đã thêm lớp bố trí của riêng tôi mà kéo dài LoggerLayoutTTCC và ghi đè định dạng()

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()); 
     } 
    } 
2

FYI, bây giờ mà LoggerLayoutTTCC bị phản đối, bạn có thể sử dụng LoggerLayoutPattern với một chuỗi định dạng tốt hơn để bao gồm trường hợp ngoại lệ.

<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 --> 

Xem Exceptions Logging phần của tài liệu: http://logging.apache.org/log4php/docs/layouts/pattern.html#Logging_exceptions

Các vấn đề liên quan