How to get request body with customize token?
fancyoung opened this issue · comments
The code support custom_tokens, but if the replacement is something like ctx.request.body
,
I can't pass the option just like:
app.use(log4js.koaLogger(log4js.getLogger("http"), { level: 'auto',
tokens: [
{ token: ':body', replacement: ctx.request.body}
],
format: ':remote-addr - -' +
' ":method :url HTTP/:http-version"' +
' :status :content-length ":referrer"' +
' ":user-agent"' +
' :body'
}))
because ctx is not defined here.
I can use a wrapper, but is there any simple way to solve this problem?
You can pass the replacement
as a replace function.
tokens: [
{ token: ':body', replacement: function() { return ctx.request.body } }
]
But it seems can't use as Koa-middleware way,
such as
app.use(log4js.koaLogger(log4js.getLogger('http'), { level: 'auto', tokens: [
{ token: ':body', replacement: function() { return ctx.request.body } }
] }))
because ctx is not defined here.
I have just added a new syntax to allow replacing token with ctx
.
tokens: [
{ token: ':body', content: function(ctx) { return ctx.request.body } }
]
You can upgrade your package to v1.1.0
(for Koa v1) or v2.1.0
(for Koa v2).
Wonderful.
Now I use { token: ':body', content: function(ctx) { return JSON.stringify(ctx.request.body) } }
log the body'
It not work, it save the first time request param, and return it everytime
Which should be fix by this #8 PR.