如何replacersyslog中的控制字符

我们有几个(通常是java)应用程序,他们login到集中rsyslog服务器(版本7.6)。 由于rsyslog正在将每一行堆栈跟踪作为单独的消息来处理,所以我们遇到了Javaexception的问题,所以我们的开发人员开始使用#012作为换行符,将#011作为标签。 所以现在,当我有exception的消息,它看起来像:

2015-02-09T12:52:43.769Z hostname warning app Exception when invoking method something.search: reason=Error while executing method something.search, Params=#012{"maxResults":10,"query":"somesearch"}#012com.company.server.json.ApiException: Error while executing method something.search#012#011at com.company.app.api.BaseExecutor.executeWithDatabase(BaseExecutor.java:112) ~[app-server.jar:?]#012#011at com.company.app.api.BaseExecutor.execute(BaseExecutor.java:87) ~[app-server.jar:?]#012#011at com....and so on 

我喜欢的第一件事是自动replace这些#xxxstring的原始值,这样生成的日志文件是可读的。

第二件事,我们正在使用graylog2,在这里我们暂时存储日志,这样可以很容易地search。 Rsyslog被设置为将日志保存到某个位置,并将日志重新发送到graylog,我当然希望有空格和制表符而不是控制字符。

我正在做一些研究,试图取代这些控制字符,因为他们应该(我认为)与rsyslog兼容:

http://www.rsyslog.com/doc/property_replacer.html http://www.rsyslog.com/doc/rsconf1_escapecontrolcharactersonreceive.html

但到目前为止没有运气。

预先感谢您的时间和帮助!

PS第一个问题可以用于cron和sed,但它不会解决第二个问题。

不完全是一个解决scheme,但足够好的解决方法。

对于rsyslog,是的,夜间cron作业有一点“sed”命令对于graylog:你可以使用drools规则来重写消息到达graylog引擎之前。 (来源: https : //www.graylog.org/documentation/general/rewriting/ )