log4js-autolog
v1.0.7
Published
A TypeScript method decorator for log4js, just decorate the method to generate a log before/after execution
Downloads
1
Readme
log4js-autolog
A TypeScript method decorator for log4js, just decorate the method to generate a log before/after execution
How to use it
import * as Log4js from "log4js";
import {autolog} from "log4js-autolog";
const logger = Log4js.getLogger("Foo");
logger.level = 'debug';
class Foo {
private logger = logger;
@autolog(logger)
public greet(name: string) {
return `Hello: ${name}`;
}
@autolog(logger, {timer: true})
public async asyncGreet(name: string) {
return Promise.resolve(`Hello: ${name}`);
}
// note "logger" is a string, it will get the logger by calling this["logger"]
@autolog("logger", {errLevel: "error"})
public getLength(name: string) {
return name.length;
}
}
async function main() {
const f = new Foo();
f.greet("Turing");
await f.asyncGreet("Turing");
try {
// @ts-ignore
f.getLength(null);
} catch (err) {
// console.log(err);
}
}
main();
>>>> OUTPUT >>>>
[DEBUG] Foo - Foo.greet('Turing') => 'Hello: Turing'
[DEBUG] Foo - async Foo.asyncGreet('Turing') called
[DEBUG] Foo - async Foo.asyncGreet('Turing') (0ms) => 'Hello: Turing'
[ERROR] Foo - Foo.getLength(null) => TypeError: Cannot read property 'length' of null
Usage
@autolog(logger, opt)
logger
can be aLog4js.Logger
or a string. If it is a string, it is assumed to be a property name of the object, i.e. we callthis[logger]
to get the real logger.opt
is optional and contains the following optional fieldsenterOnly
: if true, log before calling the function, return value (and error) will be ignoredignorePromise
: if true, will NOT track promise resolve/reject (the default value is false and it will track both Promise.resolve and reject)level
: a string, the log level, default is "debug"errLevel
: a string, the log level when exception thrown, default is "warn"timer
if true, will include the total execution time in the log message, only valid for async or promise result