💬 Simple logger
A small service to log messages in the console.
🍿 Usage
⚠️ This package is only for Node.
⚙️ Example
Logging messages
import { simpleLogger } from '@homer0/simple-logger';
const logger = simpleLogger();
logger.log('Starting the app');
if (usingExperimentalFeature()) {
logger.warn('WARNING: This feature is experimental');
}
if (onDevelopment()) {
logger.info('Running on a development environment');
}
if (loadConfiguration()) {
logger.success('The configuration was successfully loaded');
}
try {
methodThatMayThrowAnError();
} catch (error) {
logger.error('Damn it!', error);
}
Colored messages
This was demonstrated on the example above:
success(message)
will log a green message.warn(message)
will log a yellow message.error(message)
will log a red message.info(message)
will log a gray message.
But they all depend on this method: log(message, color)
; it allows you to specify one of the colors available on the colors
package.
By default, it uses the console default text color, but you can specify a different color for the message.
logger.log('Starting the app', 'green');
Multiple messages at once
All the methods support both a single message or an Array
of them:
logger.info(['App running', 'connection detected', 'starting Skynet...']);
You can even specify a color for each message:
logger.success([
'It works!',
['wait, something is happening', 'gray'],
'Nevermind, Skynet is up and running!',
]);
Prefixing the messages
When creating the logger, you can specify a prefix
option that will be prepended to each message.
const logger = simpleLogger({ prefix: 'my-app' });
logger.log('Starting the app');
Date and time
The same way you can specify the prefix when creating the logger, you also have a showTime
option that will make the logger show the current date and time on each message.
const logger = simpleLogger({ showTime: true });
logger.log('Starting the app');
Yes, you can use both prefix
and showTime
together.
Jimple provider
If your app uses a Jimple container, you can register SimpleLogger
as the simpleLogger
service by using its provider:
import { simpleLoggerProvider } from '@homer0/simple-logger';
container.register(simpleLoggerProvider);
const logger = container.get('simpleLogger');
And since the provider is a "provider creator" (created with my custom version of Jimple), you can customize its service name:
container.register(
simpleLoggerProvider({
serviceName: 'myLogger',
}),
);
App logger provider
The package has an alternative service provider for Jimple that gets the project name from the package.json
and uses as the prefix:
import { appLoggerProvider } from '@homer0/simple-logger';
container.register(appLoggerProvider);
const logger = container.get('appLogger');
logger.log('Starting the app');
You can also specify a appLoggerPrefix
on your package.json
, and it will use that instead of the name
.
Dependencies
The "app logger provider" depends on the following services, and it will try to find them in the container, otherwise, it will create new instances:
@homer0/package-info
, with the name packageInfo
. Used to get the project's package.json
information.@homer0/path-utils
, with the name pathUtils
. Needed by package-info
to generate the paths relative to the project root.
If you already implement the dependencies, but with a different name, you can specify them in the provider:
container.register(
appLoggerProvider({
services: {
packageInfo: 'myPackageInfo',
pathUtils: 'myPathUtils',
},
}),
);
🤘 Development
As this project is part of the packages
monorepo, it requires Yarn, and some of the tooling, like ESLint and Husky, are installed on the root's package.json
.
Yarn tasks
Task | Description |
---|
test | Runs the unit tests. |
build | Bundles the project. |