向实用程序类中的静态方法添加日志记录的最佳方法是什么?

时间:2017-10-23 03:46:03

标签: php static-methods log4php

我试图找出在实用程序类中向我的静态方法添加日志记录的最佳方法。我正在使用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 个答案:

答案 0 :(得分:1)

您可以使用静态方法定义记录器。您可以在开始申请时拨打一次电话。

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

您可以做的第二件事是使用静态方法返回记录器实例而不是使用静态属性。

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

然后,您只需拨打self::$log->trace()

,而不是拨打self::log()->trace()