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()