@ensono-stacks/logger
The @ensono-stacks/logger
plugin allows you to add industry standard logging functionality to your Ensono Stacks apps.
Currently, the following logging libraries are supported:
Setting up @ensono-stacks/logger
Prerequisites
An existing Ensono Stacks workspace.
Installation
Install the @ensono-stacks/logger with the following command:
- npm
- yarn
npm install --save-dev @ensono-stacks/logger@latest
yarn add --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
Generators
@ensono-stacks/logger:winston
Add Winston to your project
Generates a new Nx library which contains a Winston logger instance and associated config.
Prerequisites
An existing Ensono Stacks workspace.
Usage
nx g @ensono-stacks/logger:winston
Command line arguments
The following command line arguments are available:
Option | Description | Type | Accepted Values | Default | Available in interactive prompt? |
---|---|---|---|---|---|
--name | Name of the generated library | string | N/A | Yes | |
--tags | Add tags to the project (used for linting) | string | N/A | ||
--directory | Directory where the project is placed (within Nx libs directory) | string | N/A | ||
--skipFormat | Skip formatting files | boolean | true/false | false | |
--logLevelType | The type of log levels that will be used | enum | cli/syslog/npm | npm | Yes |
--consoleLogs | Output logs to the console | boolean | true/false | false | |
--fileTransportPath | File path used for logs transport | string | N/A | ||
--httpTransport | Add a http transport | boolean | true/false | false | |
--httpTransportHost | Remote host of the HTTP logging endpoint | string | N/A | ||
--httpTransportPort | Remote port of the HTTP logging endpoint | number | N/A | ||
--httpTransportPath | Remote URI of the HTTP logging endpoint | string | N/A | ||
--httpTransportSSL | Use SSL for the HTTP logging endpoint | boolean | true/false | false | |
--streamPath | Stream transport path | string | N/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
│ ├── README.md // 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 `@nx/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'
logger.log({
level: 'info',
message: 'I love Ensono Stacks!',
})
You would need to change the @workspace-name
to the name of your workspace
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;
Log Levels
Winston provides several log levels that you can use to categorize and filter log messages. These log levels are commonly used in many logging libraries and provide a way to prioritize and categorize log messages based on their severity.
By default Winston uses the following npm log levels:
-
error: Used to log errors and exceptions. This log level is for critical issues that require immediate attention.
-
warn: Indicates a potential issue or warning that does not necessarily disrupt the application but should be noted.
-
info: This is the default log level and is used for general information about the application's operations. It's often used to log major events or milestones.
-
http: Logs HTTP related messages, such as host, path and response/request details.
-
verbose: A step above debug, providing more detailed information but not as noisy as silly or debug.
-
debug: Used for debugging and providing additional information about the application's state and behavior.
-
silly: The lowest log level, often used internally for debugging and tracing purposes.
For more information on log level severity please refer to the log levels section of the Winston documentation.
Other resources
Documentation for Winston can be found here.