Use the customProps option to inject dynamic properties into every log call. The function receives the context (ctx) and should return an object containing the properties to be logged. This is useful for logging request parameters, query strings, or custom decorated properties from your Elysia app. You can use InferContext<typeof app> to get the correct type for the context.
import { logger, type InferContext } from "@bogeychan/elysia-logger";
const myPlugin = () => new Elysia().decorate("myProperty", 42);
// ...
class MyError extends Error {
constructor(message: string, public myValue: string) {
super(message);
}
}
app = app.error("myError", MyError).use(myPlugin());
app
.use(
logger({
/**
* This function will be invoked for each `log`-method called
* where you can pass additional properties that need to be logged
*/
customProps(ctx: InferContext<typeof app>) {
if (ctx.isError && ctx.code === "myError") {
return {
myValue: ctx.error.myValue,
};
}
return {
params: ctx.params,
query: ctx.query,
myProperty: ctx.myProperty,
};
},
})
)
.get("/", (ctx) => {
ctx.log.info(ctx, "Context");
return "with-context";
})
.get("/error", () => {
throw new MyError("whelp", "yay");
});