Log

Todos os módulos principais do Moleculer têm uma instância de logger personalizada. Elas são herdadas da instância do broker que pode ser configurada nas opções do broker.

A versão v0.14 contém alterações significativas. Isso significa que você não pode usar a maneira antiga de configurar o logger. Se você estiver usando o logger padrão do console, esta mudança não afeta você. Para mais informações verifique o Guia de Migração.

Loggers integrados

Console (padrão)

Este logger imprime todas as mensagens de log no console. Ele suporta vários formatadores integrados ou você pode usar o seu formatador personalizado.

Configuração abreviada com opções padrão

// moleculer.config.js
module.exports = {
logger: "Console",
};

// moleculer.config.js
module.exports = {
// Enable console logger
logger: true,
};

Configuração completa

// moleculer.config.js
module.exports = {
logger: {
type: "Console",
options: {
// Logging level
level: "info",
// Using colors on the output
colors: true,
// Print module names with different colors (like docker-compose for containers)
moduleColors: false,
// Line formatter. It can be "json", "short", "simple", "full", a `Function` or a template string like "{timestamp} {level} {nodeID}/{mod}: {msg}"
formatter: "full",
// Custom object printer. If not defined, it uses the `util.inspect` method.
objectPrinter: null,
// Auto-padding the module name in order to messages begin at the same column.
autoPadding: false
}
}
};

Formatadores

Formatador full (default)
// moleculer.config.js
module.exports = {
logger: {
type: "Console",
options: {
formatter: "full" // or `null`
}
}
};

Pré visualizar Console

Formatador short
// moleculer.config.js
module.exports = {
logger: {
type: "Console",
options: {
formatter: "short"
}
}
};

Pré visualizar Console

Formatador simple
// moleculer.config.js
module.exports = {
logger: {
type: "Console",
options: {
formatter: "simple"
}
}
};

Pré visualizar Console

Formatador json
// moleculer.config.js
module.exports = {
logger: {
type: "Console",
options: {
formatter: "json"
}
}
};

Pré visualizar Console

Formatador personalizado
// moleculer.config.js
module.exports = {
logger: {
type: "Console",
options: {
formatter: (level, args, bindings) => [`[${level.toUpperCase()}]`, ...args]
}
}
};

Pré visualizar Console

File

Este logger salva todas as mensagens de log em arquivo(s). Ele suporta JSON & arquivos de texto formatados ou você pode usar o seu formatador personalizado.

Configuração abreviada com opções padrão

// moleculer.config.js
module.exports = {
logger: "File",
};

Ele salvará as mensagens de log na pasta logs no diretório atual com nome do arquivo molleculer -{date}.log.

Configuração completa

// moleculer.config.js
module.exports = {
logger: {
type: "File",
options: {
// Logging level
level: "info",
// Folder path to save files. You can use {nodeID} & {namespace} variables.
folder: "./logs",
// Filename template. You can use {date}, {nodeID} & {namespace} variables.
filename: "moleculer-{date}.log",
// Line formatter. It can be "json", "short", "simple", "full", a `Function` or a template string like "{timestamp} {level} {nodeID}/{mod}: {msg}"
formatter: "json",
// Custom object printer. If not defined, it uses the `util.inspect` method.
objectPrinter: null,
// End of line. Default values comes from the OS settings.
eol: "\n",
// File appending interval in milliseconds.
interval: 1 * 1000
}
}
};

Loggers Externos

Pino

Este logger usa o logger Pino.

Configuração abreviada com opções padrão

// moleculer.config.js
module.exports = {
logger: "Pino",
};

Configuração completa

// moleculer.config.js
module.exports = {
logger: {
type: "Pino",
options: {
// Logging level
level: "info",

pino: {
// More info: http://getpino.io/#/docs/api?id=options-object
options: null,

// More info: http://getpino.io/#/docs/api?id=destination-sonicboom-writablestream-string
destination: "/logs/moleculer.log",
}
}
}
};

Para usar este logger por favor instale o módulo pino com o comando npm install pino --save.

Pré visualizar Pino

Bunyan

Este logger usa o logger Bunyan.

Configuração abreviada com opções padrão

// moleculer.config.js
module.exports = {
logger: "Bunyan",
};

Configuração completa

// moleculer.config.js
module.exports = {
logger: {
type: "Bunyan",
options: {
// Logging level
level: "info",

bunyan: {
// More settings: https://github.com/trentm/node-bunyan#constructor-api
name: "moleculer"
}
}
}
};

Para usar esse logger por favor instale o módulo bunyan com o comando npm install bunyan --save.

Pré visualizar Bunyan

Winston

Este logger usa o logger Winston.

Configuração abreviada com opções padrão

// moleculer.config.js
module.exports = {
logger: "Winston",
};

Configuração completa

// moleculer.config.js
const winston = require("winston");

module.exports = {
logger: {
type: "Winston",
options: {
// Logging level
level: "info",

winston: {
// More settings: https://github.com/winstonjs/winston#creating-your-own-logger
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: "/logs/moleculer.log" })
]
}
}
}
};

