Skip to main content
Sign in
Snippets Groups Projects
Unverified Commit 607b3896 authored by Sigmund, Dominik's avatar Sigmund, Dominik
Browse files

Added Option to format the output

parent 239e1f94
Branches
Tags
1 merge request!1Update index.test.js, examples/all-options.js, examples/log-to-file.js,...
......@@ -29,10 +29,22 @@ e.g.:
`log.info('this', ['array', 8], 4, {type:'test'})`
will logged as
will logged as (with default format)
__YYYY-MM-DDTHH:ii:ss SERVER INFO this ["array",8] 4 {"type": "test"}
### Formatting
You can edit the output using the __format__-Option.
Possible Setting:
- __{timestamp}__: Display the timestamp in ISO format
- __{hostname}__: Display the hostname
- __{name}__: Display the Application name
- __{loglevel}__: Display the Loglevel
- __{message}__: Display the Message
### Options
```json
......@@ -43,6 +55,7 @@ __YYYY-MM-DDTHH:ii:ss SERVER INFO this ["array",8] 4 {"type": "test"}
"path": "Path Logfile located",
"loglevel": "Minimal LogLevel. Default: WARN",
"delimeter": "How to join multiple outputs. Default: (a single space)",
"format": "Format the output. Default: {timestamp}\\t{hostname}\\t{loglevel}\\t{message}",
"graylog": {
"active": "true or false",
"mode": "http or udp, defaults to udp",
......
......
const Log = require('../index.js')
let log = new Log({
name: 'Sample-Application',
hostname: 'test-server',
loglevel: 'INFO'
})
log.info('This is an Information in default formatting')
log = new Log({
name: 'Sample-Application',
hostname: 'test-server',
loglevel: 'INFO',
format: '{message}'
})
console.log()
console.log('---- Message Only ----')
log.info('Only the message')
log = new Log({
name: 'Sample-Application',
hostname: 'test-server',
loglevel: 'INFO',
format: '{"timestamp":"{timestamp}", "level":"{loglevel}", "message":"{message}"}'
})
console.log()
console.log('---- As JSON ----')
log.info('JSON Output')
......@@ -13,6 +13,11 @@ function Log (options) {
} else {
this.loglevel = 2
}
if (this.options.format) {
this.format = this.options.format
} else {
this.format = '{timestamp}\t{hostname}\t{name}\t{loglevel}\t{message}'
}
if (this.options.delimeter) {
this.delimeter = this.options.delimeter
} else {
......@@ -109,9 +114,13 @@ function Log (options) {
} else {
msgString = this.objectToString(message[0])
}
let msg = this.format
msg = msg.replace('{timestamp}', this.getDate())
msg = msg.replace('{hostname}', this.hostname)
msg = msg.replace('{name}', this.name)
msg = msg.replace('{loglevel}', tag)
msg = msg.replace('{message}', msgString)
let msg = this.getDate() + '\t' + this.hostname + '\t' + this.name + '\t' + tag + '\t' + msgString
switch (tag) {
case 'INFO':
console.info(msg)
......
......
......@@ -27,6 +27,7 @@ describe('@general/log', () => {
expect(log.delimeter).toBe(' ')
expect(log.name).toBe('@general/log')
expect(log.hostname).toBe(hostname)
expect(log.format).toBe('{timestamp}\t{hostname}\t{name}\t{loglevel}\t{message}')
})
it('should use option hostname', () => {
let log = new LOG({
......@@ -36,6 +37,7 @@ describe('@general/log', () => {
expect(log.delimeter).toBe(' ')
expect(log.name).toBe('@general/log')
expect(log.hostname).toBe('test')
expect(log.format).toBe('{timestamp}\t{hostname}\t{name}\t{loglevel}\t{message}')
})
it('should use option name', () => {
let log = new LOG({
......@@ -45,6 +47,7 @@ describe('@general/log', () => {
expect(log.delimeter).toBe(' ')
expect(log.name).toBe('test')
expect(log.hostname).toBe(hostname)
expect(log.format).toBe('{timestamp}\t{hostname}\t{name}\t{loglevel}\t{message}')
})
it('should use option delimeter', () => {
let log = new LOG({
......@@ -54,6 +57,7 @@ describe('@general/log', () => {
expect(log.delimeter).toBe(';')
expect(log.name).toBe('@general/log')
expect(log.hostname).toBe(hostname)
expect(log.format).toBe('{timestamp}\t{hostname}\t{name}\t{loglevel}\t{message}')
})
it('should use option loglevel', () => {
let log = new LOG({
......@@ -63,10 +67,19 @@ describe('@general/log', () => {
expect(log.delimeter).toBe(' ')
expect(log.name).toBe('@general/log')
expect(log.hostname).toBe(hostname)
expect(log.format).toBe('{timestamp}\t{hostname}\t{name}\t{loglevel}\t{message}')
})
it('should use option format', () => {
let log = new LOG({
format: '{message}'
});
expect(log.loglevel).toBe(2)
expect(log.delimeter).toBe(' ')
expect(log.name).toBe('@general/log')
expect(log.hostname).toBe(hostname)
expect(log.format).toBe('{message}')
})
it.todo('should use option graylog')
it.todo('should use option file')
it.todo('should use option path')
})
describe('log by level', () => {
it('should log fatal only if level is appropriate', () => {
......@@ -270,6 +283,62 @@ describe('@general/log', () => {
expect(logged).toBe(expected)
})
})
describe('log formatting', () => {
it('should log message only if set', () => {
let log = new LOG({
format: '{message}',
loglevel: 'DEBUG'
});
let logged = log.debug('test')
let expected = 'test'
expect(logged).toBe(expected)
})
it('should log hostname only if set', () => {
let log = new LOG({
format: '{hostname}',
loglevel: 'DEBUG'
});
let logged = log.debug('test')
let expected = hostname
expect(logged).toBe(expected)
})
it('should log name only if set', () => {
let log = new LOG({
format: '{name}',
loglevel: 'DEBUG'
});
let logged = log.debug('test')
let expected = '@general/log'
expect(logged).toBe(expected)
})
it('should log timestamp only if set', () => {
let log = new LOG({
format: '{timestamp}',
loglevel: 'DEBUG'
});
let logged = log.debug('test')
let expected = getDate()
expect(logged).toBe(expected)
})
it('should log loglevel only if set', () => {
let log = new LOG({
format: '{loglevel}',
loglevel: 'DEBUG'
});
let logged = log.debug('test')
let expected = 'DEBUG'
expect(logged).toBe(expected)
})
it('should log json like message if set', () => {
let log = new LOG({
format: '{"timestamp":"{timestamp}", "level":"{loglevel}", "message":"{message}"}',
loglevel: 'DEBUG'
});
let logged = log.debug('test')
let expected = '{"timestamp":"' + getDate() + '", "level":"DEBUG", "message":"test"}'
expect(logged).toBe(expected)
})
})
describe('log to file', () => {
it('should create the folder if not exists', () => {
let logPath = os.tmpdir() + '/log-test' + Math.floor(Math.random() * 1000)
......@@ -312,7 +381,6 @@ describe('@general/log', () => {
it.todo('should log to graylog via udp')
it.todo('should log to graylog via http')
})
// TODO: formatting
// TODO: log to loki
// TODO: add mutation test
})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment