Javascript 如何使用Typescript访问文件处理程序以运行deno日志模块中的flush方法
我需要访问记录器的Javascript 如何使用Typescript访问文件处理程序以运行deno日志模块中的flush方法,javascript,typescript,logging,deno,Javascript,Typescript,Logging,Deno,我需要访问记录器的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 a
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中断进程,它也不会写
文档()说我可以使用FileHandler中的flush方法强制日志刷新。但是我不知道如何访问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()
logger.debug(“你好”)
const fileHandler=logger.handlers[0]
flush()文件处理程序
看起来有点奇怪,我仍然认为应该有一些不那么奇怪/更具语义的解决方案。但它工作正常。这个解决方案对我不起作用。即使在30秒后,日志也不会在文件中更新。唉,上述解决方案在运行时失败,出现
错误:Uncaught(承诺中)类型错误:fileHandler.flush不是函数fileHandler.flush()
。