[ 
https://issues.apache.org/jira/browse/LOG4PHP-84?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12754772#action_12754772
 ] 

Christian Hammers commented on LOG4PHP-84:
------------------------------------------

Here's a possible fix. At least it works for me. Below is a example that works 
with this patch (the above example is totally buggy, it just happened to 
trigger the bug).

bye,

-christian-

Index: src/main/php/LoggerLoggingEvent.php
===================================================================
--- src/main/php/LoggerLoggingEvent.php (Revision 814339)
+++ src/main/php/LoggerLoggingEvent.php (Arbeitskopie)
@@ -260,13 +261,9 @@
                        if(is_string($this->message)) {
                                        $this->renderedMessage = $this->message;
                        } else {
-                               if($this->logger !== null) {
-                                       $repository = 
$this->logger->getLoggerRepository();
-                               } else {
-                                       $repository = 
Logger::getLoggerRepository();
-                               }
-                               if(method_exists($repository, 
'getRendererMap')) {
-                                       $rendererMap = 
$repository->getRendererMap();
+                       $hierarchy = Logger::getHierarchy();
+                               if(method_exists($hierarchy, 'getRendererMap')) 
{
+                                       $rendererMap = 
$hierarchy->getRendererMap();
                                        $this->renderedMessage= 
$rendererMap->findAndRender($this->message);
                                } else {
                                        $this->renderedMessage = 
(string)$this->message;


require_once dirname(__FILE__).'/../../main/php/Logger.php';
Logger::configure(dirname(__FILE__).'/../resources/renderer_map.properties');

class Person {
    public $firstName = 'John';
    public $lastName = 'Doe';
}

class PersonRenderer implements LoggerRendererObject {
    public function render($o) {
        return $o->lastName.', '.$o->firstName;
    }
}

$person = new Person();

$logger = Logger::getRootLogger();
$logger->debug("Now comes the current MyClass object:");
$logger->debug($person);


$ cat src/examples/resources/renderer_map.properties
log4php.renderer.Person = PersonRenderer
log4php.appender.default = LoggerAppenderEcho
log4php.appender.default.layout = LoggerLayoutSimple
log4php.rootLogger = DEBUG, default


> undefined method getLoggerRepository() in LoggerLoggingEvent
> ------------------------------------------------------------
>
>                 Key: LOG4PHP-84
>                 URL: https://issues.apache.org/jira/browse/LOG4PHP-84
>             Project: Log4php
>          Issue Type: Bug
>          Components: Code
>            Reporter: Christian Hammers
>
> Hi
> LoggerRepositories were recently removed, or? One occurence in 
> LoggerLoggingEvent is still left.
> Fatal error: Call to undefined method LoggerRoot::getLoggerRepository() in 
> /srv/home/james/workspace/log4php/src/main/php/LoggerLoggingEvent.php on line 
> 266
> Call Stack:
>     0.0007     123248   1. {main}() 
> /srv/home/james/workspace/log4php/src/examples/php/renderer_default.php:0
>     0.0217    1035952   2. Logger->debug() 
> /srv/home/james/workspace/log4php/src/examples/php/renderer_default.php:38
>     0.0217    1036280   3. Logger->logLevel() 
> /srv/home/james/workspace/log4php/src/main/php/Logger.php:215
>     0.0217    1036664   4. Logger->forcedLog() 
> /srv/home/james/workspace/log4php/src/main/php/Logger.php:330
>     0.0218    1039616   5. Logger->callAppenders() 
> /srv/home/james/workspace/log4php/src/main/php/Logger.php:272
>     0.0218    1040432   6. LoggerAppender->doAppend() 
> /srv/home/james/workspace/log4php/src/main/php/Logger.php:409
>     0.0218    1040688   7. LoggerAppenderEcho->append() 
> /srv/home/james/workspace/log4php/src/main/php/LoggerAppender.php:134
>     0.0218    1040816   8. LoggerLayoutSimple->format() 
> /srv/home/james/workspace/log4php/src/main/php/appenders/LoggerAppenderEcho.php:77
>     0.0219    1041136   9. LoggerLoggingEvent->getRenderedMessage() 
> /srv/home/james/workspace/log4php/src/main/php/layouts/LoggerLayoutSimple.php:57
> Reproducable with:
> log4php.renderer.MyClass = MyClassRenderer
> log4php.appender.default = LoggerAppenderEcho
> log4php.appender.default.layout = LoggerLayoutSimple
> log4php.rootLogger = DEBUG, default
> and:
> require_once dirname(__FILE__).'/../../main/php/Logger.php';
> Logger::configure(dirname(__FILE__).'/../resources/renderer_default.properties');
> class Person {
>     public $firstName = 'John';
>     public $lastName = 'Doe';
> }
> class MyClassRenderer implements LoggerRendererObject {
>     public function render($o) {
>         return $o->lastName.', '.$o->firstName;
>     }
> }
> $person = new Person();
> $logger = Logger::getRootLogger();
> $logger->debug("Now comes the current person object:");
> $logger->debug($person);

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to