f#的printf样式日志记录

Ale*_*lex 3 f#

如何使用类似于log4net的日志库为f#设置printf样式的记录器.我有Log.Debug,Info,Warn等功能,类似于log4net中的DebugFormat或InfoFormat.我试图为我的Log类设置类型扩展,我可以调用printf样式,如Log.Debugf"%s""foo".我的通用日志功能如下所示:

let log format = Printf.kprintf (sprintf "%s") format
Run Code Online (Sandbox Code Playgroud)

我有扩展功能签名的问题,以登录我的调试功能...我尝试使用Debugf格式和调试

Dan*_*iel 7

我不熟悉log4net,但假设您正在登录MessageBox(就像专业人士那样),您可以执行以下操作:

let log format = Printf.kprintf (fun msg -> System.Windows.Forms.MessageBox.Show(msg)) format
Run Code Online (Sandbox Code Playgroud)

在这种情况下,由于Show需要一个字符串,它可以缩短为:

let log format = Printf.kprintf System.Windows.Forms.MessageBox.Show format
Run Code Online (Sandbox Code Playgroud)


des*_*sco 5

你的意思是这样的吗?

open System

type SomeLogger() = 
    member this.Error(format : string, [<ParamArray>]args : obj[] ) = ()
    member this.Info(format : string, [<ParamArray>]args : obj[] ) = ()


module Extensions = 
    type SomeLogger with
        member this.FInfo format = Printf.ksprintf (this.Info) format
        member this.FError format = Printf.ksprintf (this.Error) format

open Extensions

let l = new SomeLogger()
l.FInfo "%d%s" 10 "123"
Run Code Online (Sandbox Code Playgroud)