将显示错误消息的所有 .log 编译到单个日志中

将显示错误消息的所有 .log 编译到单个日志中

我在 /var/opt/log_loc1、/var/opt/log_loc2、/var/opt/log_loc3 中有许多来自不同 cron 作业的生成日志。有没有办法安排一个 cron 作业,用所有包含错误消息的日志填充新的日志文件,而不是查看每个日志?

基本上我想用所有日志名称和其中的错误填充一个新的日志文件,名称为“all_logs_%Y_%m_%d”。每天,我都会有一个新的 all_logs_%Y_%m_%d

示例:这是 /var/opt/log_loc1 中我的日志文件列表

  1. InsertSales_2019_08_19.log
  2. PurgeHistory_2019_08_19.log
  3. 导入11_2019_08_19.log
  4. ImportSales_2019_08_19.log
  5. 导入22_2019_08_20.log
  6. 导入33_2019_08_20.log
  7. InsertSales_2019_08_20.log
  8. PurgeHistory_2019_08_20.log
  9. 导入11_2019_08_20.log
  10. ImportSales_2019_08_20.log
  11. 导入22_2019_08_21.log
  12. 导入33_2019_08_21.log
  13. InsertSales_2019_08_21.log
  14. PurgeHistory_2019_08_21.log

*如果我的问题不完整,我深表歉意

答案1

怎么样find?,我能想到的最简单的方法是使用它,也许它有点粗糙,但它必须完成工作

find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;

我不清楚你是否只想过滤所有日志文件(来自所有日子)或只是从今天开始,如果你需要过滤日期,你可以使用-mtime选项或只是使用仅过滤选项的find“技巧” ,-name例如,昨天的日志

find /var/opt/ -type f -name "*_`date --date yesterday '+%Y_%m_%d'`.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;

不确定这是否可以帮助您...其他不清楚的是,日志文件具有什么样的语法?因为find不能按字母或数字顺序查找,所以你会得到一个混乱的文件。通常(并且必须是教条),日志以 %Y%m%d_%H:%M 或类似的内容开头,如果是这种情况,您可以以类似的方式sort输出find

find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} \; sort -no total.log

我尝试了这个方法/var/log,看起来它可以完成工作,但正如我所说,这是一个粗糙的方法。

希望这可以帮到你。

您可以在页面中找到有关我与findsort和一起使用的选项的更多信息。grepman

相关内容