Commit a537f5f0fbc215f12fdeb66e005e8e1dcb56e7e4
1 parent
6534e77c
Exists in
master
and in
1 other branch
Implementa log do exception da análise sintática
Showing
2 changed files
with
45 additions
and
8 deletions
Show diff stats
src/PortGlosa.py
| ... | ... | @@ -16,7 +16,8 @@ tradutor = TraduzSentencas() |
| 16 | 16 | dicionario = LerDicionarios() |
| 17 | 17 | taxas = [] |
| 18 | 18 | |
| 19 | -def traduzir(texto, threads=False, taxa_qualidade=False): | |
| 19 | +def traduzir(texto, log=None, threads=False, taxa_qualidade=False): | |
| 20 | + tradutor.set_level(log) if log != None else tradutor.desativar_logging() | |
| 20 | 21 | if texto.isspace() or texto == "": |
| 21 | 22 | return "ESCOLHER TEXTO CERTO" |
| 22 | 23 | ... | ... |
src/TraduzSentencas.py
| ... | ... | @@ -9,8 +9,12 @@ |
| 9 | 9 | import alexp |
| 10 | 10 | from AplicaRegras import * |
| 11 | 11 | import logging |
| 12 | +import logging.handlers | |
| 12 | 13 | import traceback |
| 14 | +import subprocess | |
| 13 | 15 | import re, string |
| 16 | +import getopt | |
| 17 | +import sys | |
| 14 | 18 | |
| 15 | 19 | class TraduzSentencas(object): |
| 16 | 20 | '''Realiza a tradução do texto em português para glosa |
| ... | ... | @@ -20,10 +24,8 @@ class TraduzSentencas(object): |
| 20 | 24 | '''Instancia os aplicadores de regras e sinônimos. |
| 21 | 25 | ''' |
| 22 | 26 | self.aplic_regras = AplicaRegras() |
| 23 | - #logging.basicConfig(filename='/tmp/vlibras-translate.log', | |
| 24 | - # format='%(asctime)s - %(levelname)s:\n\n%(message)s\n\n\n##############################################\n\n', | |
| 25 | - # level=logging.ERROR) | |
| 26 | - | |
| 27 | + self.check_level() | |
| 28 | + | |
| 27 | 29 | def iniciar_traducao(self, sentenca, taxa=False): |
| 28 | 30 | '''Metódo responsável por executar todos componentes necessários para a geração da glosa. |
| 29 | 31 | ''' |
| ... | ... | @@ -31,12 +33,12 @@ class TraduzSentencas(object): |
| 31 | 33 | has_sintatica = True |
| 32 | 34 | analise_sintatica = alexp.run(sentenca) |
| 33 | 35 | except Exception as ex: |
| 34 | - #self.salvar_log(str(traceback.format_exc())) | |
| 36 | + self.salvar_log(str(traceback.format_exc())) | |
| 35 | 37 | analise_sintatica = None |
| 36 | 38 | has_sintatica = False |
| 37 | 39 | |
| 38 | 40 | analise_morfologica = alexp.getAnaliseMorfologica() |
| 39 | - | |
| 41 | + | |
| 40 | 42 | if (isinstance(analise_sintatica,type(None))): |
| 41 | 43 | regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica) |
| 42 | 44 | else: |
| ... | ... | @@ -59,7 +61,41 @@ class TraduzSentencas(object): |
| 59 | 61 | def salvar_log(self, erro): |
| 60 | 62 | '''Salva traceback de uma excessão do analisador sintático |
| 61 | 63 | ''' |
| 62 | - logging.error(erro) | |
| 64 | + logger = logging.getLogger('error-feedback') | |
| 65 | + logger.propagate = False | |
| 66 | + logger.error(erro) | |
| 67 | + | |
| 68 | + def criar_logger_error(self): | |
| 69 | + error_log = logging.getLogger('error-feedback') | |
| 70 | + error_log.setLevel(logging.ERROR) | |
| 71 | + ##print os.path.dirname(__file__) -- Salvar no direitorio do arquivo .py? | |
| 72 | + error_handler = logging.handlers.RotatingFileHandler('/var/tmp/vlibras-translate.log', maxBytes=1024, backupCount=5) | |
| 73 | + formatter = logging.Formatter('%(asctime)s - %(levelname)s:\n\n%(message)s\n\n\n##############################################\n\n') | |
| 74 | + error_handler.setFormatter(formatter) | |
| 75 | + error_log.addHandler(error_handler) | |
| 76 | + | |
| 77 | + def check_level(self): | |
| 78 | + for opt in sys.argv[1:]: | |
| 79 | + if "--log" in opt: | |
| 80 | + self.set_level(opt[6:]) | |
| 81 | + return | |
| 82 | + self.desativar_logging() | |
| 83 | + | |
| 84 | + def set_level(self, level): | |
| 85 | + numeric_level = getattr(logging, level.upper(), None) | |
| 86 | + if not isinstance(numeric_level, int): | |
| 87 | + raise ValueError('Nível de log inválido: %s' % level) | |
| 88 | + logging.disable(logging.NOTSET) | |
| 89 | + logging.getLogger().setLevel(numeric_level) | |
| 90 | + if numeric_level == 40 or numeric_level == 10: | |
| 91 | + self.criar_logger_error() | |
| 92 | + | |
| 93 | + def desativar_logging(self): | |
| 94 | + logging.disable(logging.DEBUG) | |
| 95 | + logging.disable(logging.INFO) | |
| 96 | + logging.disable(logging.WARNING) | |
| 97 | + logging.disable(logging.ERROR) | |
| 98 | + logging.disable(logging.CRITICAL) | |
| 63 | 99 | |
| 64 | 100 | def gerar_metrica_qualidade(self, lista): |
| 65 | 101 | #TODO: resolver path do arquivo | ... | ... |