改变企业库配置中途在一个程序(Change Enterprise Library configura

2019-09-26 02:16发布

我要记录了一段时间一组特定的文件/文件夹,然后切换,并开始记录到不同的文件集。 对于这一点,我用流利的API来设置我的名,因为我想(这里没有显示)。 但我不能够改变的配置在中途的程序。 它不工作,我希望它的方式。 是否有任何命令来重新加载或清楚,我需要做配置,如果我设置的配置第二次?

如果我注释掉FirstConfig(); 而接下来的Log语句,那么SecondConfig()工作正常。 否则,只有FirstConfig()似乎有效果。

static void Main(string[] args)
{

    FirstConfig();
    Logger.LogInfoMessage("Before processing"); //Some wrapper around EntLib logger methods

    //Do some processing for some time

    SecondConfig();
    Logger.LogInfoMessage("After after processing");
}

private static void FirstConfig()
{
    var textFormatter = new FormatterBuilder()
        .TextFormatterNamed("First Text Formatter")
        .UsingTemplate("{message}");

    var builder = new ConfigurationSourceBuilder();
    builder.ConfigureLogging()
        .WithOptions.DoNotRevertImpersonation()
        .LogToCategoryNamed("General").WithOptions.SetAsDefaultCategory()
        .SendTo.FlatFile("First Listener")
        .FormatWith(textFormatter).WithHeader("").WithFooter("")
        .ToFile("Logs\\BeforeChange.log");

    var configSource = new DictionaryConfigurationSource();
    builder.UpdateConfigurationWithReplace(configSource);
    EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
}

private static void SecondConfig()
{
    var textFormatter = new FormatterBuilder()
        .TextFormatterNamed("Second Text Formatter")
        .UsingTemplate("{message}");

    var builder = new ConfigurationSourceBuilder();
    builder.ConfigureLogging()
        .WithOptions.DoNotRevertImpersonation()
        .LogToCategoryNamed("General").WithOptions.SetAsDefaultCategory()
        .SendTo.FlatFile("Second Listener")
        .FormatWith(textFormatter).WithHeader("").WithFooter("")
        .ToFile("Logs\\AfterChange.log");

    var configSource = new DictionaryConfigurationSource();
    builder.UpdateConfigurationWithReplace(configSource);
    EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
}

Answer 1:

最后一行是创建一个新的容器和分配的配置它,你要创建两个不同的容器中。

我认为,企业库允许现有的日志记录配置变化的检测,而不重新启动应用程序得到认可。 这是可能的,你只想修改现有的配置,然后办理变更。

http://msdn.microsoft.com/en-us/library/ff664363%28PandP.50%29.aspx

所有的配置源类实现IConfigurationSource接口。 该接口允许应用程序代码以订阅的配置更改的通知。 欲了解更多信息,请参阅在运行时更新配置设置 。 默认情况下,在企业库中,仅记录应用程序块寄存器接收的配置更改的通知。

对于企业库5.0 http://msdn.microsoft.com/en-us/library/ff664640%28v=pandp.50%29.aspx

“的一个例外,这是记录应用程序块,它能够检测配置更改并重新加载配置,而无需重新启动应用程序。这适用于Web窗体和Windows窗体应用程序,但它仍然会自动触发重新启动的Web应用程序窗体应用程序。这意味着你可以不依赖于ASP.NET应用程序的维护过程中的会话状态的,当你更改配置文件“。

您可以通过为在IConfigurationSource接口定义和实现所有企业库配置源SourceChanged事件注册检测更改配置。 你可以注册并取消注册使用标准的事件处理方式这一事件,如在下面的例子中,检测存储在一个名为MyConfig.config自定义文件更改配置。



文章来源: Change Enterprise Library configuration midway in a program