Skip to content

Commit 25e86a9

Browse files
committed
Merge pull request binarymatt#75 from joeshaw/joeshaw-syslog
add support for logging to syslog
2 parents 2dc232f + 215f9f6 commit 25e86a9

File tree

3 files changed

+49
-18
lines changed

3 files changed

+49
-18
lines changed

pyres/__init__.py

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,49 @@
88
import sys
99
import logging
1010

11-
def setup_logging(log_level=logging.INFO, filename=None, stream=sys.stderr):
12-
if log_level == logging.NOTSET:
13-
return
14-
logger = logging.getLogger()
15-
logger.setLevel(log_level)
16-
if filename:
11+
def special_log_file(filename):
12+
if filename in ("stderr", "stdout"):
13+
return True
14+
if filename.startswith("syslog"):
15+
return True
16+
return False
17+
18+
def get_logging_handler(filename):
19+
if not filename:
20+
filename = "stderr"
21+
if filename == "stderr":
22+
handler = logging.StreamHandler(sys.stderr)
23+
elif filename == "stdout":
24+
handler = logging.StreamHandler(sys.stdout)
25+
elif filename.startswith("syslog"): # "syslog:local0"
26+
from logging.handlers import SysLogHandler
27+
facility_name = filename[7:] or 'user'
28+
facility = SysLogHandler.facility_names[facility_name]
29+
30+
if os.path.exists("/dev/log"):
31+
syslog_path = "/dev/log"
32+
elif os.path.exists("/var/run/syslog"):
33+
syslog_path = "/var/run/syslog"
34+
else:
35+
raise Exception("Unable to figure out the syslog socket path")
36+
37+
handler = SysLogHandler(syslog_path, facility)
38+
else:
1739
try:
1840
from logging.handlers import WatchedFileHandler
1941
handler = WatchedFileHandler(filename)
2042
except:
2143
from logging.handlers import RotatingFileHandler
2244
handler = RotatingFileHandler(filename,maxBytes=52428800,
2345
backupCount=7)
24-
else:
25-
handler = logging.StreamHandler(stream)
46+
return handler
47+
48+
def setup_logging(log_level=logging.INFO, filename=None):
49+
if log_level == logging.NOTSET:
50+
return
51+
logger = logging.getLogger()
52+
logger.setLevel(log_level)
53+
handler = get_logging_handler(filename)
2654
handler.setFormatter(logging.Formatter(
2755
'%(asctime)s %(levelname)-8s %(message)s', '%Y-%m-%d %H:%M:%S'))
2856
logger.addHandler(handler)

pyres/horde.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import datetime
99
import logging
1010
import logging.handlers
11-
from pyres import ResQ, Stat
11+
from pyres import ResQ, Stat, get_logging_handler, special_log_file
1212
from pyres.exceptions import NoQueueError
1313
from pyres.utils import OrderedDict
1414
from pyres.job import Job
@@ -25,10 +25,7 @@ def setup_logging(namespace='', log_level=logging.INFO, log_file=None):
2525
#logger = multiprocessing.log_to_stderr()
2626
logger.setLevel(log_level)
2727
format = '%(asctime)s %(levelname)s '+namespace+': %(message)s'
28-
if log_file:
29-
handler = logging.handlers.RotatingFileHandler(log_file, maxBytes=104857600, backupCount=5)
30-
else:
31-
handler = logging.StreamHandler()
28+
handler = get_logging_handler(log_file)
3229
handler.setFormatter(logging.Formatter((format)))
3330
logger.addHandler(handler)
3431
return logger
@@ -154,7 +151,10 @@ def clear_logger(self):
154151
def run(self):
155152
setproctitle('pyres_minion:%s: Starting' % (os.getppid(),))
156153
if self.log_path:
157-
self.log_file = os.path.join(self.log_path, 'minion-%s.log' % self.pid)
154+
if special_log_file(self.log_path):
155+
self.log_file = self.log_path
156+
else:
157+
self.log_file = os.path.join(self.log_path, 'minion-%s.log' % self.pid)
158158
namespace = 'minion:%s' % self.pid
159159
self.logger = setup_logging(namespace, self.log_level, self.log_file)
160160
#self.clear_logger()
@@ -268,7 +268,10 @@ def _add_minion(self):
268268
if hasattr(self,'logger'):
269269
self.logger.info('Adding minion')
270270
if self.log_file:
271-
log_path = os.path.dirname(self.log_file)
271+
if special_log_file(self.log_file):
272+
log_path = self.log_file
273+
else:
274+
log_path = os.path.dirname(self.log_file)
272275
else:
273276
log_path = None
274277
m = Minion(self.queues, self.server, self.password, log_level=self.logging_level, log_path=log_path)

pyres/scripts.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def pyres_manager():
2020
parser.add_option("-i", '--interval', dest='interval', default=None, help='the default time interval to sleep between runs')
2121
parser.add_option('-l', '--log-level', dest='log_level', default='info', help='log level. Valid values are "debug", "info", "warning", "error", "critical", in decreasing order of verbosity. Defaults to "info" if parameter not specified.')
2222
parser.add_option("--pool", type="int", dest="pool_size", default=1, help="Number of minions to spawn under the manager.")
23-
parser.add_option('-f', dest='logfile', help='If present, a logfile will be used.')
23+
parser.add_option('-f', dest='logfile', help='If present, a logfile will be used. "stderr", "stdout", and "syslog" are all special values.')
2424
parser.add_option('-p', dest='pidfile', help='If present, a pidfile will be used.')
2525
(options,args) = parser.parse_args()
2626

@@ -49,7 +49,7 @@ def pyres_scheduler():
4949
parser.add_option("--host", dest="host", default="localhost")
5050
parser.add_option("--port",dest="port",type="int", default=6379)
5151
parser.add_option('-l', '--log-level', dest='log_level', default='info', help='log level. Valid values are "debug", "info", "warning", "error", "critical", in decreasing order of verbosity. Defaults to "info" if parameter not specified.')
52-
parser.add_option('-f', dest='logfile', help='If present, a logfile will be used.')
52+
parser.add_option('-f', dest='logfile', help='If present, a logfile will be used. "stderr", "stdout", and "syslog" are all special values.')
5353
parser.add_option('-p', dest='pidfile', help='If present, a pidfile will be used.')
5454
(options,args) = parser.parse_args()
5555
log_level = getattr(logging, options.log_level.upper(),'INFO')
@@ -94,7 +94,7 @@ def pyres_worker():
9494
parser.add_option("--port",dest="port",type="int", default=6379)
9595
parser.add_option("-i", '--interval', dest='interval', default=None, help='the default time interval to sleep between runs')
9696
parser.add_option('-l', '--log-level', dest='log_level', default='info', help='log level. Valid values are "debug", "info", "warning", "error", "critical", in decreasing order of verbosity. Defaults to "info" if parameter not specified.')
97-
parser.add_option('-f', dest='logfile', help='If present, a logfile will be used.')
97+
parser.add_option('-f', dest='logfile', help='If present, a logfile will be used. "stderr", "stdout", and "syslog" are all special values.')
9898
parser.add_option('-p', dest='pidfile', help='If present, a pidfile will be used.')
9999
(options,args) = parser.parse_args()
100100

0 commit comments

Comments
 (0)