Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set custom app name in python sysloghandler

I am working on a python sysloghander to send logs to a centralized syslog server. The code is working but I am facing some issues in customizing the format. Below is the code that I have written.

#!/usr/bin/python

import logging
from logging.handlers import SysLogHandler
import subprocess

hostname = subprocess.check_output(['hostname', '-f'])
logger = logging.getLogger()
logger.setLevel(logging.INFO)
syslog = SysLogHandler(address=('log.central.log', 514))
formatter = logging.Formatter('%(asctime)s %(name)s: %(levelname)s %(message)s', '%b %e %H:%M:%S')
syslog.setFormatter(formatter)
logger.addHandler(syslog)
logger.info("My Message")

Is it possible to add custom tags / variables in the log formatter. I want to add hostname and app_name in their as I have setup central logging server to create log files based on hostname and app_name.

App_name can be anything, like I can set app_name to "mysql_communication_log" or "wsgi_log", then on the central server separate files will be created with same name.

What I am looking for is something like

formatter = logging.Formatter('%(asctime)s %(hostname)s %(app_name)s: %(message)s', '%b %e %H:%M:%S')
like image 918
Mudasir Mirza Avatar asked Mar 14 '13 00:03

Mudasir Mirza


1 Answers

You can make use of $syslogfacility-text (see docs) - it allows you to easily filter log messages by predicates.

So, on the client side, it would be smth like:

hostname = "stage-server"
formatter = logging.Formatter('{}:%(asctime)s %(name)s: %(levelname)s %(message)s'.format(hostname), '%b %e %H:%M:%S')

And in you rsyslog.conf:

if $syslogfacility-text == 'stage-server' then /var/log/stage-server/my.log

Hope that helps.

like image 189
alecxe Avatar answered Sep 21 '22 10:09

alecxe