gpt4 book ai didi

javascript - 如何访问文件处理程序以使用 Typescript 在 deno 日志模块中运行 flush 方法

转载 作者:行者123 更新时间:2023-12-04 15:14:11 24 4
gpt4 key购买 nike

我需要访问记录器的 fileHandler 对象,以便将缓冲区刷新到文件。

这是我的程序:

import * as log from "https://deno.land/std@0.75.0/log/mod.ts"
import { Application } from "https://deno.land/x/oak@v6.3.1/mod.ts";

const app = new Application()
const port = 7001

await log.setup({
handlers:{
file: new log.handlers.FileHandler("DEBUG",{
filename: "logger.log",
formatter: lr => {
return `${lr.datetime.toISOString()} [${lr.levelName}] ${lr.msg}`
}
})
},
loggers: {
default: {
level: "DEBUG",
handlers: ["file"]
}
}
})
const logger = log.getLogger()
logger.debug("hi there")

app.use((ctx) => {
ctx.response.body = 'Hi there'
})

console.log(`listening on port ${port}`)
app.listen({ port })

我的问题是日志消息从未写入文件。如果我删除最后一行( app.listen() ),它会写入文件,因为进程结束。但是如果我离开它,监听过程永远不会结束,所以日志缓冲区永远不会被刷新。

如果我用 Ctrl-C 中断进程,它也不会写入

文档 ( https://deno.land/std@0.75.0/log/README.md ) 说我可以使用 FileHandler 的刷新方法强制刷新日志。但是我不知道如何访问 fileHandler 对象。
所以我试过这个:

const logger = log.getLogger()
logger.debug("hi there")
logger.handlers[0].flush()

而且有效!但仅作为 javascript,而不是 typescript
作为 typescript ,我收到此错误:

error: TS2339 [ERROR]: Property 'flush' does not exist on type 'BaseHandler'.
logger.handlers[0].flush()

最佳答案

好吧,我找到了解决办法。
我只需要导入 FileHandler 类并将我的处理程序从 BaseHandler 转换为 FileHandler。所以我在导入中添加了这一行:

import { FileHandler } from "https://deno.land/std@0.75.0/log/handlers.ts"

然后在创建记录器之后:

logger.debug("hi there")
const fileHandler = <FileHandler> logger.handlers[0]
fileHandler.flush()

看起来有点奇怪,我仍然猜想一定有不那么古怪/更多语义的解决方案。但它工作正常。

关于javascript - 如何访问文件处理程序以使用 Typescript 在 deno 日志模块中运行 flush 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64624106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com