在实用程序 类 中向静态方法添加日志记录的最佳方法是什么?
What is the best way to add logging to static methods in utility classes?
我正在尝试找出向实用程序 类 中的静态方法添加日志记录的最佳方法。我正在使用 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");
}
}
但这似乎是过多的冗余代码,因为我有许多实用程序 类 和许多静态方法。有更好的方法吗?
您可以使用定义记录器的静态方法。您可以在启动应用程序时调用一次。
public static function setLogger(LogInterface $logger)
{
self::$log = $logger;
}
您可以做的第二件事是使用静态方法 returns 记录器实例而不是使用静态 属性.
private static function log()
{
return Logger::getLogger( "testutil" );
}
那么您只需调用 self::log()->trace()
.
而不是调用 self::$log->trace()
我正在尝试找出向实用程序 类 中的静态方法添加日志记录的最佳方法。我正在使用 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");
}
}
但这似乎是过多的冗余代码,因为我有许多实用程序 类 和许多静态方法。有更好的方法吗?
您可以使用定义记录器的静态方法。您可以在启动应用程序时调用一次。
public static function setLogger(LogInterface $logger)
{
self::$log = $logger;
}
您可以做的第二件事是使用静态方法 returns 记录器实例而不是使用静态 属性.
private static function log()
{
return Logger::getLogger( "testutil" );
}
那么您只需调用 self::log()->trace()
.
self::$log->trace()