2012-03-08 95 views
3

我用我在应用程序中调用的静态方法创建了一个简单的类LogHelper。我可以这样称呼它:跨类的PHP日志记录方法

LogHelper::writeToErrorLog($config->getLogPath(), $exception); or 
LogHelper::writeToErrorLog($config->getLogPath(), $exception, $config->getLogFile); 

如果没有传入日志文件名,writeToErroLog方法将生成日志文件名。

我有另一个名为Config的类,它基本上接受一个XML文件并通过getters & setter公开这些值。这是在应用程序开始时初始化的。&包含错误日志需要写入的日志路径。

我的要求是我创建一个日志文件,每个应用程序的运行具有相同的文件名。当应用程序结束日志,如果填充,将通过电子邮件发送。

我的应用程序有许多其他的类,用于数据库,解析数据,格式化数据等等,所有这些都需要记录在某个点上。我的大部分错误将来自抛出的异常,这会引发父级,抓到由LogHelper处理的&。有几种情况我不想抛出异常,只想记录信息或错误。

我担心的是我总是把配置传递给需要日志记录的每个类,这感觉不对。另外我只想设置一次错误日志的文件名。有没有最佳实践方法来解决这个问题?

TIA

东西

+0

'我为应用程序的每次运行创建一个具有相同文件名的日志文件 - 你最近怎么做?使用一个随机数还是什么?如果这对你的问题很重要,你应该添加代码。 – hakre 2012-03-08 23:05:20

+0

我已经改变了这种情况,稍微有时间思考一下。当我第一次初始化我的应用程序时,我正在设置日志文件名并将其保存回配置对象,因为无论如何,配置对象都会传递到任何地方。然后当我调用LogHelper时,我从配置对象中取出日志文件。 – StuffandBlah 2012-03-09 10:11:17

+0

我想我的问题应该更专注于OOP,例如当对象依赖于另一个对象并始终需要可用时,最佳方法是什么?我想一个选项可能是将配置对象添加到会话? – StuffandBlah 2012-03-09 10:26:33

回答

1

你有没有考虑过使用set_exception_handler()?您不必将记录器放在每个类中,它只会处理所有未捕获的异常。你可以在你的引导过程或其他应用程序预置点中调用它是这样:

set_exception_handler(array("MyClassName", "functionNameHere")); 

内部的功能,你可以调用LogHelper::writeToErrorLog()