Create blocksfree package for logger

The section of cppo containing the logging code has been moved to its own very
short module inside a (bare) Python package.  This is messily done for now, but
I wanted this to be a minimal commit.
This commit is contained in:
T. Joseph Carter 2017-07-07 02:21:42 -07:00
parent 60b9d1f3c6
commit 82d851e39a
3 changed files with 35 additions and 32 deletions

0
blocksfree/__init__.py Normal file
View File

33
blocksfree/logging.py Normal file
View File

@ -0,0 +1,33 @@
import sys
import logging
### LOGGING
# *sigh* No clean/simple way to use str.format() type log strings without
# jumping through a few hoops
class Message(object):
def __init__(self, fmt, args):
self.fmt = fmt
self.args = args
def __str__(self):
return self.fmt.format(*self.args)
class StyleAdapter(logging.LoggerAdapter):
def __init__(self, logger, extra=None):
super(StyleAdapter, self).__init__(logger, extra or {})
def log(self, level, msg, *args, **kwargs):
if self.isEnabledFor(level):
msg, kwargs = self.process(msg, kwargs)
self.logger._log(level, Message(str(msg), args), (), **kwargs)
log = StyleAdapter(logging.getLogger(__name__))
# Set up our logging facility
_handler = logging.StreamHandler(sys.stdout)
_formatter = logging.Formatter('%(levelname)s: %(message)s')
_handler.setFormatter(_formatter)
log.logger.addHandler(_handler)
log.setLevel(logging.DEBUG)

34
cppo
View File

@ -35,12 +35,13 @@ import errno
import uuid # for temp directory import uuid # for temp directory
import subprocess import subprocess
#import tempfile # not used, but should be for temp directory? #import tempfile # not used, but should be for temp directory?
import logging
import struct import struct
from typing import Sequence from typing import Sequence
from collections import namedtuple from collections import namedtuple
from binascii import a2b_hex, b2a_hex from binascii import a2b_hex, b2a_hex
from blocksfree.logging import log
class Globals: class Globals:
pass pass
@ -1010,38 +1011,7 @@ def hexdump(
return '\n'.join(out) return '\n'.join(out)
### LOGGING
# *sigh* No clean/simple way to use str.format() type log strings without
# jumping through a few hoops
class Message(object):
def __init__(self, fmt, args):
self.fmt = fmt
self.args = args
def __str__(self):
return self.fmt.format(*self.args)
class StyleAdapter(logging.LoggerAdapter):
def __init__(self, logger, extra=None):
super(StyleAdapter, self).__init__(logger, extra or {})
def log(self, level, msg, *args, **kwargs):
if self.isEnabledFor(level):
msg, kwargs = self.process(msg, kwargs)
self.logger._log(level, Message(str(msg), args), (), **kwargs)
log = StyleAdapter(logging.getLogger(__name__))
def main(args: list): def main(args: list):
# Set up our logging facility
handler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter('%(levelname)s: %(message)s')
handler.setFormatter(formatter)
log.logger.addHandler(handler)
log.setLevel(logging.DEBUG)
while True: # breaks when there are no more arguments starting with dash while True: # breaks when there are no more arguments starting with dash
if len(args) == 1: if len(args) == 1:
usage() usage()