如何在 nxlog 中重新格式化日期时间字符串或如何为 python 日志文件设置日期时间格式
How to re-format a date-time string in nxlog or how to set up date-time format for python logging file
虽然这是两个问题 post,但只要回答其中一个问题就可以解决我的单一问题,因此我只需要回答两个问题之一。
我正在使用一个名为 dynamic-dynamodb 的应用来缩放我们的发电机表。
接下来是通过 nxlog 将日志从那里获取到 logstash,我也这样做了。
问题是日期时间格式有点不对,是
2015-02-24 14:55:39,777
而不是(注意 T
和 .
):
2015-02-24T14:55:39.777
坦率地说,关于如何配置日志输出的 documentation 有点……好吧,它是垃圾。
我能够弄清楚如何将其格式化为 json,但我无法弄清楚如何更改当前的日期时间格式。
这是我的格式(格式字符串作为 heredoc 存储在哈希中,然后作为 chef 中的模板写入 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 中重新格式化日期时间
我能够弄清楚如何更改记录器输出的日期时间格式。
我添加到日志文件配置
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
添加到日志文件中,它会更改日期时间模板。
具体来说,是 datefmt
在 yaml 格式和 json 格式中的存在让我意识到我可以对记录器配置做同样的事情。
虽然这是两个问题 post,但只要回答其中一个问题就可以解决我的单一问题,因此我只需要回答两个问题之一。
我正在使用一个名为 dynamic-dynamodb 的应用来缩放我们的发电机表。
接下来是通过 nxlog 将日志从那里获取到 logstash,我也这样做了。
问题是日期时间格式有点不对,是
2015-02-24 14:55:39,777
而不是(注意 T
和 .
):
2015-02-24T14:55:39.777
坦率地说,关于如何配置日志输出的 documentation 有点……好吧,它是垃圾。
我能够弄清楚如何将其格式化为 json,但我无法弄清楚如何更改当前的日期时间格式。
这是我的格式(格式字符串作为 heredoc 存储在哈希中,然后作为 chef 中的模板写入 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 中重新格式化日期时间
我能够弄清楚如何更改记录器输出的日期时间格式。 我添加到日志文件配置
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
添加到日志文件中,它会更改日期时间模板。
具体来说,是 datefmt
在 yaml 格式和 json 格式中的存在让我意识到我可以对记录器配置做同样的事情。