npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

micro-log-lib

v1.1.0

Published

Minimal Node.js logger with sanitization and customizable output.

Downloads

561

Readme


npm install micro-log-lib

  • Níveis de logdebug, info, warn, error e fatal;
  • Output flexívelLOG, JSON ou ambos (BOTH);
  • Cores customizáveis — configuráveis por nível de log;
  • Sanitização automática — ocultação de dados sensíveis;
  • Rastreabilidade — geração automática de UUID;
  • Configuração por instância — diferentes comportamentos por contexto ao LoggerService;
  • Formatação de logs personalizada — template de logs personalizável;

const { LoggerService } = require('micro-log-lib');

// LoggerService.{level}(message, data?, service?)

LoggerService.info(
  'Usuário autenticado',
  { userId: 'abc123' },
  'AuthService'
);

LoggerService.debug(
  'Iniciando conexão',
  { host: 'localhost' },
  'DatabaseService'
);

LoggerService.warn(
  'Rate limit próximo do limite',
  { remaining: 5 },
  'ApiService'
);

LoggerService.error(
  'Falha ao processar pagamento',
  { code: 500 },
  'PaymentService'
);

LoggerService.fatal(
  'Estouro de limite de memória',
  { code: 500 },
  'ProcessService'
);

LoggerService

O LoggerService pode ser utilizado:

  • De forma estática;
  • Via instância com configurações específicas;

| Opção | Tipo | Descrição | |---|---|---| | colorize | boolean | Habilita cores no output do terminal | | outputMode | 'LOG' \| 'JSON' \| 'BOTH' | Define o formato de saída dos logs | | type | Record<string, string> | Cor por nível de log |

const { LoggerService } = require('micro-log-lib');

const options = {
  colorize: true,
  outputMode: 'BOTH',
  type: {
    ERROR: 'RED',
    WARN: 'YELLOW',
    INFO: 'BLUE',
    DEBUG: 'GREEN'
  }
};

const logger = new LoggerService(options);

logger.info('Servidor iniciado na porta 3000');

LOG

[INFO] [AuthService] Usuário autenticado
UUID: cf35f8e0dbf4813a5259

JSON

{
  "uuid": "cf35f8e0dbf4813a5259",
  "timestamp": "2026-05-25T22:14:10.120Z",
  "level": "INFO",
  "message": "Usuário autenticado",
  "service": "AuthService"
}

SanitizerService

O SanitizerService aplica configurações globais, afetando todos os logs da aplicação independentemente da instância utilizada.

| Opção | Tipo | Descrição | |---|---|---| | sanitizeFields | string[] | Campos que devem ser ocultados | | redactValue | string | Texto substituto dos campos sanitizados |

const { SanitizerService } = require('micro-log-lib');

const sensitiveFields = [
  'access-token',
  'refresh-token',
  'password'
];

SanitizerService.addFields(sensitiveFields);

SanitizerService.updateRedactValue(
  '[SENSITIVE DATA]'
);

FormatterService

O FormatterService aplica configurações globais, afetando todos os logs da aplicação independentemente da instância utilizada.

| Opção | Tipo | Descrição | |---|---|---| | format | string | Template em texto para ser usado pelo log |

const { FormatterService } = require('micro-log-lib');

const template = '[${timestamp}] [${id}] [${type} - ${service}] ${message}';
FormatterService.set(template);

LoggerService

Responsável pela geração de loggers estruturados.

Atributo(s)

  • config
    • Campo de configuração da instância da classe LoggerService

Método(s)

constructor()

Instância para gerar uma nova configuração do LoggerService.

constructor(options = {}) {
    this.validate(options);
    // [...]
    this.#config = merged;
}

debug()

Usado para receber diagnósticos detalhados sobre o sistema à desenvolvedores dentro do ambiente de teste.

Casos comuns:

  • Valor de variável;
  • Fluxo detalhado;

Exemplo: ("SELECT 23+ users from database", users);

