it-swarm.cn

如何记录插件(cron)操作?

是否有推荐的方法从您的插件中记录(失败)cron操作?例如,我有一个插件,每小时与外部服务同步。我想记录已更改的内容,以及同步失败的时间。你会在这推荐什么?一个新的数据库表? Log Deprecated Notices plugin使用自定义帖子类型执行此操作,但这可能是太多开销?我相信 WordPress没有附带标准的日志包

6
Jan Fabry
  1. 使用文件将事件写入。这里有几个缺点;

    • 文件系统权限 。部署应用程序时,必须注意记住授予Web服务器写入文件的权限。更确切地说,您必须编写代码来检查您是否可以写入文件并在不能的时候发出警告。这增加了复杂性,可能是部署问题的原因。
    • 意外删除 。您可能会意外删除自定义日志文件并丢失您的记录。这可能不方便。
    • 自定义logformat 。您必须提供自定义(机器可读?)文本格式才能将事件写入您的文件。当您必须更改日志格式时,没有方便的方法来迁移旧记录。如果要对日志进行某种分析,则必须解析记录。这会导致更多代码和更多复杂性。复杂性很糟糕。
  2. 使用数据库表。创建自己的数据库表并在那里记录事件。上面列出的缺点都不适用。它不会增加很多复杂性。使用插件钩子自动创建和删除表,我认为你有一个相当可靠的日志系统。

  3. 发送电子邮件。根据日志的相关性,您始终可以选择此方法。我想你可能想要在发生故障的情况下发送电子邮件。

  4. 使用操作系统记录器。在PHP中使用 syslog 函数时,可以将事件写入系统记录器(Unix上的syslog,Windows NT上的事件日志)。配置用户定义的syslog会使部署变得复杂。

最后;您应该考虑是否要记录正常情况例外,或仅记录例外情况。杰夫阿特伍德对此做了一个很好的 写作

希望这可以帮助!

6
Wietse Venema

使用像 this 这样的日志记录函数,这样它就可以通过配置你的wp-config.php将你的日志输出到debug.log,我发现 here

/**
 * This will log all errors notices and warnings to a file called debug.log in
 * wp-content (if Apache does not have write permission, you may need to create
 * the file first and set the appropriate permissions (i.e. use 666) ) 
 */
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

这至少应该用于调试/开发目的(我不确定它对生产日志记录有多好,但它适用于开发。)

6
leeand00

我同意,将这些数据放在wp_posts中可能会使表快速增长到无法管理的大小。创建一个表格很好。如果他们停止使用他们的插件,我会更加努力地给某人清理日志表。

我并不害怕创建表格的插件,但也许这是因为我看到WordPress数据库有8,000,000个wp_term_relationships记录和300,000个帖子,我知道这种体验有多么令人不愉快。

dbDelta()register_activation_hook() 将是你的朋友,在这里。请参阅 使用插件创建表

2
Annika Backstrom