.net 流畅配置问题

.net 流畅配置问题,.net,logging,enterprise-library,fluent,.net,Logging,Enterprise Library,Fluent,我试图让流畅的配置工作,但没有成功。我得到以下错误: 尝试获取LogWriter类型的实例时发生激活错误,密钥为“” 当我尝试访问日志编写器时: Dim logwriter As LogWriter = EnterpriseLibraryContainer.Current.GetInstance(Of LogWriter)() 配置: Dim formatBuilder As New FormatterBuilder() Dim builder As New Configura

我试图让流畅的配置工作,但没有成功。我得到以下错误:

尝试获取LogWriter类型的实例时发生激活错误,密钥为“”

当我尝试访问日志编写器时:

Dim logwriter As LogWriter = EnterpriseLibraryContainer.Current.GetInstance(Of LogWriter)()
配置:

    Dim formatBuilder As New FormatterBuilder()
    Dim builder As New ConfigurationSourceBuilder()
    builder.ConfigureInstrumentation().EnableLogging()
    builder.ConfigureLogging.LogToCategoryNamed("Important") _
        .WithOptions.SetAsDefaultCategory() _
        .SendTo.RollingFile("StandardListener") _
                .RollEvery(RollInterval.Midnight) _
                .RollAfterSize(50000) _
                .WhenRollFileExists(RollFileExistsBehavior.Increment) _
        .FormatWith(formatBuilder.CustomFormatterNamed("StandardFormatter", GetType(StandardFormatter))) _
        .ToFile("D:\LogFiles\" + fileName)
更新

我补充说

        var configSource = new DictionaryConfigurationSource();
        builder.UpdateConfigurationWithReplace(configSource);
        EnterpriseLibraryContainer.Current
          = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
我仍然找不到logwriter,实验室中的
Logger
也找不到(它在内部使用
EnterpriseLibraryContainer.Current.GetInstance()


有什么建议吗?

我刚刚遇到了一个类似的错误。这是因为配置不正确。我使用了FormatWithSharedFormatter,但没有定义共享格式化程序

在以下期间,我没有收到任何投诉:

var configSource = new DictionaryConfigurationSource();
builder.UpdateConfigurationWithReplace(configSource);
或:


我得到的只是在试图从Unity检索日志时没有找到它。删除FormatWithSharedFormatter配置使一切正常。

完成配置后,您实际如何处理它?您是否已将其放入配置源并将其馈送到容器或Entlib

乍一看,您的配置看起来不错,但这只是构建了对象图。之后你需要这样的东西:

  dim configSource as new DictionaryConfigurationSource()
  builder.UpdateConfigurationSourceWithReplace(configSource)
  ' To use container directly
  dim container as IUnityContainer = new UnityContainer() _
    .AddExtension(New EnterpriseLibraryCoreExtension(configSource))

  ' Or, to use Entlib static APIs
  EnterpriseLibraryContainer.Current = EnterpriseLibrary.CreateDefaultContainer(configSource)
应该这样做。如果没有,请发布一个更详细的示例,我可能可以为您调试它

更新

下面的示例对我来说很好,我只是尝试了一下:

Imports Microsoft.Practices.EnterpriseLibrary.Logging
Imports Microsoft.Practices.EnterpriseLibrary.Common.Configuration
Imports Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners

Module Module1

    Sub Main()
        InitializeEntlib("test.log")

        Logger.Write("This is a test message")
    End Sub

    Sub InitializeEntlib(ByVal logFileName As String)
        Dim builder As New ConfigurationSourceBuilder
        builder.ConfigureLogging() _
        .LogToCategoryNamed("Important") _
        .WithOptions.SetAsDefaultCategory() _
        .SendTo _
            .RollingFile("StandardListener") _
                .RollEvery(RollInterval.Midnight) _
                .RollAfterSize(50000) _
                .WhenRollFileExists(RollFileExistsBehavior.Increment) _
            .FormatWith(New FormatterBuilder().TextFormatterNamed("Text Formatter")) _
            .ToFile("D:\LogFiles\" + logFileName)

        Dim configSource As New DictionaryConfigurationSource()
        builder.UpdateConfigurationWithReplace(configSource)

        EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource)
    End Sub
End Module
我能看到的唯一不同是我使用的是TextFormatter,而不是任何你的StandardFormatter。试试这个,看看它是否有效——如果不起作用,那么就少了一些别的东西

Imports Microsoft.Practices.EnterpriseLibrary.Logging
Imports Microsoft.Practices.EnterpriseLibrary.Common.Configuration
Imports Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners

Module Module1

    Sub Main()
        InitializeEntlib("test.log")

        Logger.Write("This is a test message")
    End Sub

    Sub InitializeEntlib(ByVal logFileName As String)
        Dim builder As New ConfigurationSourceBuilder
        builder.ConfigureLogging() _
        .LogToCategoryNamed("Important") _
        .WithOptions.SetAsDefaultCategory() _
        .SendTo _
            .RollingFile("StandardListener") _
                .RollEvery(RollInterval.Midnight) _
                .RollAfterSize(50000) _
                .WhenRollFileExists(RollFileExistsBehavior.Increment) _
            .FormatWith(New FormatterBuilder().TextFormatterNamed("Text Formatter")) _
            .ToFile("D:\LogFiles\" + logFileName)

        Dim configSource As New DictionaryConfigurationSource()
        builder.UpdateConfigurationWithReplace(configSource)

        EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource)
    End Sub
End Module