Create and use class_logger() utility function

This commit is contained in:
Neil Booth 2018-07-12 15:42:59 +08:00 committed by Vivek Teega
parent 3afa403a08
commit 1d664fa5d7
9 changed files with 24 additions and 27 deletions

View File

@ -8,9 +8,10 @@
'''Class for server environment configuration and defaults.'''
import logging
from os import environ
from electrumx.lib.util import class_logger
class EnvBase(object):
'''Wraps environment configuration.'''
@ -19,8 +20,7 @@ class EnvBase(object):
pass
def __init__(self):
self.logger = logging.getLogger(__name__)\
.getChild(self.__class__.__name__)
self.logger = class_logger(__name__, self.__class__.__name__)
self.allow_root = self.boolean('ALLOW_ROOT', False)
self.host = self.default('HOST', 'localhost')
self.rpc_host = self.default('RPC_HOST', 'localhost')

View File

@ -6,13 +6,14 @@
# and warranty status of this software.
import asyncio
import logging
import os
import signal
import sys
import time
from functools import partial
from electrumx.lib.util import class_logger
class ServerBase(object):
'''Base class server implementation.
@ -36,8 +37,7 @@ class ServerBase(object):
'''Save the environment, perform basic sanity checks, and set the
event loop policy.
'''
self.logger = logging.getLogger(__name__)\
.getChild(self.__class__.__name__)
self.logger = class_logger(__name__, self.__class__.__name__)
self.env = env
# Sanity checks

View File

@ -38,6 +38,7 @@ from struct import pack, Struct
# Logging utilities
class ConnectionLogger(logging.LoggerAdapter):
'''Prepends a connection identifier to a logging message.'''
def process(self, msg, kwargs):
@ -53,12 +54,19 @@ class CompactFormatter(logging.Formatter):
def make_logger(name, *, handler, level):
'''Return the root ElectrumX logger.'''
logger = logging.getLogger(name)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
logger.propagate = False
return logger
def class_logger(path, classname):
'''Return a hierarchical logger for a class.'''
return logging.getLogger(path).getChild(classname)
# Method decorator. To be used for calculations that will always
# deliver the same result. The method cannot take any arguments
# and should be accessed as an attribute.

View File

@ -11,14 +11,13 @@
import array
import asyncio
import logging
from struct import pack, unpack
import time
from functools import partial
from electrumx.server.daemon import DaemonError
from electrumx.lib.hash import hash_to_str, HASHX_LEN
from electrumx.lib.util import chunks, formatted_time
from electrumx.lib.util import chunks, formatted_time, class_logger
import electrumx.server.db
@ -26,8 +25,7 @@ class Prefetcher(object):
'''Prefetches blocks (in the forward direction only).'''
def __init__(self, bp):
self.logger = logging.getLogger(__name__)\
.getChild(self.__class__.__name__)
self.logger = class_logger(__name__, self.__class__.__name__)
self.bp = bp
self.caught_up = False
# Access to fetched_height should be protected by the semaphore

View File

@ -10,7 +10,6 @@ daemon.'''
import asyncio
import json
import logging
import time
from calendar import timegm
from struct import pack
@ -18,7 +17,7 @@ from time import strptime
import aiohttp
from electrumx.lib.util import int_to_varint, hex_to_bytes
from electrumx.lib.util import int_to_varint, hex_to_bytes, class_logger
from electrumx.lib.hash import hex_str_to_hash
from aiorpcx import JSONRPC
@ -37,8 +36,7 @@ class Daemon(object):
'''Raised when the daemon returns an error in its results.'''
def __init__(self, env):
self.logger = logging.getLogger(__name__)\
.getChild(self.__class__.__name__)
self.logger = class_logger(__name__, self.__class__.__name__)
self.coin = env.coin
self.set_urls(env.coin.daemon_urls(env.daemon_url))
self._height = None

View File

@ -11,7 +11,6 @@
import array
import ast
import logging
import os
from struct import pack, unpack
from bisect import bisect_right
@ -42,8 +41,7 @@ class DB(object):
'''Raised on general DB errors generally indicating corruption.'''
def __init__(self, env):
self.logger = logging.getLogger(__name__)\
.getChild(self.__class__.__name__)
self.logger = util.class_logger(__name__, self.__class__.__name__)
self.env = env
self.coin = env.coin

View File

@ -13,7 +13,6 @@ import ast
import bisect
from collections import defaultdict
from functools import partial
import logging
from struct import pack, unpack
import electrumx.lib.util as util
@ -25,8 +24,7 @@ class History(object):
DB_VERSIONS = [0]
def __init__(self):
self.logger = logging.getLogger(__name__)\
.getChild(self.__class__.__name__)
self.logger = util.class_logger(__name__, self.__class__.__name__)
# For history compaction
self.max_hist_row_entries = 12500
self.unflushed = defaultdict(partial(array.array, 'I'))

View File

@ -9,11 +9,11 @@
import asyncio
import itertools
import logging
import time
from collections import defaultdict
from electrumx.lib.hash import hash_to_str, hex_str_to_hash
from electrumx.lib.util import class_logger
from electrumx.server.daemon import DaemonError
from electrumx.server.db import UTXO
@ -33,8 +33,7 @@ class MemPool(object):
'''
def __init__(self, bp, controller):
self.logger = logging.getLogger(__name__)\
.getChild(self.__class__.__name__)
self.logger = class_logger(__name__, self.__class__.__name__)
self.daemon = bp.daemon
self.controller = controller
self.coin = bp.coin

View File

@ -8,7 +8,6 @@
'''Peer management.'''
import asyncio
import logging
import random
import socket
import ssl
@ -19,7 +18,7 @@ from functools import partial
from aiorpcx import ClientSession, RPCError, SOCKSProxy, ConnectionError
from electrumx.lib.peer import Peer
from electrumx.lib.util import ConnectionLogger
from electrumx.lib.util import ConnectionLogger, class_logger
PEER_GOOD, PEER_STALE, PEER_NEVER, PEER_BAD = range(4)
@ -224,8 +223,7 @@ class PeerManager(object):
Issues a 'peers.subscribe' RPC to them and tells them our data.
'''
def __init__(self, env, controller):
self.logger = logging.getLogger(__name__)\
.getChild(self.__class__.__name__)
self.logger = class_logger(__name__, self.__class__.__name__)
# Initialise the Peer class
Peer.DEFAULT_PORTS = env.coin.PEER_DEFAULT_PORTS
self.env = env