]> mj.ucw.cz Git - moe.git/blobdiff - t/moe/log.py
Added unfix(), corrected fix()
[moe.git] / t / moe / log.py
index c2ab4d23fd575cd2d5cdcdb74c36cfd2657617de..3fcac226d3f286bc1666b0aa881de78455197ab3 100644 (file)
@@ -1,8 +1,23 @@
 #!/usr/bin/env python
 
+"""
+
+`Loggers` is a collection of logggers for :class:`~moe.eval.Eval`, initializing 4 subloggers (see class description).
+
+Use as `e.log.debug(...)` for main log that goes both to `test` and `main` log,
+`e.log.test.debug(...)` for individual logs.
+
+.. :data:: DDEBUG = 5
+       Very verbose debugging level
+
+"""
+
+
 import sys, os
 import logging 
-from logging import Logger, StreamHandler
+from logging import Logger, StreamHandler, Formatter
+
+logging.addLevelName(5,'DDEBUG')
 
 
 class Loggers(Logger):
@@ -17,10 +32,8 @@ class Loggers(Logger):
   `self.test` 
     per-test log, initially no handler, to be directed to file like `{TEST}.log`
 
-  Currently, the logs and fd's get never closed. 
-
-  TODO: formatters
-  WARN: Currently, the module changes fd's 1 and 2, this is a global change.
+  .. note:: Currently, the logs and fd's get never closed. 
+  .. warning:: `Loggers.open_eval_log` changes global fd's 1 and 2 by default.
   """
   def __init__(self):
     "Initialize loggers as described in class description."
@@ -39,7 +52,7 @@ class Loggers(Logger):
     self.test_file = None
     # user progress logger  
     self.user = Logger('user')
-    self.eval.addHandler(StreamHandler(self.orig_stdout_file))
+    self.user.addHandler(StreamHandler(self.orig_stdout_file))
  
     self.addHandler(self.test)
     self.addHandler(self.eval)
@@ -49,20 +62,25 @@ class Loggers(Logger):
     """Open user (progress) logfile. Leaves logging to stdout active."""
     h = StreamHandler(open(filename, 'w', 0))
     h.setFormatter(Formatter('%(message)s'))
+    self.user.setLevel(level)
     self.user.addHandler(h)
     self.user.debug('Logging started')
 
   def open_eval_log(self, filename, level, redirect_fds = True):
-    """Open user (progress) logfile. 
-    Leaves logging to stderr active. If told to, redirects fd's 1 and 2 to this file."""
+    """Open main logfile. 
+    Leaves logging to stderr active. If told to, redirects fd's 1 and 2 to this file.
+    Sets level of both `self.eval` and `self`."""
     self.eval_file = open(filename, 'w', 0)
     self.eval_handler = StreamHandler(self.eval_file)
-    self.eval_handler.setFormatter(Formatter('%(message)s'))
-    self.user.addHandler(self.eval_handler)
+    self.eval_handler.setFormatter(Formatter('%(asctime)s [%(levelno)s] %(message)s'))
+    self.eval.addHandler(self.eval_handler)
     if redirect_fds:
       os.dup2(self.eval_file.fileno(), 1)
       os.dup2(self.eval_file.fileno(), 2)
-    self.user.debug('Logging started')
+    self.eval.setLevel(level)
+    self.setLevel(level)
+    self.eval.debug('Logging started')
+
 
   def open_test_log(self, filename, level):
     """Open per-test log file, like "{TEST}.log". Also set handler level to `level`."""