68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
import py
 | 
						|
import sys
 | 
						|
 | 
						|
class File(object): 
 | 
						|
    def __init__(self, f): 
 | 
						|
        assert hasattr(f, 'write')
 | 
						|
        assert isinstance(f, file) or not hasattr(f, 'open') 
 | 
						|
        self._file = f 
 | 
						|
 | 
						|
    def __call__(self, msg): 
 | 
						|
        print >>self._file, str(msg)
 | 
						|
 | 
						|
class Path(object): 
 | 
						|
    def __init__(self, filename, append=False, delayed_create=False,
 | 
						|
            buffering=1): 
 | 
						|
        self._append = append
 | 
						|
        self._filename = filename
 | 
						|
        self._buffering = buffering
 | 
						|
        if not delayed_create:
 | 
						|
            self._openfile()
 | 
						|
 | 
						|
    def _openfile(self):
 | 
						|
        mode = self._append and 'a' or 'w'
 | 
						|
        f = open(str(self._filename), mode, buffering=self._buffering)
 | 
						|
        self._file = f
 | 
						|
 | 
						|
    def __call__(self, msg):
 | 
						|
        if not hasattr(self, "_file"):
 | 
						|
            self._openfile()
 | 
						|
        print >> self._file, msg
 | 
						|
 | 
						|
def STDOUT(msg): 
 | 
						|
    print >>sys.stdout, str(msg) 
 | 
						|
 | 
						|
def STDERR(msg): 
 | 
						|
    print >>sys.stderr, str(msg)
 | 
						|
 | 
						|
class Syslog:
 | 
						|
    for priority in "LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG".split():
 | 
						|
        try:
 | 
						|
            exec("%s = py.std.syslog.%s" % (priority, priority))
 | 
						|
        except AttributeError:
 | 
						|
            pass
 | 
						|
    
 | 
						|
    def __init__(self, priority = None):
 | 
						|
        self.priority = self.LOG_INFO
 | 
						|
        if priority is not None:
 | 
						|
            self.priority = priority
 | 
						|
 | 
						|
    def __call__(self, msg):
 | 
						|
        py.std.syslog.syslog(self.priority, str(msg))
 | 
						|
        
 | 
						|
    
 | 
						|
def setconsumer(keywords, consumer): 
 | 
						|
    # normalize to tuples 
 | 
						|
    if isinstance(keywords, str): 
 | 
						|
        keywords = tuple(map(None, keywords.split()))
 | 
						|
    elif hasattr(keywords, 'keywords'): 
 | 
						|
        keywords = keywords.keywords 
 | 
						|
    elif not isinstance(keywords, tuple): 
 | 
						|
        raise TypeError("key %r is not a string or tuple" % (keywords,))
 | 
						|
    if consumer is not None and not callable(consumer): 
 | 
						|
        if not hasattr(consumer, 'write'): 
 | 
						|
            raise TypeError("%r should be None, callable or file-like" % (consumer,))
 | 
						|
        consumer = File(consumer)
 | 
						|
    py.log.Producer(keywords).set_consumer(consumer)
 | 
						|
 |