debug() {
  return this.debug('DEBUG', message, data, service, uuid);
}

info()

Eventos gerais do sistema, uma confirmação se o sistema funciona corretamente

Casos comuns:

  • Inicialização de serviços;
  • Conclusão de serviços;

Exemplo: ("User login successful:", username)

info() {
  return this.info('INFO', message, data, service, uuid);
}

warn()

Situação inesperada mas que não interrompe um fluxo, entretanto, requerem atenção

Casos comuns:

  • Pouco espaço no disco;
  • Uso de CPU muito alto;

Exemplo: ("CPU has achivied 85% of memory")

warn() {
  return this.warn('WARN', message, data, service, uuid);
}

error()

Interrompimento do fluxo de uma operação.

  • Operação com erro;
  • Ausência de dados;

Exemplo: ("User not found on DB")

error() {
  return this.warn('WARN', message, data, service, uuid);
}

fatal()

Erro que leva ao encerramento da aplicação.

  • Erro não tratado;
  • Uso de CPU estourou;

Exemplo: ("Memory usage exceeds max")

fatal() {
  return this.warn('FATAL', message, data, service, uuid);
}

SanitizerService

Responsável pela sanitização dos dados dos logs.

Atributo(s)

  • sanitizeFields

    • Objeto que possui os campos a serem sanitizados
  • redactValue

    • Valor substituto utilizado na sanitização

Método(s)

addFields()

Adiciona campos personalizados que também devem ser sanitizados.

  • Método estático, logo, aplica-se independentemente da instância;
static updateSanitizeFields(option: string[]): void {
  // [...]
  SanitizerService.#sanitizeFields = merge;
}

Input: [ 'password', 'access-token', 'refresh-token' ]


updateRedactValue()

Atualiza o valor utilizado para substituir os campos sensíveis.

Características:

  • Método estático, logo, aplica-se independentemente da instância;
static updateRedactValue(text: string): void {
  // [...]
  SanitizerService.redactValue = value;
}

Input: '[SENSITIVE DATA]'


sanitize()

Responsável pela sanitização dos dados dos logs.

Características:

  • Sanitização baseada nas chaves do objeto;
  • As chaves são case insensitive;
  • Sanitização compatível com múltiplos níveis de profundidade construído com recursivdade;
static sanitize(data) {
  let keys = Object.keys(data);
  // [...]
  return data;
}

Input:

{
  "email": "[email protected]",
  "password": "123456789",
  "data": {
    "phone": "1234-5678"
  }
}

Output:

{
  "email": "[email protected]",
  "password": "[SENSITIVE DATA]",
  "data": {
    "phone": "[SENSITIVE DATA]"
  }
}
*Supondo que os campos do sanitizer fields são: 'password' e 'phone'

FormatterService

Responsável pela formatação personalizada dos logs.

Atributo(s)

  • format
    • Formatação personalizada do log;

Método(s)

set format()

Estrutura um novo template ao format.

  • Método estático, logo, aplica-se independentemente da instância;
static set format(template) {
    this.#format = template;
}

Input: '[${timestamp}] [${id}] [${type} - ${service}] ${message}';


get format()

Recupera o valor atual do #format no 'FormatterService'.

Características:

  • Método estático, logo, aplica-se independentemente da instância;
static get format() {
    return this.#format;
}

Output: '[${timestamp}] [${id}] [${type} - ${service}] ${message}';


transformTemplateToLog()

Baseado no objeto do log, utiliza-se do template para gerar a mensagem personalizada do log.

Características:

  • Transformação do template em um log com valores reais;
static transformTemplateToLog(body) {
    const format = this.#format;
    // [...]
    return log;
}

Input:

{
  "type": "FATAL",
  "message": "teste",
  "data": {
    "nome": "falar"
  },
  "service": "ServicoTeste"
}

Output:

[2026-05-28T02:49:34.012Z] [e5f1510eaf3b45e2b7d3] [FATAL - ServicoTeste] teste