在f#中使用log4net作为一个单独的类



我看过一些关于使用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)

相关内容

  • 没有找到相关文章

最新更新