New release is coming soon! If you want to try out the latest features, simply run npm i -s moleculer@next. The docs for the latest version are available here.

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()
};