2012-03-03 47 views
13

我記錄到系統日誌很好,但不能解決如何指定'標記'。目前日誌記錄這篇文章:如何從'未知'登錄到系統日誌時更改'標記'?

Mar 3 11:45:34 TheMacMini Unknown: INFO FooBar 

但我想'未知'被設置爲某事。例如:

Mar 3 11:45:34 TheMacMini Foopybar: INFO FooBar 

如果我使用logger在命令行可以通過-t選項控制...

$ logger -t Foopybar FooBar && tail -1 /var/log/system.log 
Mar 3 12:05:00 TheMacMini Foopybar[4566]: FooBar 

但是從Python記錄我似乎不能夠指定標籤:

import logging 
logging.info("FooBar") 

只是給了我頂部顯示的'未知'標籤。我已經定義了這個規範:

LOGGING = { 
    'version': 1, 
    'formatters': { 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'syslog':{ 
      'address': '/var/run/syslog', 
      'class': 'logging.handlers.SysLogHandler', 
      'facility': 'local2', 
      'formatter': 'simple' 
     } 
    }, 
    'loggers': { 
     '': { 
      'handlers': ['syslog'], 
      'level': 'INFO', 
      } 
    } 
} 

如何指定標籤,使其不總是「未知」?

回答

12

標記日誌消息的簡單方法

這樣做: logging.info("TagName: FooBar") ,你的信息將被標記!你只需要用「TagName:」開始你的所有消息。這當然不是很優雅。

更好的解決方案

設置你的記錄:

log = logging.getLogger('name') 
address=('log-server',logging.handlers.SYSLOG_UDP_PORT) 
facility=logging.handlers.SysLogHandler.LOG_USER 
h=logging.handlers.SysLogHandler(address,facility) 
f = logging.Formatter('TagName: %(message)s') 
h.setFormatter(f) 
log.addHandler(h) 

並使用它:

log.info('FooBar') 
4

我加入這個剛剛完成的緣故,即使@莎莎的回答是完全正確。

如果你碰巧日誌消息直接使用syslog.syslog系統日誌,您可以使用syslog.openlog功能設置的標籤:

import syslog 
syslog.openlog('foo') 
syslog.syslog('bar') 

讓我們再回到Linux命令:

$ tail -f /var/log/syslog 
Sep 7 07:01:58 dev-balthazar foo: bar 
+0

這是正確的回答 – shrewmouse 2016-06-28 13:54:18

相關問題