You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.5 KiB
98 lines
2.5 KiB
#!/usr/bin/env python2
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""Youtubedlg module responsible for handling the log stuff. """
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
import os.path
|
|
from time import strftime
|
|
|
|
from .utils import (
|
|
os_path_exists,
|
|
get_encoding,
|
|
check_path
|
|
)
|
|
|
|
|
|
class LogManager(object):
|
|
|
|
"""Simple log manager for youtube-dl.
|
|
|
|
This class is mainly used to log the youtube-dl STDERR.
|
|
|
|
Attributes:
|
|
LOG_FILENAME (string): Filename of the log file.
|
|
TIME_TEMPLATE (string): Custom template to log the time.
|
|
MAX_LOGSIZE (int): Maximum size(Bytes) of the log file.
|
|
|
|
Args:
|
|
config_path (string): Absolute path where LogManager should
|
|
store the log file.
|
|
|
|
add_time (boolean): If True LogManager will also log the time.
|
|
|
|
"""
|
|
|
|
LOG_FILENAME = "log"
|
|
TIME_TEMPLATE = "[{time}] {error_msg}"
|
|
MAX_LOGSIZE = 524288 # Bytes
|
|
|
|
def __init__(self, config_path, add_time=False):
|
|
self.config_path = config_path
|
|
self.add_time = add_time
|
|
self.log_file = os.path.join(config_path, self.LOG_FILENAME)
|
|
self._encoding = get_encoding()
|
|
self._init_log()
|
|
self._auto_clear_log()
|
|
|
|
def log_size(self):
|
|
"""Return log file size in Bytes. """
|
|
if not os_path_exists(self.log_file):
|
|
return 0
|
|
|
|
return os.path.getsize(self.log_file)
|
|
|
|
def clear(self):
|
|
"""Clear log file. """
|
|
self._write('', 'w')
|
|
|
|
def log(self, data):
|
|
"""Log data to the log file.
|
|
|
|
Args:
|
|
data (string): String to write to the log file.
|
|
|
|
"""
|
|
if isinstance(data, basestring):
|
|
self._write(data + '\n', 'a')
|
|
|
|
def _write(self, data, mode):
|
|
"""Write data to the log file.
|
|
|
|
That's the main method for writing to the log file.
|
|
|
|
Args:
|
|
data (string): String to write on the log file.
|
|
mode (string): Can be any IO mode supported by python.
|
|
|
|
"""
|
|
check_path(self.config_path)
|
|
|
|
with open(self.log_file, mode) as log:
|
|
if mode == 'a' and self.add_time:
|
|
msg = self.TIME_TEMPLATE.format(time=strftime('%c'), error_msg=data)
|
|
else:
|
|
msg = data
|
|
|
|
log.write(msg.encode(self._encoding, 'ignore'))
|
|
|
|
def _init_log(self):
|
|
"""Initialize the log file if not exist. """
|
|
if not os_path_exists(self.log_file):
|
|
self._write('', 'w')
|
|
|
|
def _auto_clear_log(self):
|
|
"""Auto clear the log file. """
|
|
if self.log_size() > self.MAX_LOGSIZE:
|
|
self.clear()
|