From: Jean-Philippe ARGAUD Date: Mon, 10 Mar 2014 14:18:43 +0000 (+0100) Subject: Moving name of Logging to ExtendedLogging X-Git-Tag: V7_4_0rc1~17^2~4 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=d594a58b0700bbf2c534dfd9dee82787cc2484fe;p=modules%2Fadao.git Moving name of Logging to ExtendedLogging --- diff --git a/src/daComposant/daCore/ExtendedLogging.py b/src/daComposant/daCore/ExtendedLogging.py new file mode 100644 index 0000000..43406bd --- /dev/null +++ b/src/daComposant/daCore/ExtendedLogging.py @@ -0,0 +1,143 @@ +#-*-coding:iso-8859-1-*- +# +# Copyright (C) 2008-2013 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D + +__doc__ = """ + Ce module permet de mettre en place un logging utilisable partout dans + l'application, par défaut à la console, et si nécessaire dans un fichier. + + Il doit être appelé en premier dans AssimilationStudy (mais pas directement + dans les applications utilisateurs), en l'important et en instanciant un + objet : + import ExtendedLogging ; ExtendedLogging.ExtendedLogging() + + Par défaut, seuls les messages du niveau WARNING ou au-delà sont disponibles + (donc les simples messages d'info ne sont pas disponibles), ce que l'on peut + changer à l'instanciation avec le mot-clé "level" : + import ExtendedLogging ; ExtendedLogging.ExtendedLogging(level=20) + + On peut éventuellement demander à l'objet de sortir aussi les messages dans + un fichier (noms par défaut : AssimilationStudy.log, niveau NOTSET) : + import ExtendedLogging ; ExtendedLogging.ExtendedLogging().setLogfile() + + Si on veut changer le nom du fichier ou le niveau global de message, il faut + récupérer l'instance et appliquer les méthodes : + import ExtendedLogging + log = ExtendedLogging.ExtendedLogging() + import logging + log.setLevel(logging.DEBUG) + log.setLogfile(filename="toto.log", filemode="a", level=logging.WARNING) + et on change éventuellement le niveau avec : + log.setLogfileLevel(logging.INFO) + + Ensuite, n'importe où dans les applications, il suffit d'utiliser le module + "logging" (avec un petit "l") : + import logging + log = logging.getLogger(NAME) # Avec rien (recommandé) ou un nom NAME + log.critical("...") + log.error("...") + log.warning("...") + log.info("...") + log.debug("...") + ou encore plus simplement : + import logging + logging.info("...") + + Dans une application, à n'importe quel endroit et autant de fois qu'on veut, + on peut changer le niveau global de message en utilisant par exemple : + import logging + log = logging.getLogger(NAME) # Avec rien (recommandé) ou un nom NAME + log.setLevel(logging.DEBUG) + + On rappelle les niveaux (attributs de "logging") et leur ordre : + NOTSET=0 < DEBUG=10 < INFO=20 < WARNING=30 < ERROR=40 < CRITICAL=50 +""" +__author__ = "Jean-Philippe ARGAUD" + +import os +import sys +import logging +from PlatformInfo import PlatformInfo + +LOGFILE = os.path.join(os.path.abspath(os.curdir),"AssimilationStudy.log") + +# ============================================================================== +class ExtendedLogging: + def __init__(self, level=logging.WARNING): + """ + Initialise un logging à la console pour TOUS les niveaux de messages. + """ + logging.basicConfig( + format = '%(levelname)-8s %(message)s', + level = level, + stream = sys.stdout, + ) + self.__logfile = None + # + # Initialise l'affichage de logging + # --------------------------------- + p = PlatformInfo() + # + logging.info( "--------------------------------------------------" ) + logging.info( "Lancement de "+p.getName()+" "+p.getVersion() ) + logging.info( "--------------------------------------------------" ) + logging.info( "Versions logicielles :" ) + logging.info( "- Python "+p.getPythonVersion() ) + logging.info( "- Numpy "+p.getNumpyVersion() ) + logging.info( "- Scipy "+p.getScipyVersion() ) + logging.info( "" ) + +# def setLogfileLevel(self, level=logging.NOTSET ): +# """ +# Permet de changer globalement le niveau des messages disponibles. +# """ +# logging.getLogger().setLevel(level) +# + def setLogfile(self, filename=LOGFILE, filemode="w", level=logging.NOTSET): + """ + Permet de disposer des messages dans un fichier EN PLUS de la console. + """ + if self.__logfile is not None: + # Supprime le précédent mode de stockage fichier s'il exsitait + logging.getLogger().removeHandler(self.__logfile) + self.__logfile = logging.FileHandler(filename, filemode) + self.__logfile.setLevel(level) + self.__logfile.setFormatter( + logging.Formatter('%(asctime)s %(levelname)-8s %(message)s', + '%d %b %Y %H:%M:%S')) + logging.getLogger().addHandler(self.__logfile) + + def setLogfileLevel(self, level=logging.NOTSET ): + """ + Permet de changer le niveau des messages stockés en fichier. Il ne sera + pris en compte que s'il est supérieur au niveau global. + """ + self.__logfile.setLevel(level) + + def getLevel(self): + """ + Renvoie le niveau de logging sous forme texte + """ + return logging.getLevelName( logging.getLogger().getEffectiveLevel() ) + +# ============================================================================== +if __name__ == "__main__": + print '\n AUTODIAGNOSTIC \n' diff --git a/src/daComposant/daCore/Logging.py b/src/daComposant/daCore/Logging.py deleted file mode 100644 index 860f77b..0000000 --- a/src/daComposant/daCore/Logging.py +++ /dev/null @@ -1,143 +0,0 @@ -#-*-coding:iso-8859-1-*- -# -# Copyright (C) 2008-2013 EDF R&D -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D - -__doc__ = """ - Ce module permet de mettre en place un logging utilisable partout dans - l'application, par défaut à la console, et si nécessaire dans un fichier. - - Il doit être appelé en premier dans AssimilationStudy (mais pas directement - dans les applications utilisateurs), en l'important et en instanciant un - objet : - import Logging ; Logging.Logging() - - Par défaut, seuls les messages du niveau WARNING ou au-delà sont disponibles - (donc les simples messages d'info ne sont pas disponibles), ce que l'on peut - changer à l'instanciation avec le mot-clé "level" : - import Logging ; Logging.Logging(level=20) - - On peut éventuellement demander à l'objet de sortir aussi les messages dans - un fichier (noms par défaut : AssimilationStudy.log, niveau NOTSET) : - import Logging ; Logging.Logging().setLogfile() - - Si on veut changer le nom du fichier ou le niveau global de message, il faut - récupérer l'instance et appliquer les méthodes : - import Logging - log = Logging.Logging() - import logging - log.setLevel(logging.DEBUG) - log.setLogfile(filename="toto.log", filemode="a", level=logging.WARNING) - et on change éventuellement le niveau avec : - log.setLogfileLevel(logging.INFO) - - Ensuite, n'importe où dans les applications, il suffit d'utiliser le module - "logging" (avec un petit "l") : - import logging - log = logging.getLogger(NAME) # Avec rien (recommandé) ou un nom NAME - log.critical("...") - log.error("...") - log.warning("...") - log.info("...") - log.debug("...") - ou encore plus simplement : - import logging - logging.info("...") - - Dans une application, à n'importe quel endroit et autant de fois qu'on veut, - on peut changer le niveau global de message en utilisant par exemple : - import logging - log = logging.getLogger(NAME) # Avec rien (recommandé) ou un nom NAME - log.setLevel(logging.DEBUG) - - On rappelle les niveaux (attributs de "logging") et leur ordre : - NOTSET=0 < DEBUG=10 < INFO=20 < WARNING=30 < ERROR=40 < CRITICAL=50 -""" -__author__ = "Jean-Philippe ARGAUD" - -import os -import sys -import logging -from PlatformInfo import PlatformInfo - -LOGFILE = os.path.join(os.path.abspath(os.curdir),"AssimilationStudy.log") - -# ============================================================================== -class Logging: - def __init__(self, level=logging.WARNING): - """ - Initialise un logging à la console pour TOUS les niveaux de messages. - """ - logging.basicConfig( - format = '%(levelname)-8s %(message)s', - level = level, - stream = sys.stdout, - ) - self.__logfile = None - # - # Initialise l'affichage de logging - # --------------------------------- - p = PlatformInfo() - # - logging.info( "--------------------------------------------------" ) - logging.info( "Lancement de "+p.getName()+" "+p.getVersion() ) - logging.info( "--------------------------------------------------" ) - logging.info( "Versions logicielles :" ) - logging.info( "- Python "+p.getPythonVersion() ) - logging.info( "- Numpy "+p.getNumpyVersion() ) - logging.info( "- Scipy "+p.getScipyVersion() ) - logging.info( "" ) - -# def setLogfileLevel(self, level=logging.NOTSET ): -# """ -# Permet de changer globalement le niveau des messages disponibles. -# """ -# logging.getLogger().setLevel(level) -# - def setLogfile(self, filename=LOGFILE, filemode="w", level=logging.NOTSET): - """ - Permet de disposer des messages dans un fichier EN PLUS de la console. - """ - if self.__logfile is not None: - # Supprime le précédent mode de stockage fichier s'il exsitait - logging.getLogger().removeHandler(self.__logfile) - self.__logfile = logging.FileHandler(filename, filemode) - self.__logfile.setLevel(level) - self.__logfile.setFormatter( - logging.Formatter('%(asctime)s %(levelname)-8s %(message)s', - '%d %b %Y %H:%M:%S')) - logging.getLogger().addHandler(self.__logfile) - - def setLogfileLevel(self, level=logging.NOTSET ): - """ - Permet de changer le niveau des messages stockés en fichier. Il ne sera - pris en compte que s'il est supérieur au niveau global. - """ - self.__logfile.setLevel(level) - - def getLevel(self): - """ - Renvoie le niveau de Logging sous forme texte - """ - return logging.getLevelName( logging.getLogger().getEffectiveLevel() ) - -# ============================================================================== -if __name__ == "__main__": - print '\n AUTODIAGNOSTIC \n'