python的日志,如何做到一天是单独一个日志,并且定期清理?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的日志,如何做到一天是单独一个日志,并且定期清理?相关的知识,希望对你有一定的参考价值。

创建以日期为文件的log文件(如:20140911.log),写日志前判断存放日志路径是否存在以当天日期为文件名的文件,如果存在添加日志信息,不存在就创建,在写日志信息。
定期清理亦可以按照此思路来做追问

但是log的命名是在配置文件中,怎么办呢?

追答

你思路没开啊,建议你先花那么一两个中看看python的文件操作吧

参考技术A

    文件名加日期,例如my_20140911.log。文件名存在的话追加日志,不存在创建并追加日志

    定期清理,指定保存日志日数,计算出日记后检查文件名是否存在,然后删除。

    或者一个固定文件名my.log,然后以读写模式打开,进行类似的追加日志和删除日志

追问

但是log的命名是在配置文件中,怎么办呢?

追答

你的意思是文件名是由配置文件指定的吗。
那就取出来作为文件名,然后进行增删操作。

追问

不知道你有没有用过python的log,它有一种方式是通过配置文件来定义log,就是配置文件写好后,直接读过来就可以了

追答

你用的是什么框架?
这是logger实例http://www.jb51.net/article/42626.htm

追问

突然发现,不用这样,可以通过系统的文件操作,重命名和删除文件,哈哈

追答

对呀,最开始说的就是对文件的操作啦。。

本回答被提问者采纳
参考技术B 你好:
能不能详细描述下;

Logstash 拆分日志并单独插入到elasticsearch中

【中文标题】Logstash 拆分日志并单独插入到elasticsearch中【英文标题】:Logstash split log and insert it separately into elasticsearch 【发布时间】:2021-09-14 05:55:54 【问题描述】:

我正在编写一个 logstash 配置文件,而我收到的一个日志给我带来了问题,团队向我发送了多个日志,例如合并为一个。

消息: [logitem(aaa=1, bbb=1, ccc=1), logitem(aaa=2, bbb=2, ccc=2), logitem(aaa=3, bbb=3, ccc=3)]

是否可以将这些日志拆分为 3 个并将它们单独插入到 elasticsearch 中? (3 条记录)

【问题讨论】:

它们会一直是logitem 的三个项目吗?还是数量不同? 不,它不会总是 3,它会有所不同 这应该可以使用split 过滤插件来实现。如果您想要详细的配置答案,您应该发布一个更好的事件示例(如 logstash 所见) - 使用 stdout 输出插件并粘贴输出。 【参考方案1】:

使用红宝石过滤器

这种方式应该可行(请参阅下面的 cmets 进行讨论和参考)。您可能需要在几个地方调整 grok / scan 正则表达式。

grok 
    match => 
        "message" => "^\[%GREEDYDATA:logitems\]$"
    


ruby 
    code => "event.set('logitem', event.get('message').scan(/logitem\([^\)]+\)/))"


split 
    field => "logitem"


grok 
    match => 
        "logitem" => "^logitem\(aaa=%DATA:field_a, bbb=%DATA:field_b, ccc=%DATA:field_c\)"
    

扫描正则表达式的目的是匹配一个字符串:

logitem开头 然后是( 字符 然后是除) 之外的任何字符中的一个或多个 以)结尾

使用 grok

令人惊讶的是,这种方式行不通。有关更多详细信息,请参阅this github issue。 TL;DR... grok 不会将重复的匹配项放入数组中。

filter 
  grok 
    match => 
      "message" => "^\[*(logitem\(%DATA:logitem\), )*logitem\(%DATA:logitem\)\]$"
    
  
  split 
    field => "logitem"
  

如果您确定消息将始终采用aaa=, bbb= 格式,您可以更加明确。

[编辑 1:将 grok 方法标记为不工作并添加了 ruby​​ 方法。 2:为了更好的流程重新排序了一些东西]

【讨论】:

嗨,汤姆,这几乎成功了!设法将日志分成两个不同的条目,但是 logitem 正则表达式部分只占用 logitem 中的最后 2 个条目 也许this answer 是更好的方法? 和 this github issue 有更多细节 - 看起来你确实需要使用 ruby 过滤器,令人惊讶!至少,如果您不知道该字段将重复多少次。 正在尝试重复正则表达式模式,但 ruby​​ 扫描看起来不错,让我试试 ruby 代码方法对我有用,需要为 ruby​​ 获取正则表达式,而 event.put 对我不起作用,所以我使用了 event.set,你想更新你的答案吗?另外我想知道是否可以修改您使用 grok 的最初想法以接受重复出现的模式

以上是关于python的日志,如何做到一天是单独一个日志,并且定期清理?的主要内容,如果未能解决你的问题,请参考以下文章

python中输入某年某月某日,判断这一天是这一年的第几天?

从机器人框架日志文件生成摘要

MySQL中如何获得指定日期中月份的第一天是周几?

js如何判断 每年每个月的第一天是星期几?

python习题:输入日期, 判断这一天是这一年的第几天?

如何使用 Apple Watch 的 os_log 访问过去一天的日志?