From 2dd5ab94eee8e2f78bfd5331fd18e20e25b29981 Mon Sep 17 00:00:00 2001 From: Remy Date: Wed, 10 Aug 2011 05:49:25 +0800 Subject: [PATCH] Fixed bug with log page not displaying if non-utf8 characters --- data/css/style.css | 2 +- data/interfaces/default/logs.html | 23 +++++++++-------------- headphones/__init__.py | 2 ++ headphones/helpers.py | 9 +++++++-- headphones/logger.py | 24 ++++++++++++++---------- headphones/webserve.py | 8 +------- 6 files changed, 34 insertions(+), 34 deletions(-) diff --git a/data/css/style.css b/data/css/style.css index 511c8ae7..c8b0eb22 100755 --- a/data/css/style.css +++ b/data/css/style.css @@ -190,7 +190,7 @@ table#log_table { background-color: white; } table#log_table th#timestamp { text-align: left; min-width: 165px; } table#log_table th#level { text-align: left; min-width: 75px; } -table#log_table th#message { text-align: left; min-width: 200px; } +table#log_table th#message { text-align: left; min-width: 500px; } table#upcoming_table th#albumart { text-align: center; min-width: 50px; } table#upcoming_table th#albumname { text-align: center; min-width: 200px; } diff --git a/data/interfaces/default/logs.html b/data/interfaces/default/logs.html index cc6436f3..98004034 100644 --- a/data/interfaces/default/logs.html +++ b/data/interfaces/default/logs.html @@ -15,23 +15,18 @@ %for line in lineList: <% - out_tuple = helpers.extract_logline(line) + timestamp, message, level, threadname = line + + if level == 'WARNING' or level == 'ERROR': + grade = 'X' + else: + grade = 'Z' %> - %if out_tuple: - <% - if out_tuple[1] == 'DEBUG': - continue - elif out_tuple[1] == 'WARNING' or out_tuple[1] == 'ERROR': - grade = 'X' - else: - grade = 'Z' - %> - ${out_tuple[0]} - ${out_tuple[1]} - ${out_tuple[3].decode('utf-8')} + ${timestamp} + ${level} + ${message} - %endif %endfor diff --git a/headphones/__init__.py b/headphones/__init__.py index 47e8ed29..4671177a 100644 --- a/headphones/__init__.py +++ b/headphones/__init__.py @@ -37,6 +37,8 @@ CFG = None DB_FILE = None LOG_DIR = None +LOG_LIST = [] + CACHE_DIR = None HTTP_PORT = None diff --git a/headphones/helpers.py b/headphones/helpers.py index 9dc3aa10..4ecc6941 100644 --- a/headphones/helpers.py +++ b/headphones/helpers.py @@ -5,8 +5,6 @@ import re import headphones -from headphones import logger - def multikeysort(items, columns): comparers = [ ((itemgetter(col[1:].strip()), -1) if col.startswith('-') else (itemgetter(col.strip()), 1)) for col in columns] @@ -91,6 +89,10 @@ def today(): yyyymmdd = datetime.date.isoformat(today) return yyyymmdd +def now(): + now = datetime.datetime.now() + return now.strftime("%Y-%m-%d %H:%M:%S") + def bytes_to_mb(bytes): mb = int(bytes)/1048576 @@ -103,6 +105,9 @@ def replace_all(text, dic): return text def extract_data(s): + + from headphones import logger + #headphones default format pattern = re.compile(r'(?P.*?)\s\-\s(?P.*?)\s\[(?P.*?)\]', re.VERBOSE) match = pattern.match(s) diff --git a/headphones/logger.py b/headphones/logger.py index f861a4c3..93c77c57 100644 --- a/headphones/logger.py +++ b/headphones/logger.py @@ -4,6 +4,7 @@ import logging from logging import handlers import headphones +from headphones import helpers MAX_SIZE = 1000000 # 1mb MAX_FILES = 5 @@ -45,33 +46,36 @@ class RotatingLogger(object): l.addHandler(consolehandler) def log(self, message, level): - + logger = logging.getLogger('headphones') threadname = threading.currentThread().getName() - message = threadname + ' : ' + message - if level == 'debug': + if level != 'DEBUG': + headphones.LOG_LIST.insert(0, (helpers.now(), message, level, threadname)) + + message = threadname + ' : ' + message + + if level == 'DEBUG': logger.debug(message) - elif level == 'info': + elif level == 'INFO': logger.info(message) - elif level == 'warn': + elif level == 'WARN': logger.warn(message) else: logger.error(message) - headphones_log = RotatingLogger('headphones.log', MAX_SIZE, MAX_FILES) def debug(message): - headphones_log.log(message, level='debug') + headphones_log.log(message, level='DEBUG') def info(message): - headphones_log.log(message, level='info') + headphones_log.log(message, level='INFO') def warn(message): - headphones_log.log(message, level='warn') + headphones_log.log(message, level='WARN') def error(message): - headphones_log.log(message, level='error') + headphones_log.log(message, level='ERROR') diff --git a/headphones/webserve.py b/headphones/webserve.py index fd406306..779f6da0 100644 --- a/headphones/webserve.py +++ b/headphones/webserve.py @@ -231,13 +231,7 @@ class WebInterface(object): history.exposed = True def logs(self): - log_file = os.path.join(headphones.LOG_DIR, 'headphones.log') - if os.path.isfile(log_file): - fileHandle = open(log_file) - lineList = fileHandle.readlines() - fileHandle.close() - lineList.reverse() - return serve_template(templatename="logs.html", title="Log", lineList=lineList[0:500]) + return serve_template(templatename="logs.html", title="Log", lineList=headphones.LOG_LIST) logs.exposed = True def clearhistory(self, type=None):