Para usar esse logger por favor instale o módulo winston com o comando npm install winston --save.

Pré visualizar Winston

debug

Este logger usa o debug. Para ver mensagens você tem que definir a variável de ambiente DEBUG para export DEBUG=moleculer:*.

Configuração abreviada com opções padrão

// moleculer.config.js
module.exports = {
logger: "Debug",
};

Configuração completa

// moleculer.config.js
module.exports = {
logger: {
type: "Debug",
options: {
// Logging level
level: "info",
}
}
};

Para usar esse logger por favor instale o módulo debug com o comando npm install debug --save.

Pré visualizar debug

Log4js

Este logger usa o logger Log4js.

Configuração abreviada com opções padrão

// moleculer.config.js
module.exports = {
logger: "Log4js",
};

Configuração completa

// moleculer.config.js
module.exports = {
logger: {
type: "Log4js",
options: {
// Logging level
level: "info",

log4js: {
// More info: https://github.com/log4js-node/log4js-node#usage
appenders: {
app: { type: "file", filename: "/logs/moleculer.log" }
},
categories: {
default: { appenders: [ "app" ], level: "debug" }
}
}
}
}
};

Para usar esse logger por favor instale o módulo log4js com o comando npm install log4js --save.

Pré visualizar Log4js

Datadog

Este logger envia mensagens de log para o servidor do Datadog.

Por favor, note que este logger não imprime nenhuma mensagem para o console, apenas coleta & envia. Use junto com outro logger que também imprime as mensagens.

Configuração abreviada com opções padrão

// moleculer.config.js
module.exports = {
logger: "Datadog",
};

Configuração completa

// moleculer.config.js
module.exports = {
logger: {
type: "Datadog",
options: {
// Logging level
level: "info",
// Datadog server endpoint. https://docs.datadoghq.com/api/?lang=bash#send-logs-over-http
url: "https://http-intake.logs.datadoghq.com/v1/input/",
// Datadog API key
apiKey: process.env.DATADOG_API_KEY,
// Datadog source variable
ddSource: "moleculer",
// Datadog env variable
env: undefined,
// Datadog hostname variable
hostname: os.hostname(),
// Custom object printer function for `Object` & `Ąrray`
objectPrinter: null,
// Data uploading interval
interval: 10 * 1000
}
}
};

Pré visualizar Datadog Log Explorer

Vários loggers

Esta nova configuração de logger admite o uso de vários loggers até do mesmo tipo de logger com níveis de log diferentes.

Define múltiplos loggers com diferentes níveis de logs

// moleculer.config.js
module.exports = {
logger: [
{
type: "Console",
options: {
level: "info",
}
},
{
type: "File",
options: {
level: "info",
folder: "/logs/moleculer",
filename: "all-{date}.log",
formatter: "{timestamp} {level} {nodeID}/{mod}: {msg}"
}
},
{
type: "File",
options: {
level: "error",
folder: "/logs/moleculer",
filename: "errors-{date}.json",
formatter: "json"
}
}
]
};

Este exemplo mostra uma configuração do logger Console, um logger File que salva todas as mensagens de log no arquivo de texto formatado e outro Logger File que só salva as mensagens de erro no formato JSON.

Filtro

Você pode configurar seus loggers para registrar apenas dados de certos serviços ou módulos. Exemplo

// moleculer.config.js
module.exports = {
logger: [
// Shorthand `Console` logger configuration
"Console",
{
// This logger saves messages from all modules except "greeter" service.
type: "File",
options: {
level: {
"GREETER": false,
"**": "info"
},
filename: "moleculer-{date}.log"
}
},
{
// This logger saves messages from only "greeter" service.
type: "File",
options: {
level: {
"GREETER": "debug",
"**": false
},
filename: "greeter-{date}.log"
}
}
],

logLevel: "info" // global log level. All loggers inherits it.
};

Configuração de Nível de Log

Para configurar níveis de log, você pode usar a famosa opção logLevel que pode ser uma String ou um Object. No entanto, também é possível substituí-lo em options do logger com a propriedade level.

Configuração complexa de nível de log

// moleculer.config.js
module.exports = {
logger: [
// The console logger will use the `logLevel` global setting.
"Console",
{
type: "File",
options: {
// Overwrite the global setting.
level: {
"GREETER": false,
"**": "warn"
}
}
}
],
logLevel: {
"TRACING": "trace",
"TRANS*": "warn",
"GREETER": "debug",
"**": "info",
}
};

Logger personalizado

Se você tiver seu logger personalizado, deverá envolvê-lo em uma classe BaseLogger e implementar pelo menos o método getLogHandler.

Usando um logger personalizado

// moleculer.config.js
const BaseLogger = require("moleculer").Loggers.Base;

class MyLogger extends BaseLogger {
getLogHandler(bindings) {
return (type, args) => console[type](`[MYLOG-${bindings.mod}]`, ...args);
}
}

module.exports = {
logger: new MyLogger()
};