如何在nxlog中重新格式化日期时间字符串或如何为python日志文件设置日期时间格式

时间:2015-02-24 15:19:41

标签: python logging timestamp nxlog

虽然它是一个两个问题的帖子,但任何一个的答案都将解决我的单个问题,所以我只需要回答这两个问题中的一个。

我正在使用名为dynamic-dynamodb的应用扩展我们的发电机表。

接下来就是通过nxlog将日志从logstash中获取到logstash,我也做到了。

问题是日期 - 时间格式有点不对,它是

2015-02-24 14:55:39,777

代替(注意T.):

2015-02-24T14:55:39.777

坦率地说,关于如何配置日志记录输出的documentation有点......它是垃圾。

我能够弄清楚如何将其格式化为json,但我无法解决如何更改日期时间格式的问题。

这是我的格式(格式字符串在散列中存储为heredoc,然后作为大厨中的模板写入conf):

{
    "EventReceivedTime": "%(asctime)s",
    "name":  "%(name)s",
    "level": "%(levelname)s",
    "message": "%(message)s",
    "type":"dynamic-dynamodb",
    "hostname": "#{node['hostname']}",
    "enviroment" : "#{node.chef_environment}",
    "node_name" : "#{app_name}",
    "ipaddress" : "#{node['ipaddress']}"
}

所以,因为我无法解决如何更改格式,我认为我在通过nxlog(以json读取日志)之前重新格式化日期时间字符串,然后再推送到logstash但我看起来很好,我似乎无法找到如何做到这一点。

所以,任何帮助回答其中任何一个问题都会很棒。

1)如何直接以记录器格式重新格式化时间

2)如何在推送到logstash之前在nxlog中重新格式化日期时间

1 个答案:

答案 0 :(得分:0)

我能够弄清楚如何更改记录器输出的日期时间格式。 我添加到日志文件配置

datefmt=%Y-%m-%dT%H:%M:%S

并将格式化程序更改为:

"
{
    'EventReceivedTime': '%(asctime)s.%(msecs)d',
    'name':  '%(name)s',
    'level': '%(levelname)s',
    'message': '%(message)s',
    'type':'dynamic-dynamodb',
    'hostname': '#{node['hostname']}',
    'enviroment' : '#{node.chef_environment}',
    'node_name' : '#{app_name}',
    'ipaddress' : '#{node['ipaddress']}'
}
".gsub('\'','"')#<-- this is so I can juse use ' rather than having to \" 

从heredoc更改为多行字符串的原因是因为我无法正确地向哈希添加第二个元素,这是唯一的方法。

gsub的原因是因为'的每个"更容易gsub,然后必须使用"转义每个\"

我使用来自here的信息来意识到我可以将datefmt添加到日志文件中,它会更改日期时间模板。 特别是在yaml格式和json格式中都存在datefmt,这让我意识到我可以为记录器配置做同样的事情。