57 lines
1.9 KiB
JavaScript
57 lines
1.9 KiB
JavaScript
const cds = require ('@sap/cds/lib')
|
|
const LOG = cds.log('cds.log')
|
|
|
|
module.exports = class LogService extends cds.Service {
|
|
init(){
|
|
|
|
this.on('GET','Loggers', (req)=>{
|
|
let loggers = Object.values(cds.log.loggers).map (_logger)
|
|
let {$search} = req._.req.query
|
|
if ($search) {
|
|
const re = RegExp($search,'i')
|
|
loggers = loggers.filter (l => re.test(l.id) || re.test(l.level))
|
|
}
|
|
return loggers.sort ((a,b) => a.id < b.id ? -1 : 1)
|
|
})
|
|
|
|
this.on('PUT','Logger', (req)=>{
|
|
const {id} = req.params[0] || req.data
|
|
if (!id) return req.reject('No logger id specified in request')
|
|
return _logger (cds.log (id, req.data))
|
|
})
|
|
|
|
this.on('debug', (req)=>{
|
|
const {logger:id} = req.params[0] || req.data
|
|
if (!id) return req.reject('No logger id specified in request')
|
|
return _logger (cds.log (id, {level:'debug'}))
|
|
})
|
|
|
|
this.on('reset', (req)=>{
|
|
const {logger:id} = req.params[0] || req.data
|
|
if (!id) return req.reject('No logger id specified in request')
|
|
return _logger (cds.log (id, {level:'info'}))
|
|
})
|
|
|
|
this.on('format', (req)=>{
|
|
const $ = req.data; LOG.info('format:',$)
|
|
// Set format for new loggers constructed subsequently
|
|
cds.log.format = (id, level, ...args) => {
|
|
const fmt = []
|
|
if ($.timestamp) fmt.push ('|', (new Date).toISOString())
|
|
if ($.level) fmt.push ('|', _levels[level].padEnd(5))
|
|
if ($.tenant) fmt.push ('|', cds.context && cds.context.tenant)
|
|
if ($.reqid) fmt.push ('|', cds.context && cds.context.id)
|
|
if ($.id) fmt.push ('|', id)
|
|
fmt[0] = '[', fmt.push ('] -', ...args)
|
|
return fmt
|
|
}
|
|
// Apply this format to all existing loggers
|
|
Object.values(cds.log.loggers).forEach (l => l.setFormat (cds.log.format))
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
const _logger = ({id,level}) => ({id, level:_levels[level] })
|
|
const _levels = [ 'SILENT', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE' ]
|