Função: FWLogMsg


Compatível Países:Todos
Sistemas Operacionais:Todos
Compatível às Bases de Dados:Todos
Nível de Acesso:Nível 1 (Acesso Clientes)
Idiomas:Português, Inglês, Espanhol
VersãoV12


Sintaxe
FWLogMsg( < cSeverity >,  [ cTransactionId ] , < cGroup > , [ cCategory ] , [ cStep ] , [ cMsgId ] , [ cMessage ] , [ nMensure ] , [ nElapseTime ] , [ aMessage ] )

Descrição
Registra uma mensagem de log com as informações do sistema, conforme padrão SysLog - RFC-5424

Parâmetros


NomeTipoDescriçãoDefaultObrigatório
cSeverityCaracteresInforme a severidade da mensagem de log. As opções possíveis são: INFO,WARN,ERROR,FATAL,DEBUG
X
cTransactionIdCaracteresInforme o Id de identificação da transação para operações correlatas. Informe "LAST" para o sistema assumir o mesmo id anteriorFWUUIDV1()
cGroupCaracteresInforme o Id do agrupador de mensagem de Log
X
cCategoryCaracteresInforme o Id da categoria da mensagem""
cStepCaracteresInforme o Id do passo da mensagem""
cMsgIdCaracteresInforme o Id do código da mensagem""
cMessageCaracteresInforme a mensagem de log. Limitada à 10K""
nMensureNuméricoInforme a uma unidade de medida da mensagem0
nElapseTimeNuméricoInforme o tempo decorrido da transação0
aMessageArrayInforme a mensagem de log em formato de Array - Ex: { {"Chave" ,"Valor"} }{}


Exemplo


FWLogMsg
#include "protheus.ch"

//-------------------------------------------------------------------
/*/{Protheus.doc} myLogMsg
Exemplo de utilização da função FWLogMsg

@author Daniel Mendes
@since 16/03/2021
@version 1.0
/*/
//-------------------------------------------------------------------
user function myLogMsg()
local nBegin as numeric
local aMessage as array
local nQtdMsg as numeric
local nI as numeric
local cMsg as char

//Mensagem simples, de forma reduzida, somente parâmetros obrigatórios
FWLogMsg("INFO", /*cTransactionId*/, "MeuGrupo", /*cCategory*/, /*cStep*/, /*cMsgId*/, "Minha primeira mensagem", /*nMensure*/, /*nElapseTime*/, /*aMessage*/)

//Começo das mensagens
nBegin := Seconds()
nQtdMsg := 12 //Número máximo de mensagens
cMsg := "Mensagem que não será apresentada caso a função FWLogMsg seja direcionada com console (ConOut)"

for nI := 1 to 12 step 2
    //Mensagem simples, informando todos os parâmetros
    FWLogMsg("INFO", "LAST", "MeuGrupo", "MinhaCategoria", cValToChar(nI) , "MeuID", "Meu registro de sistema", nQtdMsg, Seconds() - nBegin)

    aMessage := {}

    //Informações adicionais
    aAdd(aMessage, {"Date", Date()})
    aAdd(aMessage, {"Hour", Time()})

    if getRemoteType() != NO_REMOTE
        aAdd(aMessage, {"Computer", GetClientIP()})
        aAdd(aMessage, {"IP", GetClientIP()})
    endif

    //Quando enviado o parâmetro de aMessage, o parâmetro cMessage não é exibido no console
    FWLogMsg("INFO", "LAST", "MeuGrupo", "MinhaCategoria", cValToChar(nI +1) , "MeuID", cMsg, nQtdMsg, Seconds() - nBegin, aMessage)

    aSize(aMessage, 0)
next

return


Atenção

Quando o parâmetro aMessage é enviado e a função FWLogMsg está exibindo as informações no console via ConOut, o parâmetro cMessage é omitido do console, esse comportamento foi adotado para evitar a sobrecarga de informações no console.log.


Observações
Esta API refere-se a padronização da linha Microsiga Protheus sobre a implementação da API LogMsg da Virtual Machine.

1) O Id do agrupador da mensagem é um código padronizado entre todas as linhas de produto TOTVS e visa identificar um agrupamento de mensagem relacionadas
2) O Id da categoria da mensagem é uma sub-divisão do Id do agrupador da mensagem e é padronizado entre todas as linhas de produto TOTVS.
3) O Id do passo da mensagem, indica uma etapa de avança de terminada transação que é monitorada. Pode ser ou não padronizada nas linhas de produto.
4) O Id do código do mensagem é padronizado dentro da linha TOTVS
5) A mensagem de log é livre, mas deve ser clara e simples
6) A unidade de medida da mensagem é padronizada entre as linhas de produto TOTVS e visa fornecer um balanço de comparativo de tempo
7) O tempo decorrido visa fornecer um parâmetro de desempenho do sistema em determinadas operações. Em alguns casos é padronizado.


Códigos padronizados para a equipe de Segmentos do Microsiga Protheus:


IDValor
Agrupador"BusinessObject"
CategoriaRotina de menu (Exemplo: "MATA010")



O log de Debug somente é ativado pela chave no environment FWLOGMSG_DEBUG=1

** Quando o LogServer não esta ativo é escrito no ConsoleLog do AppServer a seguinte estrutura de mensagem:
   [Id do Produto][Data e Hora][Severidade][Id da Mensagem][sStrData no padrão SysLog][texto da mensagem]

Veja também
  • Sem rótulos

3 Comentários

  1. Bom dia, teria como disponibilizar mais exemplos de uso?

  2. Segue:

    EXEMPLO
    FwLogMsg("INFO", /*cTransactionId*/, "REST", FunName(), "", "01", "JSON successfully parsed to Object", 0, (nStart - Seconds()), {}) // nStart é declarada no inicio da função
    MENSAGEM NO CONSOLE
    --------------------- U_T110FWREST(23) | 17/12/18 16:04:43 ---------------------
    [INFO]Msg...:[JSON successfully parsed to Object]
    --------------------------------------------------------------------------------
  3. Bem mais interessante do que a função Conout(), porém não consegui simular diferença no Log adicionando ou não o parâmetro nElapseTime. tem algum exemplo de diferenciação?
    Outra dúvida é em relação ao parâmetro nMensure quais são as opções possíveis?