0

虽然这是一个两个问题的帖子,但任何一个问题的答案都可以解决我的一个问题,所以我只需要对这两个问题之一做出回应。

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

接下来是通过nxlog将日志从那里获取到logstash,我也这样做了。

问题是日期时间格式有点错误,它是

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

而不是(注意T.):

2015-02-24T14:55:39.777

坦率地说,关于如何配置日志输出的文档有点……好吧,这很垃圾。

我能够弄清楚如何将其格式化为 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']}"
}

所以,由于我不知道如何更改格式,所以我想在推送到 logstash 之前通过 nxlog 重新格式化日期时间字符串(它将日志读取为 json),但我看起来很好,我似乎也找不到如何做到这一点。

因此,任何回答这两个问题的帮助都会很棒。

1)如何在logger格式中直接重新格式化时间

或者

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

4

1 回答 1

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 更容易,因为'必须使用"逃避 every 。"\"

我使用这里的信息来意识到我可以只添加datefmt到日志文件中,它会更改日期时间模板。具体来说,正是datefmtyaml 格式和 json 格式的存在让我意识到我可以对记录器配置做同样的事情。

于 2015-02-25T13:59:23.383 回答