0

我们正在使用 SilverStripe 3.6 上的 CWP 1.8 构建一个 Web 应用程序,日志将由 SS_Log 类使用 SS_Log::log('Log message', SS_Log::INFO); 之类的语句捕获。由于我们只需要在错误发生时捕获日志以进行调试,因此我们希望使记录器更加灵活,可以通过配置文件中的变量来控制它。换句话说,我们需要在错误产生时打开日志记录,并在错误排序后关闭日志记录。

谁能给我们一些实现这一目标的方向?非常感谢

银条 3.6

4

1 回答 1

1

TL;DR:使用 CWP 的 Graylog - 那里已经跟踪了所有内容。


日志记录有不同的级别:

class SS_Log
{
    const ERR = Zend_Log::ERR;
    const WARN = Zend_Log::WARN;
    const NOTICE = Zend_Log::NOTICE;
    const INFO = Zend_Log::INFO;
    const DEBUG = Zend_Log::DEBUG;

这些映射到一些Zend Log 常量

使用 CWP,您可以获得一些开箱即用的默认登录:

// Tee logs to syslog to make sure we capture everything regardless of project-specific SS_Log configuration.
SS_Log::add_writer(new \SilverStripe\Auditor\MonologSysLogWriter(), SS_Log::DEBUG, '<=');

这意味着默认情况下,调试级别的所有内容都将发送到 syslog。这样 CWP 平台就可以将您的网站日志通过管道传输到Graylog集中式日志系统),您可以使用您的 CWP Dash 帐户访问该日志。

如果您需要额外的日志记录,您可以通过以下两种方式之一进行配置:

  1. define('SS_ERROR_LOG', '/path/to/logfile.log'):这将被自动配置为从警告级别向上写入您的日志文件。这在 CWP 的上下文中对您不是特别有用,因为您无权访问服务器来检查文件。
  2. 添加您自己的自定义记录器并将其配置为将日志发送到您想要的任何位置(这些文档中的示例是电子邮件地址)。

如果您想使用变量启用或禁用此功能,您实际上只能选择添加或删除自定义代码,因为 CWP 无法让您自定义环境变量。您需要进行部署才能更改此代码,因此您也可以添加类似这样的mysite/_config.php内容并在不需要时将其注释掉:

// Log everything and send it to my email address for debugging. Comment out when
// not required.
SS_Log::add_writer(new SS_LogEmailWriter('your-email@example.com'), SS_Log::DEBUG, '<=');

同样,无论何时更改此代码,您都需要进行部署。


抛开理论不谈,我的建议是使用 Graylog 中已有的日志。

于 2019-02-15T07:16:45.390 回答