[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [nyx/master] Revise outputing logs to a file
commit 179a7dcd216661fa32a3ea300b9b1a7dd2c19cc7
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Tue Apr 28 09:49:51 2015 -0700
Revise outputing logs to a file
Moving this to its own simple class. Much nicer.
---
nyx/log_panel.py | 38 +++-----------------------------------
nyx/util/log.py | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 35 deletions(-)
diff --git a/nyx/log_panel.py b/nyx/log_panel.py
index f250084..44a2b2a 100644
--- a/nyx/log_panel.py
+++ b/nyx/log_panel.py
@@ -19,9 +19,8 @@ from stem.util import conf, log, str_tools
import nyx.arguments
import nyx.popups
-from nyx import __version__
from nyx.util import join, panel, tor_controller, ui_tools
-from nyx.util.log import TOR_RUNLEVELS, LogGroup, LogEntry, read_tor_log, condense_runlevels, days_since, log_file_path
+from nyx.util.log import TOR_RUNLEVELS, LogFileOutput, LogGroup, LogEntry, read_tor_log, condense_runlevels, days_since, log_file_path
ENTRY_INDENT = 2 # spaces an entry's message is indented after the first line
@@ -106,7 +105,7 @@ class LogPanel(panel.Panel, threading.Thread):
self.regex_filter = None # filter for presented log events (no filtering if None)
self.last_content_height = 0 # height of the rendered content when last drawn
- self._log_file = None # file log messages are saved to (skipped if None)
+ self._log_file = LogFileOutput(CONFIG['features.log_file'])
self.scroll = 0
self.set_pause_attr('_msg_log')
@@ -166,28 +165,6 @@ class LogPanel(panel.Panel, threading.Thread):
controller.add_status_listener(reset_listener)
- # opens log file if we'll be saving entries
-
- if CONFIG['features.log_file']:
- log_path = CONFIG['features.log_file']
-
- try:
- # make dir if the path doesn't already exist
-
- base_dir = os.path.dirname(log_path)
-
- if not os.path.exists(base_dir):
- os.makedirs(base_dir)
-
- self._log_file = open(log_path, 'a')
- log.notice('nyx %s opening log file (%s)' % (__version__, log_path))
- except IOError as exc:
- log.error('Unable to write to log file: %s' % exc.strerror)
- self._log_file = None
- except OSError as exc:
- log.error('Unable to write to log file: %s' % exc)
- self._log_file = None
-
def set_duplicate_visability(self, is_visible):
"""
Sets if duplicate log entries are collaped or expanded.
@@ -736,18 +713,9 @@ class LogPanel(panel.Panel, threading.Thread):
if event.type not in self.logged_events:
return
- # note event in the log file if we're saving them
-
- if self._log_file:
- try:
- self._log_file.write(event.display_message + '\n')
- self._log_file.flush()
- except IOError as exc:
- log.error('Unable to write to log file: %s' % exc.strerror)
- self._log_file = None
-
with self.vals_lock:
self._msg_log.add(event)
+ self._log_file.write(event.display_message)
# notifies the display that it has new content
diff --git a/nyx/util/log.py b/nyx/util/log.py
index 4df50c0..a2e3820 100644
--- a/nyx/util/log.py
+++ b/nyx/util/log.py
@@ -3,6 +3,7 @@ Logging utilities, primiarily short aliases for logging a message at various
runlevels.
"""
+import os
import time
import threading
@@ -10,6 +11,7 @@ import stem.util.conf
import stem.util.log
import stem.util.system
+import nyx
import nyx.util
try:
@@ -271,6 +273,39 @@ class LogEntry(object):
return hash(self.display_message)
+class LogFileOutput(object):
+ """
+ File where log messages we receive are written. If unable to do so then a
+ notification is logged and further write attempts are skipped.
+ """
+
+ def __init__(self, path):
+ self._file = None
+
+ if path:
+ try:
+ path_dir = os.path.dirname(path)
+
+ if not os.path.exists(path_dir):
+ os.makedirs(path_dir)
+
+ self._file = open(path, 'a')
+ notice('nyx %s opening log file (%s)' % (nyx.__version__, path))
+ except IOError as exc:
+ error('Unable to write to log file: %s' % exc.strerror)
+ except OSError as exc:
+ error('Unable to write to log file: %s' % exc)
+
+ def write(self, msg):
+ if self._file:
+ try:
+ self._file.write(msg + '\n')
+ self._file.flush()
+ except IOError as exc:
+ error('Unable to write to log file: %s' % exc.strerror)
+ self._file = None
+
+
def trace(msg, **attr):
_log(stem.util.log.TRACE, msg, **attr)
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits