You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
bandolier-website/lib/logging.js

54 lines
2.0 KiB

/*
A simple logging helper that uses the `pino` logging system. Pino is actually
not very good but it works well enough. My main complaint is it seems Pino's
speed comes from doing _zero_ string interpolation on its own. You have to
craft all of the strings yourself, which is probably the majority of the processing
time in logging, so Pino is effectively "cheating" by claiming it's fast but
not doing anything. If you ever want to beat Pino just don't log anything too.
Fastest log is no logs at all.
*/
import pino from 'pino';
import pinoPretty from 'pino-pretty';
import path from 'path';
const log_level = process.env.PROD === undefined ? "debug" : "info";
/*
Base log connector using `pino` logging. You can use this but
it's probably better to use the `create` method below so you can
specify the file this log came from.
*/
export const log = pino({
level: log_level,
prettyPrint: {
levelFirst: true,
colorize: true,
singleLine: true,
ignore: "module",
messageFormat: "{levelLabel}[{pid}] {module}: {msg}"
},
prettifier: pinoPretty
});
/*
This will create a `pino` logger with the name of the file in the log messages. Incredibly
useful when you're trying to find out where something happened. To make this work you need
to do the following:
```javascript
const log = logging.create(import.meta.url);
```
The `import.meta.url` is how you get a the current file in ESM style modules. In older
`node` you'd use so the called "magic" variable `__file`. I guess if you put `__` in a
variable name it's considered magic, but if you attach `meta.url` to a keyword like `import`
and then also make that keyword a function magically then it's definitely not magic and
suprior to a simple variable everyone knows.
*/
export const create = (import_url) => {
const pd = path.parse(import_url);
const log_line = `${path.basename(pd.dir)}/${pd.base}`;
return log.child({module: log_line});
}
export default { create, log };