我有登录控制台的功能
Printf.kprintf
(printfn
"[%s][%A] %s"
<| level.ToString()
<| DateTime.Now)
format // fprint to System.Console.Out maybe
但它使用Printf.StringFormat作为格式,现在我想遵循相同的逻辑并将其打印到文件。
所以我试试
Printf.kfprintf
(fun f ->
fprintfn file "[%s][%A] "
<| level.ToString()
<| DateTime.Now
) file (format)
有两件事我无法理解。为什么unit -> 'A
代替string -> 'A
?我该怎么用?我可以在StringFormat
使用我的TextWriterFormat
吗?
另一个问题是,在第一个代码段中,我将format
继承到string -> 'Result
,但在kfprintf中我无法执行此操作,因为unit -> 'Result
和格式消息出现在{{{ 1}}东西。我想我可以以某种方式继承[x][x]
到format
,但我找不到好的例子,我找到的唯一一个是F#编译器的一部分:
f
但我怎样才能使用此[<CompiledName("PrintFormatToTextWriter")>]
let fprintf (os: TextWriter) fmt = kfprintf (fun _ -> ()) os fmt
[<CompiledName("PrintFormatLineToTextWriter")>]
let fprintfn (os: TextWriter) fmt = kfprintf (fun _ -> os.WriteLine()) os fmt
?如何在留言后发帖子?
答案 0 :(得分:4)
我认为您不需要使用Printf.kfprintf
,因为内部 Printf.kprintf
使用fprintfn
,您可以继续使用TextWriter
let logToWriter writer level format =
Printf.kprintf (fprintfn writer "[%s][%A] %s"
<| level.ToString()
<| System.DateTime.Now) format
另请参阅this了解使用Printf.kfprintf
。