découpage des fichiers de log par chansons jouées.
authorpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Tue, 20 Apr 2010 13:33:24 +0000 (13:33 +0000)
committerpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Tue, 20 Apr 2010 13:33:24 +0000 (13:33 +0000)
git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@157 fe552daf-6dbe-4428-90eb-1537e0879342

src/app/log.py
src/app/minwii.py
src/app/synth.py

index e3a2182..725abac 100755 (executable)
@@ -22,6 +22,42 @@ hiddenEvents = {pygame.MOUSEMOTION:True,
                 #COLOVER:True,
                 }
 
+logsdir = os.path.join(os.path.expanduser('~'), 'minwii_logs')
+if not os.path.exists(logsdir) :
+    os.mkdir(logsdir)
+
+#logfile = os.path.join(logsdir, datetime.datetime.now().strftime('%Y-%m-%d-%H_%M_%S.log'))
+#logfile = open(logfile, 'w')
+
+
+class MinWiiStreamHandler(logging.StreamHandler) :
+    logfile = None
+    stream = None
+    env = []
+    
+    def __init__(self) :
+        logging.Handler.__init__(self)
+        if self.stream is None :
+            self.setNewStream()
+    
+    @classmethod
+    def setNewStream(cls) :
+        if cls.stream and not cls.stream.closed :
+            cls.stream.close()
+        logfile = os.path.join(logsdir, datetime.datetime.now().strftime('%Y-%m-%d-%H_%M_%S.log'))
+        cls.stream = open(logfile, 'a')
+            
+    def emit(self, record) :
+        if record.name == 'minwii.env' :
+            if record.getMessage()=='NEW_LOG_FILE' :
+                self.setNewStream()
+                for rec in self.env :
+                    logging.StreamHandler.emit(self, rec)
+                return
+            else :
+                self.env.append(record)
+        logging.StreamHandler.emit(self, record)
+
 class EventLoggerAdapter(logging.LoggerAdapter) :
     
     FORMAT = "EVT %(ticks)-10s %(eventName)-15s %(message)s"
@@ -43,25 +79,38 @@ class EventFilter :
     def filter(self, record) :
         return not hiddenEvents.has_key(record.eventType)
 
-logsdir = os.path.join(os.path.expanduser('~'), 'minwii_logs')
-if not os.path.exists(logsdir) :
-    os.mkdir(logsdir)
 
-logfile = os.path.join(logsdir, datetime.datetime.now().strftime('%Y-%m-%d-%H_%M_%S.log'))
-logfile = open(logfile, 'w')
+def initAppConsole() :
+    global console
+    console = logging.getLogger('minwii.console')
+    console.setLevel(logging.DEBUG)
+    handler = MinWiiStreamHandler()
+    handler.setFormatter(logging.Formatter('APP %(message)s'))
+    console.addHandler(handler)
+
+def initEnvLogger() :
+    global envLogger
+    envLogger = logging.getLogger('minwii.env')
+    envLogger.setLevel(logging.DEBUG)
+    handler = MinWiiStreamHandler()
+    handler.setFormatter(logging.Formatter('ENV %(message)s'))
+    envLogger.addHandler(handler)
+    
 
-console = logging.getLogger('minwii.console')
-console.setLevel(logging.DEBUG)
-handler = logging.StreamHandler(logfile)
-handler.setFormatter(logging.Formatter('APP %(message)s'))
-console.addHandler(handler)
+def initEventLogger():
+    _eventLogger = logging.getLogger('minwii.events')
+    _eventLogger.setLevel(logging.INFO)
+    _eventHandler = MinWiiStreamHandler()
+    _eventFormatter = logging.Formatter(EventLoggerAdapter.FORMAT)
+    _eventHandler.setFormatter(_eventFormatter)
+    _eventLogger.addHandler(_eventHandler)
+    _eventLogger.addFilter(EventFilter())
+    global eventLogger
+    eventLogger = EventLoggerAdapter(_eventLogger, {})
 
-_eventLogger = logging.getLogger('minwii.events')
-_eventLogger.setLevel(logging.INFO)
-_eventHandler = logging.StreamHandler(logfile)
-_eventFormatter = logging.Formatter(EventLoggerAdapter.FORMAT)
-_eventHandler.setFormatter(_eventFormatter)
-_eventLogger.addHandler(_eventHandler)
-_eventLogger.addFilter(EventFilter())
+def initLoggers() :
+    initAppConsole()
+    initEnvLogger()
+    initEventLogger()
 
-eventLogger = EventLoggerAdapter(_eventLogger, {})
+initLoggers()
index a0a9161..2475d66 100755 (executable)
@@ -18,21 +18,22 @@ from eventutils import EventDispatcher
 from musicxml import musicXml2Song
 from config import SONG_FILE_PATH
 from globals import PLAYING_MODES_DICT
-from log import console, LOG_FORMAT_VERSION
+from log import console, LOG_FORMAT_VERSION, envLogger
 
 
 class MinWii(object):
     
     def __init__(self, wiimoteSupport=True) :
-        console.info('winwii log format version : %s', LOG_FORMAT_VERSION)
+        envLogger.info('winwii log format version : %s', LOG_FORMAT_VERSION)
         self.wiimoteSupport = wiimoteSupport
         LaunchScreen()
         self.app = Desktop()
         self.synth = Synth()
         self.screenResolution = (1024,768)
-        console.info('résolution écran : %s', self.screenResolution)
+        envLogger.info('résolution écran : %s', self.screenResolution)
         self.nwiimotes = 0
         self.initWiimotes()
+        self.firstSong = True
     
     def initWiimotes(self) :
         if self.wiimoteSupport :
@@ -89,6 +90,10 @@ class MinWii(object):
             console.info("sortie de l'application")
         else :
             actual_wiimotes = self.WT.get_count()
+            if self.firstSong :
+                self.firstSong = False
+            else :
+                envLogger.info('NEW_LOG_FILE')
             console.info('chanson : %s', home.songFile)
             console.info('mode : %s', home.modeSelect.value)
             if actual_wiimotes is None :
index 1910643..eb19235 100755 (executable)
@@ -7,7 +7,7 @@ $URL$
 """
 from os.path import realpath, sep, exists
 from  fluidsynth import Synth as FSynth
-from log import console
+from log import console, envLogger
 import pygame
 import events
 
@@ -36,7 +36,7 @@ class Synth(FSynth) :
         self.fsid = self.sfload(sfPath)
         self._octaveAjusts = {}
         console.info('démarrage du synthétiseur')
-        console.info('soundfont : %s', sfPath)
+        envLogger.info('soundfont : %s', sfPath)
     
     def __del__(self) :
         console.info('arrêt du synthétiseur')