2012-03-03 6 views
13

Loguję się do syslog dobrze, ale nie mogę się dowiedzieć, jak określić "tag". Rejestrowanie obecnie publikuje to:Jak zmienić "tag" podczas logowania do sysloga z "Unknown"?

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

, ale chcę, aby "Nieznany" został ustawiony na coś. np:

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

Jeśli używam logger z linii poleceń może być sterowany za pomocą opcji -t ...

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

Ale zalogowaniu z python I nie wydają się być w stanie określić tag:

import logging 
logging.info("FooBar") 

Dodaje mi tylko znaczek "Nieznany" widoczny u góry. Zdefiniowałem tę specyfikację:

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', 
      } 
    } 
} 

Jak określić tag, aby nie zawsze był "nieznany"?

Odpowiedz

12

prosty sposób znakowania rejestrować komunikaty

Wykonaj: logging.info("TagName: FooBar") a wiadomość zostanie oznaczone! Musisz tylko zacząć wszystkie wiadomości od "TagName:". A to oczywiście nie jest zbyt eleganckie.

Lepsze rozwiązanie

Konfiguracja rejestratora:

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) 

i używać go:

log.info('FooBar') 
4

Dodaję to właśnie ze względu na zakończenie, choć użytkownika @ Sasha odpowiedź absolutnie poprawne.

Jeśli zdarzy się komunikaty dziennika do syslog bezpośrednio za pomocą syslog.syslog, można ustawić znacznik pomocą syslog.openlog funkcję:

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

Wracając do powłoki systemu Linux:

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

to jest właściwe odpowiedź – shrewmouse

Powiązane problemy