2012-03-03 22 views
13

Tôi đang đăng nhập vào syslog tốt nhưng không thể tìm ra cách chỉ định 'thẻ'. Đăng nhập hiện đăng bài này:Cách thay đổi 'thẻ' khi đăng nhập vào syslog từ 'Không xác định'?

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

nhưng tôi muốn 'Không xác định' được đặt thành thứ gì đó. ví dụ:

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

Nếu tôi sử dụng logger từ dòng lệnh nó có thể được điều khiển thông qua các tùy chọn -t ...

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

Nhưng đăng nhập từ python Tôi không có vẻ để có thể xác định tag:

import logging 
logging.info("FooBar") 

Chỉ cần cung cấp cho tôi thẻ 'Không xác định' được hiển thị ở trên cùng. Tôi đã xác định thông số này:

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

Làm cách nào để chỉ định thẻ sao cho thẻ không phải lúc nào "Không xác định"?

Trả lời

12

Way đơn giản của Messages Tagging Log

Làm điều này: logging.info("TagName: FooBar") và bạn thông báo sẽ được gắn thẻ! Bạn chỉ cần bắt đầu tất cả các tin nhắn của bạn với "TagName:". Và điều này tất nhiên không phải là rất thanh lịch.

Giải pháp tốt hơn

Cài đặt logger của bạn:

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) 

Và sử dụng nó:

log.info('FooBar') 
4

tôi thêm này chỉ dành riêng cho mục đích hoàn chỉnh, mặc dù câu trả lời @ sasha là chuẩn xác.

Nếu bạn tình cờ đăng nhập thông điệp đến syslog trực tiếp sử dụng syslog.syslog, bạn có thể thiết lập các thẻ bằng cách sử dụng syslog.openlog chức năng:

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

Trở lại với vỏ linux:

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

Đây là quyền câu trả lời – shrewmouse

Các vấn đề liên quan