3

コンソールにログを記録する機能があります

        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)

そして、私が理解できないことが2つあります。なぜunit -> 'A代わりにあるのstring -> 'Aですか?どのように使用すればよいですか?そして、StringFormatここをとして使用できますTextWriterFormatか?

これに関するもう1つの問題は、最初のスニペットで継承formatすることですが、kfprintfでは、フォーマットメッセージがあり、ものの前に表示string -> 'Resultされるため、継承できません。何とか継承できると思いますが、良い例が見つかりません。見つかったのはF#コンパイラの一部だけです:unit -> 'Result[x][x]formatf

[<CompiledName("PrintFormatToTextWriter")>]
let fprintf (os: TextWriter) fmt  = kfprintf (fun _ -> ()) os fmt 

[<CompiledName("PrintFormatLineToTextWriter")>]
let fprintfn (os: TextWriter) fmt  = kfprintf (fun _ -> os.WriteLine()) os fmt 

しかし、どうすればこれを使用できますunitか? メッセージの後にメッセージを投稿するにはどうすればよいですか?

4

1 に答える 1