blob: 25a06718ea47273cff70a0e14404cd03980dba21 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# -*- coding: utf-8 -*-
# streamtologger.py
# Copyright (C) 2013 LEAP
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
Stream object that redirects writes to a logger instance.
"""
import logging
class StreamToLogger(object):
"""
Fake file-like stream object that redirects writes to a logger instance.
Credits to:
http://www.electricmonk.nl/log/2011/08/14/\
redirect-stdout-and-stderr-to-a-logger-in-python/
"""
def __init__(self, logger, log_level=logging.INFO):
"""
Constructor, defines the logger and level to use to log messages.
:param logger: logger object to log messages.
:type logger: logging.Handler
:param log_level: the level to use to log messages through the logger.
:type log_level: int
look at logging-levels in 'logging' docs.
"""
self._logger = logger
self._log_level = log_level
def write(self, data):
"""
Simulates the 'write' method in a file object.
It writes the data receibed in buf to the logger 'self._logger'.
:param data: data to write to the 'file'
:type data: str
"""
for line in data.rstrip().splitlines():
self._logger.log(self._log_level, line.rstrip())
def flush(self):
"""
Dummy method. Needed to replace the twisted.log output.
"""
pass
|