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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@xtreamsrl/nest-logging

v1.5.2

Published

A Nestjs module to handle logging in a pluggable way.

Downloads

435

Readme

@xtreamsrl/nest-logging

This package exports a NestJS dyn-module LoggingModule, a ConsoleLogger and TestLogger adapters and a LoggerServicePort.

LoggingModule

The LoggingModule is a dynamic NestJS module which makes it easy to configure and use a logging system in your NestJS applications.

It registers a global LoggerService provider to the app DI container. The LoggerService can be used to provide a consistent logging mechanism across the entire application, allowing developers to easily track and debug application behavior.

LoggerServicePort

Ports are interfaces that define contracts that should be implemented by adapters, to abstract technical details. In this case, the LoggerServicePort defines the service interface that provides logging functionality.

ConsoleLogger

The ConsoleLogger adapter provides an easy way to output logs to the console and provide an example on how to create a LoggerPort adapter.

TestLogger

The TestLogger adapter provides a dummy logger that can be mocked in unit tests to verify that the correct logs are being emitted, if needed.


Installation

npm install @xtreamsrl/nest-logging

Usage

In your application module, import the LoggingModule as follows and configure it appropriately :

import { ConsoleLogger, LoggingModule } from '@xtreamsrl/nest-logging';

@Module({
  imports: [
    LoggingModule.forRoot({
      context: 'root',
      global: true,
      loggerAdapter: {
        useClass: ConsoleLogger,
      },
      enableTracingIntegration: false,
      enableLoggerInterceptor: false,
    })
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

Nest App Logger

To instruct Nest to use an instance of the LoggerService as the app logger, the LoggerService must be configured using the app.useLogger() method. This can be done along with app bootstrap, as follows:

  import { LoggerServicePort } from '@xtreamsrl/nest-logging';
  const app = await NestFactory.create(AppModule, {
    bufferLogs: true,
  });
  app.useLogger(await app.resolve<LoggerServicePort>(LoggerServicePort));
  app.flushLogs();

Context overriding

To have better contextualized log messages, it is recommended to override the context of the LoggerService when it is injected in the constructor:

@Injectable()
export class ExampleService {
  constructor(private readonly logger: LoggerServicePort) {
    this.logger.setContext(ExampleService.name);
  }
}

Configuration

global

Determines if the module is registered global-scoped or not. When true, makes the LoggingModule module global-scoped. Once imported into any module, a global-scoped module will be visible in all modules. Thereafter, modules that wish to inject a service exported from a global module do not need to import the provider module.


loggerAdapter

A NestJS valid provider (ClassProvider, ValueProvider, FactoryProvider, ExistingProvider), excluded the provide property, of a LoggerPort adapter.


enableTracingIntegration

A boolean flag to indicate whether the tracing integration with OpenTelemetry should be enabled. If true, data from the active span context are retrieved and propagated to the LoggerAdapter through the DiagnosticContext.


spanAttributes

Optional list of attributes of the span to retrieve and include in the logging DiagnosticContext.


envsVar

Optional list of environment variables to retrieve and include in the logging DiagnosticContext.


context

The context that the logger will be associated with. Can and should be overwritten where the LoggerService is used.


enableLoggerInterceptor

A boolean flag to indicate whether the LoggerInterceptor should be enabled. When enabled, the LoggerInterceptor is registered as a global app interceptor.


requestMapper

A function used to extract request information from the execution context and map into a RequestInfo object. This mapping function is needed to keep the LoggerInterceptor agnostic from the web framework used in the app (Fastify, Express).Required if logger interceptor is enabled. Required if logger interceptor is enabled.


responseMapper

A function used to extract response information from the execution context and map into a ResponseInfo object. This mapping function is needed to keep the LoggerInterceptor agnostic from the web framework used in the app (Fastify, Express). Required if logger interceptor is enabled.


excludeRoutes

Optional array of strings that represent routes to be excluded from logging by the LoggerInterceptor.

DiagnosticContext

The DiagnosticContext (freely inspired by Spring MDC) offers a method to enhance log messages with additional information which can greatly improve the tracking of the program's execution. Among these, can be added to the DiagnosticContext :

  • Runtime environment variables values.
  • OpenTelemetry tracing information, such as active spanId and traceId, if any.
  • Application labels provided by the developer for each specific case.

Build

Run nx build nest-logging to build the package.

Run unit tests

Run nx test nest-logging to execute the unit tests via Jest.

Versioning

Export the GH_TOKEN environment variable with your GitHub token with at least the repo scope:

export GH_TOKEN=<YOUR_PERSONAL_GH_TOKEN>

Then run the following command:

lerna version

The GH_TOKEN is needed to push the version commit and tag to the remote repository and to create the release on GitHub.

For general information about the versioning process, please refer to the root Readme Versioning section.

Publishing

Update your local .npmrc file to include the following lines:

@xtreamsrl:registry=https://registry.npmjs.org/
//registry.npmjs.org/:_authToken=${NPM_TOKEN}

The ${NPM_TOKEN} placeholder is a npm personal access token publish permissions on the @xtreamsrl organization. It can be treated as placeholder to replace with the actual token value, or you can set it as an environment variable:

export NPM_TOKEN=<YOUR_PERSONAL_NPM_TOKEN>

Then run the following command:

npm run lerna-publish

Who we are