Каков наилучший способ добавить запись в статические методы в служебных классах?

Я пытаюсь найти лучший способ добавить логирование в мои статические методы в служебных классах. Я использую log4php для входа. Что я хотел бы сделать, это:

<?php
require_once  WEBSITE_BASE_DIR . "/log4php/Logger.php";

class TestUtil
{
private static $log = Logger::getLogger( "testutil" );

public static function utilMethod1()
{
self::$log->trace("Entering utilMethod1");

// ... do stuff ...

self::$log->trace("Exiting utilMethod1");
}

public static function utilMethod2()
{
self::$log->trace("Entering utilMethod2");

// ... do stuff ...

self::$log->trace("Exiting utilMethod2");
}
}

Тем не менее, я не могу сделать это в PHP и получить синтаксическую ошибку при инициализации $log статическая переменная Единственный способ, которым я могу понять, как это сделать, это добавить init() вызов каждого статического метода:

<?php
require_once  WEBSITE_BASE_DIR . "/log4php/Logger.php";

class TestUtil
{
private static $log = NULL;

private static function init()
{
if (self::$log == NULL)
{
self::$log = Logger::getLogger( "testutil" );
}
}

public static function utilMethod1()
{
self::init();
self::$log->trace("Entering utilMethod1");

// ... do stuff ...

self::$log->trace("Exiting utilMethod1");
}

public static function utilMethod2()
{
self::init();
self::$log->trace("Entering utilMethod2");

// ... do stuff ...

self::$log->trace("Exiting utilMethod2");
}
}

Но это кажется чрезмерным количеством избыточного кода, так как у меня есть много служебных классов со многими статическими методами. Есть лучший способ сделать это?

-1

Решение

Вы могли бы иметь статический метод, который определяет регистратор. Вы можете позвонить один раз, когда вы запускаете приложение.

public static function setLogger(LogInterface $logger)
{
self::$log = $logger;
}

Второе, что вы можете сделать, это иметь статический метод, который возвращает экземпляр регистратора вместо использования статического свойства.

private static function log()
{
return Logger::getLogger( "testutil" );
}

Тогда вместо звонка self::$log->trace(), ты бы просто позвонил self::log()->trace(),

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]