WindsorContainer 构造错误和日志记录问题

Posted

技术标签:

【中文标题】WindsorContainer 构造错误和日志记录问题【英文标题】:WindsorContainer Construction Error and Logging Issue 【发布时间】:2012-08-07 11:57:14 【问题描述】:

我正在使用 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");
        
    

我有什么选择?

谢谢, 尼尔。

【问题讨论】:

您正在运行什么类型的应用程序? ASP.NET?赢得表格?你是如何部署你的应用程序的。在你的服务器上?在客户端机器上? 当你错误配置你的应用程序时,你应该在测试或登台时发现,但是你不需要捕获和记录,因为你的应用程序不会启动,你可以看到堆栈跟踪在本地访问服务。 @Steven 不正确。至少在某些情况下,你只是在某个地方得到null 【参考方案1】:

您可以写入 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\n1\n2\n\n",
            ex.GetType().FullName,
            ex.Message,
            ex.SackTrace);
    

    myLog.WriteEntry(eventMessage);

【讨论】:

我真的很想在日志中有这个,或者至少可以选择通过 log4net Windsor 工具将它写入事件日志。有什么办法吗? 好吧,如果您的记录器配置不正确,就无法使用它。如果配置正确,您可以简单地调用 log4net 日志记录门面。在你的作文根目录中这样做没有问题。【参考方案2】:

这确实使人们对使用 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");

【讨论】:

以上是关于WindsorContainer 构造错误和日志记录问题的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ 通过记日志来看routingkey

RabbitMQ 通过记日志来看routingkey

mysql日志

mysql日志

mysql日志

记生产服务器频繁死机重大事故