Skip to main content


The @ensono-stacks/logger plugin allows you to add industry standard logging functionality to your Stacks apps.

Currently, the following logging libraries are supported:

Setting up @ensono-stacks/logger


An existing Stacks workspace.


Install the @ensono-stacks/logger with the following command:

npm install --save-dev @ensono-stacks/logger@latest

Executors and Generators

To see a list of the plugin capabilities run the following command:

nx list @ensono-stacks/logger

View additional information about a plugin capability through the following command:

nx g @ensono-stacks/logger:[generator-executor-name] --help



Add Winston to your project
Generates a new Nx library which contains a Winston logger instance and associated config.


An existing Stacks workspace.


nx g @ensono-stacks/logger:winston

Command line arguments

The following command line arguments are available:

OptionDescriptionTypeAccepted ValuesDefaultAvailable in interactive prompt?
--nameName of the generated librarystringN/AYes
--tagsAdd tags to the project (used for linting)stringN/A
--directoryDirectory where the project is placed (within Nx libs directory)stringN/A
--skipFormatSkip formatting filesbooleantrue/falsefalse
--logLevelTypeThe type of log levels that will be usedenumcli/syslog/npmnpmYes
--consoleLogsOutput logs to the consolebooleantrue/falsefalse
--fileTransportPathFile path used for logs transportstringN/A
--httpTransportAdd a http transportbooleantrue/falsefalse
--httpTransportHostRemote host of the HTTP logging endpointstringN/A
--httpTransportPortRemote port of the HTTP logging endpointnumberN/A
--httpTransportPathRemote URI of the HTTP logging endpointstringN/A
--httpTransportSSLUse SSL for the HTTP logging endpointbooleantrue/falsefalse
--streamPathStream transport pathstringN/A

Generator Output

The generator will create a new application within your libs folder with the following structure:

โ”œโ”€โ”€ libs/[libname]
โ”‚ โ”œโ”€โ”€ src
โ”‚ โ”œโ”€โ”€ โ”œโ”€โ”€ index.ts // Contains the Winston configuration and creates the logger instance
โ”‚ โ”œโ”€โ”€ โ”œโ”€โ”€ index.test.ts // Tests for the logger
โ”‚ โ”œโ”€โ”€ .eslintrc.json // ESLint config - extends from workspace config
โ”‚ โ”œโ”€โ”€ jest.config.ts // Jest config - extends from workspace config
โ”‚ โ”œโ”€โ”€ project.json // Nx config file for the library
โ”‚ โ”œโ”€โ”€ tsconfig.json // Main Typescript config for the library - extends workspace config & references the below two tsconfig files
โ”‚ โ”œโ”€โ”€ tsconfig.lib.json // Typescript config for the library's source files (excluding tests)
โ”‚ โ”œโ”€โ”€ tsconfig.spec.json // Typescript config for the library's test files
โ”‚ โ”œโ”€โ”€ // Information on the library and how to run scripts
โ”œโ”€โ”€ jest.config.ts // Workspace-level Jest config - created if this does not already exist
โ””โ”€โ”€ jest.preset.ts // Workspace-leve Jest preset that extends `@nrwl/jest/preset` - created if this does not already exist.

Additionally, the following files will be modified

โ”œโ”€โ”€ nx.json // Adds configuration for Jest tests if this has not already been done by another generator
โ”œโ”€โ”€ package.json // Adds winston as a dependency
โ””โ”€โ”€ tsconfig.base.json // Adds new library into `paths` field

Importing the logger into your app

Having created a logger using the above command, import the Winston logger instance from the newly created library (the import name can be found within the tsconfig.base.json files paths field) into your application:

import logger from '@workspace-name/mynewlogger'

level: 'info',
message: 'I love Ensono Stacks!',

To change how Winston is configured, edit the created library:

const logger = winston.createLogger(logConfiguration);

// Custom transport for non-production
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple(),

export default logger;

Other resources

Documentation for Winston can be found here.