A simple logger built as class decorator, amplify like.
Due to the experimental decorators feature, there are some limitations.
Starting from the preferred syntax @Logger()
In TypeScript you need to simply enable experimentalDecorators: true
in your tsconfig.json
, to be able to use the preferred syntax.
In JavaScript you need to use external libraries like @babel/plugin-proposal-decorators to use the preferred syntax.
Anyway since a decorator is just a function, you can use it by importing the loggerDecorator
method.
Arguments of logger are:
name
: optional, default value is name of classoptions
:level
: default toinfo
import Logger, {loggerDecorator} from 'simplelog-decorator'
// @Logger('YourCustomClass')
// @Logger('YourCustomClass', {level: 'warn'})
// loggerDecorator()(YourClass)
@Logger() // name will be YourClass, level info
class YourClass {
sample_method() {
this.logger.verbose('hi from sample_method')
this.logger.debug('hi from sample_method')
this.logger.info('hi from sample_method')
this.logger.warn('hi from sample_method')
this.logger.error('hi from sample_method')
}
}
As previously said, experimental decorators are used for this package implementation and since experimental it has some bugs like unsafe typing
.
TypeScript compiler complains when it finds out a property used inside a class that calls a decorator cause it cannot infer it, so as a temporary workaround simply declare an interface
interface Example {logger: any}
@Logger()
class Example {
hello() {
this.logger.debug() // THIS IS VALID
}
}
This has been developed as a personal project, in order to be able to have an amplify-like logger as a package, without needing to install the whole amplify lib for just logging features.
But feel free to contribute by forking this project and opening a PR once done.