From a537f5f0fbc215f12fdeb66e005e8e1dcb56e7e4 Mon Sep 17 00:00:00 2001 From: Erickson Silva Date: Tue, 16 Jun 2015 19:54:43 -0300 Subject: [PATCH] Implementa log do exception da análise sintática --- src/PortGlosa.py | 3 ++- src/TraduzSentencas.py | 50 +++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/PortGlosa.py b/src/PortGlosa.py index 463f525..83c8825 100644 --- a/src/PortGlosa.py +++ b/src/PortGlosa.py @@ -16,7 +16,8 @@ tradutor = TraduzSentencas() dicionario = LerDicionarios() taxas = [] -def traduzir(texto, threads=False, taxa_qualidade=False): +def traduzir(texto, log=None, threads=False, taxa_qualidade=False): + tradutor.set_level(log) if log != None else tradutor.desativar_logging() if texto.isspace() or texto == "": return "ESCOLHER TEXTO CERTO" diff --git a/src/TraduzSentencas.py b/src/TraduzSentencas.py index c26e553..61a0e94 100644 --- a/src/TraduzSentencas.py +++ b/src/TraduzSentencas.py @@ -9,8 +9,12 @@ import alexp from AplicaRegras import * import logging +import logging.handlers import traceback +import subprocess import re, string +import getopt +import sys class TraduzSentencas(object): '''Realiza a tradução do texto em português para glosa @@ -20,10 +24,8 @@ class TraduzSentencas(object): '''Instancia os aplicadores de regras e sinônimos. ''' self.aplic_regras = AplicaRegras() - #logging.basicConfig(filename='/tmp/vlibras-translate.log', - # format='%(asctime)s - %(levelname)s:\n\n%(message)s\n\n\n##############################################\n\n', - # level=logging.ERROR) - + self.check_level() + def iniciar_traducao(self, sentenca, taxa=False): '''Metódo responsável por executar todos componentes necessários para a geração da glosa. ''' @@ -31,12 +33,12 @@ class TraduzSentencas(object): has_sintatica = True analise_sintatica = alexp.run(sentenca) except Exception as ex: - #self.salvar_log(str(traceback.format_exc())) + self.salvar_log(str(traceback.format_exc())) analise_sintatica = None has_sintatica = False analise_morfologica = alexp.getAnaliseMorfologica() - + if (isinstance(analise_sintatica,type(None))): regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica) else: @@ -59,7 +61,41 @@ class TraduzSentencas(object): def salvar_log(self, erro): '''Salva traceback de uma excessão do analisador sintático ''' - logging.error(erro) + logger = logging.getLogger('error-feedback') + logger.propagate = False + logger.error(erro) + + def criar_logger_error(self): + error_log = logging.getLogger('error-feedback') + error_log.setLevel(logging.ERROR) + ##print os.path.dirname(__file__) -- Salvar no direitorio do arquivo .py? + error_handler = logging.handlers.RotatingFileHandler('/var/tmp/vlibras-translate.log', maxBytes=1024, backupCount=5) + formatter = logging.Formatter('%(asctime)s - %(levelname)s:\n\n%(message)s\n\n\n##############################################\n\n') + error_handler.setFormatter(formatter) + error_log.addHandler(error_handler) + + def check_level(self): + for opt in sys.argv[1:]: + if "--log" in opt: + self.set_level(opt[6:]) + return + self.desativar_logging() + + def set_level(self, level): + numeric_level = getattr(logging, level.upper(), None) + if not isinstance(numeric_level, int): + raise ValueError('Nível de log inválido: %s' % level) + logging.disable(logging.NOTSET) + logging.getLogger().setLevel(numeric_level) + if numeric_level == 40 or numeric_level == 10: + self.criar_logger_error() + + def desativar_logging(self): + logging.disable(logging.DEBUG) + logging.disable(logging.INFO) + logging.disable(logging.WARNING) + logging.disable(logging.ERROR) + logging.disable(logging.CRITICAL) def gerar_metrica_qualidade(self, lista): #TODO: resolver path do arquivo -- libgit2 0.21.2