Merge pull request #150 from fronzbot/fix-logging

Add improved logging functionality.
This commit is contained in:
Kevin Fronczak
2019-01-31 11:10:15 -08:00
committed by GitHub
3 changed files with 39 additions and 27 deletions
+13 -12
View File
@@ -25,16 +25,17 @@ from dateutil.parser import parse
from blinkpy import api
from blinkpy.sync_module import BlinkSyncModule
from blinkpy.helpers import errors as ERROR
from blinkpy.helpers import log
from blinkpy.helpers.util import (
create_session, merge_dicts, get_time, BlinkURLHandler,
BlinkAuthenticationException, RepeatLogHandler)
BlinkAuthenticationException)
from blinkpy.helpers.constants import (
BLINK_URL, LOGIN_URL, LOGIN_BACKUP_URL)
from blinkpy.helpers.constants import __version__
REFRESH_RATE = 30
_LOGGER = logging.getLogger('blinkpy')
_LOGGER = log.create_logger('blinkpy')
class Blink():
@@ -75,8 +76,8 @@ class Blink():
self.version = __version__
self.allow_duplicate_logs = allow_duplicate_logs
_LOGGER.addHandler(RepeatLogHandler())
_LOGGER.setLevel(loglevel)
self.loglevel = loglevel
self._reset_logger()
@property
def auth_header(self):
@@ -90,8 +91,8 @@ class Blink():
Method logs in and sets auth token, urls, and ids for future requests.
Essentially this is just a wrapper function for ease of use.
"""
if not self.allow_duplicate_logs:
self._reset_logger()
self._reset_logger()
if self._username is None or self._password is None:
if not self.login():
return
@@ -223,10 +224,6 @@ class Blink():
Use a list for multiple cameras.
:param stop: Page to stop on (~25 items per page. Default page 10).
"""
# Reset the handler so we don't filter out messages during this method.
if not self.allow_duplicate_logs:
self._reset_logger()
if since is None:
since_epochs = self.last_refresh
else:
@@ -293,6 +290,10 @@ class Blink():
def _reset_logger(self):
"""Reset the log handler."""
for handler in _LOGGER.handlers:
handler.close()
_LOGGER.removeHandler(handler)
_LOGGER.addHandler(RepeatLogHandler())
handler.close()
_LOGGER.setLevel(self.loglevel)
if self.allow_duplicate_logs:
_LOGGER.addHandler(logging.StreamHandler())
else:
_LOGGER.addHandler(log.RepeatLogHandler())
+26
View File
@@ -0,0 +1,26 @@
"""Module for blinkpy logging."""
import logging
def create_logger(name):
"""Create a logger instance."""
handler = RepeatLogHandler()
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)
return logger
class RepeatLogHandler(logging.StreamHandler):
"""Log handler for repeat entries."""
def __init__(self):
"""Initialize repeat log handler."""
super().__init__()
self.log_record = set()
def emit(self, record):
"""Ensure we only log a message once."""
if record.msg not in self.log_record:
self.log_record.add(record.msg)
super().emit(record)
-15
View File
@@ -121,18 +121,3 @@ class BlinkURLHandler():
self.networks_url = "{}/networks".format(self.base_url)
self.video_url = "{}/api/v2/videos".format(self.base_url)
_LOGGER.debug("Setting base url to %s.", self.base_url)
class RepeatLogHandler(logging.StreamHandler):
"""Log handler for repeat entries."""
def __init__(self):
"""Initialize repeat log handler."""
super().__init__()
self.log_record = set()
def emit(self, record):
"""Ensure we only log a message once."""
if record.msg not in self.log_record:
self.log_record.add(record.msg)
super().emit(record)