feat(log/configure): filter
can be an array
This commit is contained in:
parent
d5f5cdd27a
commit
d3cb31f1a7
@ -66,6 +66,10 @@ configure([
|
|||||||
// if filter is a string, then it is pattern
|
// if filter is a string, then it is pattern
|
||||||
// (https://github.com/visionmedia/debug#wildcards) which is
|
// (https://github.com/visionmedia/debug#wildcards) which is
|
||||||
// matched against the namespace of the logs
|
// matched against the namespace of the logs
|
||||||
|
//
|
||||||
|
// If it's an array, it will be handled as an array of filters
|
||||||
|
// and the transport will be used if any one of them match the
|
||||||
|
// current log
|
||||||
filter: process.env.DEBUG,
|
filter: process.env.DEBUG,
|
||||||
|
|
||||||
transport: transportConsole(),
|
transport: transportConsole(),
|
||||||
|
@ -4,6 +4,42 @@ const { compileGlobPattern } = require('./utils')
|
|||||||
|
|
||||||
// ===================================================================
|
// ===================================================================
|
||||||
|
|
||||||
|
const compileFilter = filter => {
|
||||||
|
if (filter === undefined) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const type = typeof filter
|
||||||
|
if (type === 'function') {
|
||||||
|
return filter
|
||||||
|
}
|
||||||
|
if (type === 'string') {
|
||||||
|
const re = compileGlobPattern(filter)
|
||||||
|
return log => re.test(log.namespace)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Array.isArray(filter)) {
|
||||||
|
const filters = filter.map(compileFilter).filter(_ => _ !== undefined)
|
||||||
|
const { length } = filters
|
||||||
|
if (length === 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (length === 1) {
|
||||||
|
return filters[0]
|
||||||
|
}
|
||||||
|
return log => {
|
||||||
|
for (let i = 0; i < length; ++i) {
|
||||||
|
if (filters[i](log)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new TypeError('unsupported `filter`')
|
||||||
|
}
|
||||||
|
|
||||||
const createTransport = config => {
|
const createTransport = config => {
|
||||||
if (typeof config === 'function') {
|
if (typeof config === 'function') {
|
||||||
return config
|
return config
|
||||||
@ -19,26 +55,15 @@ const createTransport = config => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let { filter } = config
|
|
||||||
let transport = createTransport(config.transport)
|
|
||||||
const level = resolve(config.level)
|
const level = resolve(config.level)
|
||||||
|
const filter = compileFilter([config.filter, level === undefined ? undefined : log => log.level >= level])
|
||||||
|
|
||||||
|
let transport = createTransport(config.transport)
|
||||||
|
|
||||||
if (filter !== undefined) {
|
if (filter !== undefined) {
|
||||||
if (typeof filter === 'string') {
|
|
||||||
const re = compileGlobPattern(filter)
|
|
||||||
filter = log => re.test(log.namespace)
|
|
||||||
}
|
|
||||||
|
|
||||||
const orig = transport
|
const orig = transport
|
||||||
transport = function (log) {
|
transport = function (log) {
|
||||||
if ((level !== undefined && log.level >= level) || filter(log)) {
|
if (filter(log)) {
|
||||||
return orig.apply(this, arguments)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (level !== undefined) {
|
|
||||||
const orig = transport
|
|
||||||
transport = function (log) {
|
|
||||||
if (log.level >= level) {
|
|
||||||
return orig.apply(this, arguments)
|
return orig.apply(this, arguments)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
>
|
>
|
||||||
> In case of conflict, the highest (lowest in previous list) `$version` wins.
|
> In case of conflict, the highest (lowest in previous list) `$version` wins.
|
||||||
|
|
||||||
|
- @xen-orchestra/log minor
|
||||||
- xo-server-auth-ldap patch
|
- xo-server-auth-ldap patch
|
||||||
- xo-server patch
|
- xo-server patch
|
||||||
- xo-web minor
|
- xo-web minor
|
||||||
|
Loading…
Reference in New Issue
Block a user