From bf8e32ebd2ba77489268ab6cf8c715bbd4d155b7 Mon Sep 17 00:00:00 2001
From: Lex Berezhny <lex@damoti.com>
Date: Sat, 19 Jan 2019 16:29:24 -0500
Subject: [PATCH] remove custom logging

---
 lbrynet/__init__.py             |   6 --
 lbrynet/custom_logger.py        | 109 --------------------------------
 lbrynet/extras/cli.py           |   1 +
 tests/unit/test_customLogger.py |  53 ----------------
 4 files changed, 1 insertion(+), 168 deletions(-)
 delete mode 100644 lbrynet/custom_logger.py
 delete mode 100644 tests/unit/test_customLogger.py

diff --git a/lbrynet/__init__.py b/lbrynet/__init__.py
index 1221c6c56..bded44fe3 100644
--- a/lbrynet/__init__.py
+++ b/lbrynet/__init__.py
@@ -1,10 +1,4 @@
-import logging
-from lbrynet.custom_logger import install_logger
-
-
 __name__ = "lbrynet"
 __version__ = "0.30.5"
 version = tuple(__version__.split('.'))
 
-install_logger()
-logging.getLogger(__name__).addHandler(logging.NullHandler())
diff --git a/lbrynet/custom_logger.py b/lbrynet/custom_logger.py
deleted file mode 100644
index 8e3499e42..000000000
--- a/lbrynet/custom_logger.py
+++ /dev/null
@@ -1,109 +0,0 @@
-import os
-import sys
-import inspect
-import logging
-TRACE = 5
-
-
-####
-# This code is copied from logging/__init__.py in the python source code
-####
-#
-# _srcfile is used when walking the stack to check when we've got the first
-# caller stack frame.
-#
-if hasattr(sys, 'frozen'):  # support for py2exe
-    _srcfile = "logging{}__init__{}".format(os.sep, __file__[-4:])
-elif __file__[-4:].lower() in ['.pyc', '.pyo']:
-    _srcfile = __file__[:-4] + '.py'
-else:
-    _srcfile = __file__
-_srcfile = os.path.normcase(_srcfile)
-
-
-def findCaller(srcfile=None):
-    """Returns the filename, line number and function name of the caller"""
-    srcfile = srcfile or _srcfile
-    f = inspect.currentframe()
-    # On some versions of IronPython, currentframe() returns None if
-    # IronPython isn't run with -X:Frames.
-    if f is not None:
-        f = f.f_back
-    rv = "(unknown file)", 0, "(unknown function)"
-    while hasattr(f, "f_code"):
-        co = f.f_code
-        filename = os.path.normcase(co.co_filename)
-        # ignore any function calls that are in this file
-        if filename == srcfile:
-            f = f.f_back
-            continue
-        rv = (filename, f.f_lineno, co.co_name)
-        break
-    return rv
-
-
-###
-
-class Logger(logging.Logger):
-    """A logger that has an extra `fail` method useful for handling twisted failures."""
-
-    def fail(self, callback=None, *args, **kwargs):
-        """Returns a function to log a failure from an errback.
-
-        The returned function appends the error message and extracts
-        the traceback from `err`.
-
-        Example usage:
-            d.addErrback(log.fail(), 'This is an error message')
-
-        Although odd, making the method call is necessary to extract
-        out useful filename and line number information; otherwise the
-        reported values are from inside twisted's deferred handling
-        code.
-
-        Args:
-            callback: callable to call after making the log. The first argument
-                will be the `err` from the deferred
-            args: extra arguments to pass into `callback`
-
-        Returns: a function that takes the following arguments:
-            err: twisted.python.failure.Failure
-            msg: the message to log, using normal logging string iterpolation.
-            msg_args: the values to substitute into `msg`
-            msg_kwargs: set `level` to change from the default ERROR severity. Other
-                keywoards are treated as normal log kwargs.
-        """
-        fn, lno, func = findCaller()
-
-        def _fail(err, msg, *msg_args, **msg_kwargs):
-            level = msg_kwargs.pop('level', logging.ERROR)
-            msg += ": %s"
-            msg_args += (err.getErrorMessage(),)
-            exc_info = (err.type, err.value, err.getTracebackObject())
-            record = self.makeRecord(
-                self.name, level, fn, lno, msg, msg_args, exc_info, func, msg_kwargs)
-            self.handle(record)
-            if callback:
-                try:
-                    return callback(err, *args, **kwargs)
-                except Exception:
-                    # log.fail is almost always called within an
-                    # errback. If callback fails and we didn't catch
-                    # the exception we would need to attach a second
-                    # errback to deal with that, which we will almost
-                    # never do and then we end up with an unhandled
-                    # error that will get swallowed by twisted
-                    self.exception('Failed to run callback')
-
-        return _fail
-
-    def trace(self, msg, *args, **kwargs):
-        if self.isEnabledFor(TRACE):
-            self._log(TRACE, msg, args, **kwargs)
-
-
-def install_logger():
-    current = logging.getLoggerClass()
-    if current is not Logger:
-        logging.setLoggerClass(Logger)
-        logging.addLevelName(TRACE, 'TRACE')
diff --git a/lbrynet/extras/cli.py b/lbrynet/extras/cli.py
index 1273890df..785ba565d 100644
--- a/lbrynet/extras/cli.py
+++ b/lbrynet/extras/cli.py
@@ -36,6 +36,7 @@ from lbrynet.extras.daemon.DaemonConsole import main as daemon_console, LBRYAPIC
 from lbrynet.extras.system_info import get_platform
 
 log = logging.getLogger(lbrynet_name)
