我看过一些关于使用c#和f#实现log4net的帖子-但我想在一个单独的类中实现它作为一个单例(所以我可以从任何地方调用)
我松散地跟随这篇文章。我只是觉得我从c#到f#的翻译有点落后。
我设置了log4net。在控制台应用程序
的开始处配置并运行以下代码namespace MyNamespace
open System.IO
open log4net.Config
module LoggerConfigure =
let configureLogging() =
FileInfo("log4net.config")
|> XmlConfigurator.Configure
|> ignore
下面(来自上面的链接)是c#,我希望它是一个可以作为单例调用的f#类。
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
我的主要问题是-我有点卡住转换为f#类。我该怎么做呢?如果你对整个概念有任何想法,我也很感激。
可能需要更复杂的单例处理,但我相信f#模块中的标准全局let
声明已经足够好了。
您只需要确保在访问log
值之前运行配置代码,这可以通过将该调用作为定义log
的let绑定的一部分来实现:
module LoggerConfigure =
let configureLogging() =
FileInfo("log4net.config")
|> XmlConfigurator.Configure
|> ignore
log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
let log = configureLogging()
或者如果你想把所有东西放在一个表达式中:
module LoggerConfigure =
let log =
FileInfo("log4net.config") |> XmlConfigurator.Configure |> ignore
log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)