Função: Log
A função Log() gera mensagens de erro no arquivo Lua.log (no diretório do executável) oferecendo 4 níveis distintos de severidade.
Exemplo de utilização:
Log("Teste de log nível 0." , LOG_LEVEL_0)
Log("Teste de log nível 1." , LOG_LEVEL_1)
Log("Teste de log nível 2." , LOG_LEVEL_2)
Log("Teste de log nível 3." , LOG_LEVEL_3)
Resultado no arquivo de Log
15/10/10 19:13:18.520: [0] Teste de log nível 0.
15/10/10 19:13:18.521: [1] Teste de log nível 1.
15/10/10 19:13:18.522: [2] Teste de log nível 2.
15/10/10 19:13:18.523: [3] Teste de log nível 3.
Exemplo da função Log() definida em módulo externo
Em anexo a esta página está um exemplo de projeto que ilustra o uso da função Log() em conjunto com o uso de módulos externos Lua. O módulo clog.lua define uma função de log de alto-nível que ao mesmo tempo gera mensagens de erro tanto no console de depuração (do Viewer ou do Kernel) quanto no arquivo “Lua.log”. O módulo clog.lua é um módulo externo pois não faz parte de nenhum projeto em particular, podendo ser reutilizado em múltiplos projetos. Os arquivos de módulos externos devem ser depositados em um subdiretório de nome lua onde reside o executável do Kernel ou do Viewer (dependendo de onde os módulos serão utilizados).
Módulo externo clog.lua
O módulo clog define uma tabela (M) que encapsula a API pública:
Funções |
|
|---|---|
Função |
Descrição |
getActiveLevel() |
recupera o valor do nível ativo de log. |
setActiveLevel(level) |
define o nível ativo de log. |
info(msg) |
registra mensagem se o nível ativo de log for igual ou superior a INFO. |
warn(msg) |
registra mensagem se o nível ativo de log for igual ou superior a WARN. |
erro(msg) |
registra mensagem se o nível ativo de log for igual ou superior a ERRO. |
trace(msg) |
registra mensagem se o nível ativo de log for igual ou superior a TRACE. |
A hierarquia de níveis definida em clog.lua é: TRACE < ERRO < WARN < INFO. A função está acoplada a um Tag específico que precisa ser criado no projeto para armazenar o nível de log ativo. No exemplo abaixo este Tag é um short int no caminho “Viewers.Tags.Util.LogLevel”. Este Tag pode ser redefinido.
O conteúdo do módulo clog.lua é:
local M = {}
-- definição do mapeamento de nível lógico do Log para valor
M.TRACE = 1
M.ERRO = 2
M.WARN = 3
M.INFO = 4
M.levelName = {"TRACE", "ERRO", "WARN", "INFO"}
-- Função privada de uso interno no log
function internal_log(msg, level)
-- consulta variável que define nível de log
local active_level = M.getActiveLevel()
if level >= active_level then
print(msg) -- imprime no console de depuração
Log(msg, level) -- reutiliza infra de log
end
end
-- Funções públicas
function M.getActiveLevel()
local active_level = Tags.Get("Viewers.Tags.Util.LogLevel")
return active_level.Value
end
function M.setActiveLevel(level)
-- Tag local usado para definir o nível de log ativo (PRECISA ESTAR DEFINIDO!!)
local log_level = Tags.Get("Viewers.Tags.Util.LogLevel")
log_level.Value = level
log_level:WriteValue()
-- M.INFO só mostra INFO
-- M.WARN mostra INFO, WARN
-- M.ERRO mostra INFO, WARN, ERRO
-- M.TRACE mostra INFO, WARN, ERRO, TRACE
end
function M.info(msg)
internal_log(msg , M.INFO)
end
function M.warn(msg)
internal_log(msg , M.WARN)
end
function M.erro(msg)
internal_log(msg , M.ERRO)
end
function M.trace(msg)
internal_log(msg , M.TRACE)
end
return M
Estrutura do Projeto LogFacil
A idéia do projeto LogFacil é ilustrar a utilização da API de alto nível exportada pelo módulo clog.lua. Inicialmente o nível ativo de log é definido pelo script InitLogLevel associado ao evento OnBeginViewer em ‘Project.Configuration.Application’
-- InitLogLevel
clog = require "clog"
clog.setActiveLevel(clog.INFO)
-- o dicionário clog.levelName permite traduzir o valor do nível para o nome do nível
print("Nivel ativo de log " .. clog.levelName[clog.INFO])
A tela principal do programa apresenta 3 botões: Info, Trace e Muda de Nível. Os respectivos códigos são:
-- Script associado ao botão 'Info'
clog = require "clog"
clog.info("Teste do nível informação")
-- Script associado ao botão 'Trace'
clog = require "clog"
clog.trace("Teste do nível trace")
-- Script associado ao botão 'Muda de Nível'
clog = require "clog"
local active_level = clog.getActiveLevel()
if active_level==clog.INFO then
clog.setActiveLevel(clog.TRACE)
else
clog.setActiveLevel(clog.INFO)
end
-- Imprime nível redefinido
active_level = clog.getActiveLevel()
print("Nivel ativo de log " .. clog.levelName[active_level])
Este projeto mostra que enquanto o nível ativo for INFO, as mensagens de Trace não serão geradas nem no arquivo Lua.log nem no console de depuração. Quando o nível ativo de log for mudado para TRACE, ambas mensagens serão geradas.
Roteiro para executar Projeto LogFacil
Para executar o exemplo anexo:
Baixe o projeto LogFacil.
descompacte (unzip) o arquivo de projeto clog.zip no diretório de projetos do HIscada Pro. Será criado o projeto LogFacil.
copie o módulo clog.lua para o diretório onde reside o Viewer.exe, e deposite-o em um subdiretório de nome lua.
Pelo IDE abra o projeto LogFacil.
Abra a interface de depuração.
Execute a aplicação e clique nos botões INFO e TRACE alternadamente.
Clique no botão Muda de Nivel e repita o passo 5 uma vez.
Examine o arquivo Lua.log no diretório onde reside o Viewer.exe