1

我正在使用 Castle windsor,并使用配置文件启动它(并且真的希望将所有内容都保留在那里),它还拥有一个日志记录工具。

当我在初始化时从 Windsor 收到错误(由于配置错误、缺少依赖项等),我没有启动记录器,因此 - 无法在任何地方写入错误......这是我的代码:

    private static ILogger m_Logger { get; set; } 

    static void Main(string[] args)
    {
        try
        {
            // Windsor has missing dependencies
            var container = new WindsorContainer("windsor.xml");
            // Did not make it here...
            var logger = container.Resolve<ILogger>();
            m_Logger.Debug("Testing 123");
        }
        catch (Exception)
        {
            // Logger was not initialized, null reference exception!
            m_Logger.Debug("Testing 123");
        }
    }

我在这里有什么选择?

谢谢,尼尔。

4

2 回答 2

0

您可以写入 Windows 事件日志:

catch (Exception ex)
{
    const string Source = "MySource";
    const string Log = "MyNewLog";

    // Create the source, if it does not already exist.
    if(!EventLog.SourceExists(Source))
    {
        EventLog.CreateEventSource(Source , Log);
    }

    // Create an EventLog instance and assign its source.
    EventLog myLog = new EventLog();
    myLog.Source = Source;

    string eventMessage = string.Empty;

    while (ex != null)
    {
        eventMessage += string.Format("{0}\n{1}\n{2}\n\n",
            ex.GetType().FullName,
            ex.Message,
            ex.SackTrace);
    }

    myLog.WriteEntry(eventMessage);
}
于 2012-08-07T12:21:36.760 回答
0

这真的吞噬了所有使用 IOC 容器的期望。无论如何,您可以在 catch 块中手动创建您的记录器(例如:log4net)并记录它。

...
catch (Exception)
{
    // Create logger here
    m_Logger = new Log4NetLogger(); // Assuming 'windsor.xml' configured to inject a Log4NetLogger
    m_Logger.Debug("Testing 123");
}
于 2013-03-26T14:31:33.770 回答