]> mj.ucw.cz Git - eval.git/blobdiff - t/moe/log.py
Made ConfigTree.fix take list os well, added test
[eval.git] / t / moe / log.py
index c2ab4d23fd575cd2d5cdcdb74c36cfd2657617de..9a7f9d8c4256398a3bb5d874289aa58516d95d1c 100644 (file)
@@ -1,9 +1,24 @@
 #!/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
 
+logging.addLevelName(5,'DDEBUG')
+
 
 class Loggers(Logger):
   """Defines several logs:
@@ -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."
@@ -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`."""