Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I use StringFormat as TextWriterFormat? kfprintf / kprintf usage

Tags:

printf

f#

I've got function to log to console

        Printf.kprintf
            (printfn
                "[%s][%A] %s"
                    <| level.ToString()
                    <| DateTime.Now)
                    format // fprint to System.Console.Out maybe

but it's using Printf.StringFormat as format and now I want to follow same logic and print it to file.

So I try

        Printf.kfprintf 
            (fun f -> 
                fprintfn file "[%s][%A] " 
                        <| level.ToString()
                        <| DateTime.Now
                ) file (format)

And there are two things I can't understand. Why there is unit -> 'A instead of string -> 'A ? How should I use it? And Can I use my StringFormat here as TextWriterFormat ?

Another trouble with this is that with first snippet I inherit format to string -> 'Result thing but in kfprintf I can't do it because there is unit -> 'Result and format message appears before [x][x] stuff. I guess I can somehow inherit format to f but I can't find good example, the only I found is part of F# compiler:

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

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

But how can I use this unit ? How can I post message after my message?

like image 809
cnd Avatar asked Oct 15 '25 22:10

cnd


1 Answers

I don't think you need to use Printf.kfprintf, you can carry on using Printf.kprintf as the inner fprintfn uses the TextWriter.

let logToWriter writer level format =
    Printf.kprintf (fprintfn writer "[%s][%A] %s" 
                    <| level.ToString() 
                    <| System.DateTime.Now) format

Also see this for an example of using Printf.kfprintf.

like image 169
Leaf Garland Avatar answered Oct 18 '25 09:10

Leaf Garland



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!