···178178179179**NOTE:** If a label *function* throws an error then the label will be the error's message. Make sure your labels don't throw!
180180181181+#### Filtering By Label
182182+183183+Logs can be filtered by labels similar to how [debug-js](https://github.com/debug-js/debug) works.
184184+185185+By default *no* filtering is done. Your child loggers follow the Pino Child Logger behavior of inherting parent log level.
186186+187187+Using either `LOG_FILTER_ENABLE` or `LOG_FILTER_DISABLE` you can enable or disable a child logger and it's children.
188188+189189+```ts
190190+191191+/*
192192+ * process.env.LOG_FILTER_ENABLE = 'Third:Fourth,Second:*:Foo,Bar'
193193+ */
194194+195195+import {loggerApp, childLogger} from '@foxxmd/logging';
196196+197197+logger = loggerApp();
198198+logger.debug('Test');
199199+// [2024-03-07 11:27:41.944 -0500] DEBUG: Test
200200+201201+const nestedChild1 = childLogger(logger, 'First');
202202+nestedChild1.debug('I am nested one level');
203203+// [2024-03-07 11:27:41.945 -0500] DEBUG: [First] I am nested one level
204204+205205+const nestedChild2 = childLogger(nestedChild1, ['Second', 'Third'], { level: 'silent' });
206206+nestedChild2.info('I do not log because of set level and not enabled by filter');
207207+208208+const nestedChild3 = childLogger(nestedChild2, ['Fourth']);
209209+nestedChild3.info('I do log because of filter Third:Fourth');
210210+211211+const nestedChild4 = childLogger(nestedChild3, ['Foo']);
212212+nestedChild4.info('I do log because of filter Second:*:Foo');
213213+214214+const nestedChild5 = childLogger(nestedChild4, ['Bar']);
215215+nestedChild5.info('I do log because of filter Bar');
216216+```
217217+181218### Serializing Objects and Errors
182219183220Passing an object or array as the first argument to the logger will cause the object to be JSONified and pretty printed below the log message