Merge pull request #150 from fronzbot/fix-logging
Add improved logging functionality.
This commit is contained in:
+13
-12
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user