此問題類似於未答覆的rsyslog specific question on Server Fault。我不清楚最好的解決方案是通過已有的軟件,如rsyslog或logstash,或者我必須自己構建一些東西。這就是我在這裏問的原因。如何將消息記錄到通用(更改)文件
問題我有並行運行幾個蟒進程(不通過多處理來處理)。他們構建需要寫入該組的相同日誌文件的組。從多個進程登錄到同一個文件必須經過某種序列化才能避免文件損壞,所以記住rsyslog或logstash。
我無法找到的(rsyslog和logstash都不知道)是如何過濾包含我無法知道的文件名的字段(或標記或可能在該系統中調用的任何內容) (包含我不控制的版本號),並將這些消息寫入通訊文件。
所以,我知道它是如何完成靜態輸入過濾器與動態輸出。但我不知道它是如何完成動態輸入和動態輸出的。
我最喜歡幻想的解決方案
在Python應用程序:
創建自定義格式,其添加包含目標日誌文件的名稱的字段(如syslogtag爲rsyslog現在)
添加一個SyslogHandler或類似於我的記錄器。
在rsyslog現在或logstash配置添加規則像
<config of some logging system>
[filterfor] <field> -> write messages containing <value of field> to logfile /path/to/logs/<value of field>.log
完成。
問題
這是可能的開箱或(在logstash)與(尚未被寫入)插件?
編輯:也許一個例子將闡明我在找什麼。在括號內的目標作爲exapmle
實施例的日誌信息:然後基於匹配的名稱
<group_a> Message that will end up only in "group_a.log"
<group_a> Another Message for "group_a.log"
<group_b> Some interesting message for "group_b.log"
<group_c> Message for "group_c.log"
這些消息將在相應的日誌文件結束。對於上面的例子,它們的內容的日誌文件將是:
/var/log/group_logs/group_a.log
<group_a> Message that will end up only in "group_a.log"
<group_a> Another Message for "group_a.log"
/var/log/group_logs/group_b.log
<group_b> Some interesting message for "group_b.log"
/var/log/group_logs/group_c.log
<group_c> Message for "group_c.log"
所以它的工作就像是一組保存一致的姓名,並用它作爲文件名的正則表達式。
你有沒有讀過這個http://docs.python.org/dev/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes – msvalkon
是的,但在我建立東西之前我自己,我想確保這是不可能的標準工具(我寧願站在巨人的肩膀上;))。 –