Log4js é um dos melhores módulos no processamento de log node.js. Comparado com o console ou a depuração do TJ, os seguintes são indispensáveis para projetos Node.js que são colocados em produção:
Este artigo fornecerá uma introdução abrangente ao LOG4JS, permitindo que você use log4js em seu projeto com facilidade, fácil desenvolvimento e depuração e melhor monitoramento ou solução de problemas on -line.
Um pequeno teste
As três linhas de código a seguir mostram o uso mais fácil do LOG4JS:
// arquivo: simlest.jsvar log4js = requer ('log4js'); var logger = log4js.getLogger (); logger.debug ("time:", new date ());Calling .getLogger () pode obter uma instância de log4js logger. O uso desta instância é o mesmo do console. Você pode chamar .Debug (também .info, .Error e outros métodos) para obter logs de saída.
Execute o nó Simplest.js e a saída é a seguinte:
$ Node Simplest.js [2016-08-21 00: 01: 24.852] [Debug] [Padrão]-Tempo: 2016-08-20T16: 01: 24.852Z
Tempo: 2016-08-20T16: 01: 24.852Z é o que queremos produzir. O anterior contém o especificador [2016-08-21 00: 01: 24.852] [Debug] [padrão] está listado posteriormente.
Não é muito fácil de usar? Bem, antes de mergulharmos no uso avançado de log4js, vamos nos familiarizar com os conceitos no log4js.
Nível
Isso não é difícil de entender, é a classificação de toras. Somente quando os logs são hierárquicos podem fazer log4js melhor nos mostrar logs (níveis diferentes de logs usam cores diferentes no console, como o erro geralmente é vermelho) e, quando a produção, você pode soltar os registros seletivamente, como evitar algumas informações sensíveis que pertencem a.
Os registros dos log4js são divididos em nove níveis, e os nomes e pesos de cada nível são os seguintes:
{ ALL: new Level(Number.MIN_VALUE, "ALL"), TRACE: new Level(5000, "TRACE"), DEBUG: new Level(10000, "DEBUG"), INFO: new Level(20000, "INFO"), WARN: new Level(30000, "WARN"), ERROR: new Level(40000, "ERROR"), FATAL: new Level(50000, "FATAL"), MARK: new Nível (9007199254740992, "Mark"), // 2^53 OFF: Novo nível (número.max_value, "off")}Foto anterior:
Todos esses dois níveis não são usados diretamente no código comercial. Os sete restantes são os sete métodos correspondentes à instância do logger, .Trace .Debug .info ... Em outras palavras, quando você chama esses métodos, é equivalente a nivelar esses logs. Portanto, os anteriores [2016-08-21 00: 01: 24.852] [Debug] [Padrão]-Tempo: 2016-08-20T16: 01: 24.852Z é o nível deste log.
tipo
O log4js também possui um conceito chamado categoria (tipo). Você pode definir o tipo de instância de logger e distinguir logs de acordo com outra dimensão:
// arquivo: set-catetory.jsvar log4js = requer ('log4js'); var logger = log4js.getLogger ('exemplo'); logger.debug ("time:", new Date ());Ao obter uma instância de logger através do GetLogger, o único parâmetro que pode ser passado é o loggercategory (como 'Exemplo'). Este parâmetro especifica a qual categoria a instância do logger pertence. É o mesmo que a depuração de TJ:
var debug = requer ('debug') ('trabalhador'); setInterval (function () {debug ('fazendo algum trabalho');}, 1000);Em Debug 'Worker', também é uma classificação de log. Ok, volte e execute o nó set-catetory.js:
[2016-08-21 01: 16: 00.212] [Debug] Exemplo-Tempo: 2016-08-20T17: 16: 00.212Z
A única diferença entre os anteriores [2016-08-21 00: 01: 24.852] [Debug] [Padrão]-Tempo: 2016-08-20T16: 01: 24.852Z é que [padrão] se tornou um exemplo.
Qual é o uso da categoria? É mais flexível que o nível e fornece uma segunda dimensão de distinção para os logs. Por exemplo, você pode definir uma categoria diferente para cada arquivo, como no set-catetory.js:
// arquivo: set-catetory.jsvar log4js = require ('log4js'); var logger = log4js.getLogger ('set-catetory.js'); logger.debug ("horário:", new Date ());Você pode ver no log [2016-08-21 01: 24: 07.332] [Debug] Set-Catetory.js-Hora: 2016-08-20T17: 24: 07.331Z que este log vem do arquivo set-catetory.js. Ou use categorias diferentes para diferentes pacotes de nós, para que você possa distinguir de qual módulo o log vem.
Appender
Bem, agora o log tem níveis e categorias, que resolve o problema de classificação e classificação de logs na entrada. No log4js, o problema de exportação de log (ou seja, onde a saída do log é a saída) é resolvida pelo Appender.
Appender padrão
A seguir, são apresentadas as configurações padrão do Appender para o Log4JS Internal:
// log4js.jsdefaultConfig = {Apêndios: [{type: "Console"}]}Como você pode ver, quando os logs não são configurados de forma alguma, os logs são emitidos para o console por padrão.
Configure seu próprio Appender
Podemos definir o Appender que queremos através do log4js.configure.
/ File: Custom-Appender.jsvar Log4js = requer ('log4js'); log4js.configure ({Apêndores: [{type: 'FILE', nome do arquivo: 'default.log')}});No exemplo acima, produzimos o log para o arquivo e executamos o código. Log4JS cria um arquivo chamado default.log no diretório atual. [2016-08-21 08: 43: 21.272] [Debug] Custom-Appender-Hora: 2016-08-21T00: 43: 21.272Z O produz para o arquivo.
O Appender fornecido por log4js
Console e arquivo são os anexos fornecidos pelo LOG4JS, além disso:
DATEFILE: O log é emitido para um arquivo e o arquivo de log pode ser rolado em um modo de data específico, como a saída para o padrão de 2016-08-21.log hoje e saída para o padrão 2016-08-22.Log amanhã;
SMTP: log de saída para email;
Mailgun: logs de saída para Mailgun através da API Mailgun;
O telfilter pode ser filtrado através do nível;
E assim por diante, alguns outros apêndeiros, você pode ver a lista completa aqui.
Níveis de filtragem e categorias
Podemos ajustar a configuração do Appender e filtrar os níveis de log e categorias:
// file: level-and-category.jsvar log4js = require('log4js');log4js.configure({ appenders: [{ type: 'logLevelFilter', level: 'DEBUG', category: 'category1', appender: { type: 'file', filename: 'default.log' } }]})var logger1 = log4js.getLogger ('category1'); var logger2 = log4js.getLogger ('category2'); logger1.debug ("time:", new date ()); logger1.trace ("time:", new Date ()); Logger2.Debug ("Hora:", data ();Execute, adicione um log ao default.log:
[2016-08-21 10: 08: 21.630] [Debug] Category1-Hora: 2016-08-21T02: 08: 21.629Z
Vamos dar uma olhada no código:
Use LogLeVelfilter e nível para filtrar os níveis de log, e todos os logs com pesos maiores ou iguais à depuração serão emitidos. Esse também é o significado do peso do nível de log mencionado anteriormente;
Selecione a categoria para produzir os logs através da categoria. Os logs na categoria 2 são filtrados. A configuração também aceita uma matriz, como ['category1', 'category2'], para que ambas as categorias de logs sejam emitidas para o arquivo.
Layout
O layout é um recurso avançado fornecido pelo log4js. Através do layout, podemos personalizar o formato de cada log de saída. O Log4JS possui quatro tipos de formatos internos:
MessagePassthrough: somente emitir o conteúdo do log;
Básico: o tempo, o nível de log e a categoria serão adicionados antes do conteúdo do log, e o layout padrão do log é geralmente adicionado;
colorido/colorido: adicione cor ao log com base no BASIC, o Appender Console usa esse layout por padrão;
Padrão: este é um tipo especial que pode ser usado para definir qualquer formato que você desejar.
Um exemplo de padrão:
// Arquivo: layout -tattern.jsvar log4js = requer ('log4js'); log4js.configure ({apêndices: [{type: 'console', layout: {type: 'padrony', padrão: '[%r] [%5.5p%]] - m%n'}}}}}}}}}}}}}}}}}}}}}}}}}}}}] Log4js.getLogger ('layout-tattern'); logger.debug ("time:", new Date ());%r %p $ m $ n é um especificador interno para log4js. Você pode usar isso para produzir algumas meta informações. Para mais detalhes, você pode consultar a documentação do log4JS.
Vamos explicar o posicionamento de Logger, Appender e Layout em uma imagem.
Combate prático: Access de saída Access.log para aplicação de nó
Para facilitar a verificação do problema, os registros de solicitações de aplicativos que entram e saem são frequentemente registrados em ambientes de produção. Como implementá -lo usando log4js? Basta inserir o código:
// arquivo: server.jsvar log4js = requer ('log4js'); var express = requer ('expresso'); log4js.configure ({apêndices: [{type: 'datefile', fileName: 'access.log', padrony: -yyyy-mm-dd.log ', sempre-concurso: express (); App.Use (log4js.connectLogger (log4js.getLogger ('Access'), {nível: log4js.levels.info})); app.get ('/', function (req, res) {res.send ('Front-end Journal Comment');}); App.Listen) (5) ('RESEND (' Frente-end Journal Comment ');});Veja o que fizemos:
Um Appender está configurado para selecionar um log com o acesso à categoria do log e gerá -lo para um arquivo de rolagem;
Log4js.getLogger ('Access') recebe uma instância de logger com um acesso à categoria e passa para o middleware log4js.connectLogger. Este middleware coleta informações de acesso e a imprime nessa instância.
Inicie o servidor e visite http: // localhost: 5000. Você descobrirá que existe um arquivo adicional chamado Access.log-2016-08-21.log no diretório, que contém dois logs:
[2016-08-21 14: 34: 04.752] [info] Access - :: 1 - - "Get/Http/1.1" 200 18 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) Applewebkit/537.36 (Kht10, como Geck)).
[2016-08-21 14: 34: 05.002] [Info] Access - :: 1 - - "get /favicon.ico http/1.1" 404 24 "http: // localhost: 5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) Chrome/52.0.2743.116 Safari/537.36 "
Através da função de classificação e Appender dos logs log4js, produzimos os logs de acesso a um arquivo atualizado de rolagem.
Resumir
Este artigo apresenta de forma abrangente o uso do log4JS. Comparado com as ferramentas de console ou de log simples, o LOG4JS é mais complexo de usar e, é claro, mais poderoso e é adequado para aplicações de nível de produção. Se você estiver interessado, deixe uma mensagem para nos contar. Em seguida, você pode apresentar a você como gerenciar a configuração em aplicativos de nó.