保持TYPO3 sys_log漂亮干净的最佳方法是什么?

yun*_*zen 9 typo3

我有这个MySQL

DELETE FROM sys_log 
WHERE sys_log.tstamp < UNIX_TIMESTAMP(ADDDATE(NOW(), INTERVAL -2 MONTH)) 
ORDER BY sys_log.tstamp ASC 
LIMIT 10000
Run Code Online (Sandbox Code Playgroud)

如果我是cronjob,这对于保持sys_log小是否有用?

Mic*_*oos 8

是和否

如果你关心你的记录历史,那就不是了.您可以使用sys_history表还原对记录(内容,页面等)的更改.sys_history表和sys_log表是相关的.截断sys_log时,您也无法回滚对系统的任何更改.您的客户可能不喜欢这样.

如果您只关心sys_log大小,那就是.通过cron截断表格很好.

在TYPO3 4.6及以上版本中,您可以使用Table垃圾收集调度程序任务,pgampe说.对于低于4.5的TYPO3版本,您可以使用tablecleaner扩展.如果从[N]天以后的sys_log中删除所有记录,您还将保留[N]天的记录历史记录.这对我来说似乎是最好的解决方案.

并且请首先尝试修复填充sys_log的内容;-)


bie*_*ior 7

是的.

另请参阅Jochen Weiland关于保持TYPO3安装清洁小的其他建议


pga*_*mpe 6

有一个调度程序任务.

它被称为Table garbage collection (scheduler).

在TYPO3 4.7中,它只能清理sys_log表格.从TYPO3 6.0开始,它也可以清理sys_history表格.您可以配置要清理的天数和表.

扩展可以注册更多表来清理.


Syb*_*ers 5

Since TYPO3 9, the history is no longer stored using sys_log.
You can safely delete records from sys_log.
Run Code Online (Sandbox Code Playgroud)

请参阅重大更改 #55298

简短的回答:

不,这绝对不是一个好主意(除非您使用的是 TYPO3 9 或更高版本,请参阅本文底部的注释)。如果您真的想从 sys_log 中删除内容,请记住 sys_history 仍在引用它。你也应该对 sys_history 做同样的事情。

或者,只需执行以下操作:

DELETE FROM sys_log WHERE NOT EXISTS 
(SELECT * FROM sys_history WHERE sys_history.sys_log_uid=sys_log.uid) 
AND recuid=0 AND tstamp < $timestamp LIMIT $limit 
Run Code Online (Sandbox Code Playgroud)

随意根据您的要求优化它。

您还可以安全地(不影响 sys_history)做的是删除 sys_log.error != 0 的记录。

还有一些建议:

  • 在开发时将调试级别设置为详细(警告),但在生产中仅设置错误
  • 定期查看系统日志,排除问题。解决问题后,您可以从 sys_log 中删除特定错误(请参阅 sys_log.error != 0, sys_log.details)。您可以使用数据库命令执行此操作,或者在较新的 TYPO3 版本上使用后端中的“SYSTEM:log”并使用“删除类似错误”按钮:

在此处输入图片说明

  • 你也可以考虑,做一个truncate sys_logtruncate sys_history上一个主要版本升级使用低级清洁和删除记录与删除= 1在一起。不过,请务必先与编辑附近的人交谈,因为这将删除整个历史记录。确保你会想要这样做。

对于调度程序任务“表垃圾收集”,请参阅文档:https : //docs.typo3.org/c/typo3/cms-scheduler/master/en-us/Installation/BaseTasks/Index.html