+log.addHandler(logging.NullHandler())
 
 optional_path_getter_type = typing.Optional[typing.Callable[[], str]]
 
diff --git a/tests/unit/test_customLogger.py b/tests/unit/test_customLogger.py
deleted file mode 100644
index 66c4aa572..000000000
--- a/tests/unit/test_customLogger.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from io import StringIO
-import logging
-from unittest import mock
-from unittest import skipIf
-
-from twisted.internet import defer
-from twisted.trial import unittest
-
-from lbrynet import custom_logger
-from tests.test_utils import is_android
-
-
-class TestLogger(unittest.TestCase):
-    def raiseError(self):
-        raise Exception('terrible things happened')
-
-    def triggerErrback(self, callback=None):
-        d = defer.Deferred()
-        d.addCallback(lambda _: self.raiseError())
-        d.addErrback(self.log.fail(callback), 'My message')
-        d.callback(None)
-        return d
-
-    def setUp(self):
-        self.log = custom_logger.Logger('test')
-        self.stream = StringIO()
-        handler = logging.StreamHandler(self.stream)
-        handler.setFormatter(logging.Formatter("%(filename)s:%(lineno)d - %(message)s"))
-        self.log.addHandler(handler)
-
-    @skipIf(is_android(),
-                     'Test cannot pass on Android because the tests package is compiled '
-                     'which results in a different method call stack')
-    def test_can_log_failure(self):
-        def output_lines():
-            return self.stream.getvalue().split('\n')
-
-        # the line number could change if this file gets refactored
-        expected_first_line = 'test_customLogger.py:20 - My message: terrible things happened'
-
-        # testing the entirety of the message is futile as the
-        # traceback will depend on the system the test is being run on
-        # but hopefully these two tests are good enough
-        d = self.triggerErrback()
-        d.addCallback(lambda _: self.assertEquals(expected_first_line, output_lines()[0]))
-        d.addCallback(lambda _: self.assertEqual(10, len(output_lines())))
-        return d
-
-    def test_can_log_failure_with_callback(self):
-        callback = mock.Mock()
-        d = self.triggerErrback(callback)
-        d.addCallback(lambda _: callback.assert_called_once_with(mock.ANY))
-        return d