1

I am using the Fluent API to handle various configuration options for Logging using EntLib.

I am building up the loggingConfiguration section manually in code. It seems to work great except that the RollingFlatFileTraceListener doesn't actually Roll the file. It will respect the size limit and cap the amount of data it writes to the file appropriately, but it doesn't not actually create a new file and continue the logs.

I've tested it with a sample app and the app.config and it seems to work. So I'm guess that I am missing something although every config option that seems like it needs is there.

Here is the basics of the code (with hard-coded values to show a config that doesn't seem to be working): //Create the config builder for the Fluent API var configBuilder = new ConfigurationSourceBuilder();

            //Start building the logging config section                 
            var logginConfigurationSection = new LoggingSettings("loggingConfiguration", true, "General");                 
            logginConfigurationSection.RevertImpersonation = false;
            var _rollingFileListener = new RollingFlatFileTraceListenerData("Rolling Flat File Trace Listener", "C:\\tracelog.log", "----------------------", "",
                            10, "MM/dd/yyyy", RollFileExistsBehavior.Increment,
                            RollInterval.Day, TraceOptions.None,
                            "Text Formatter", SourceLevels.All);


            _rollingFileListener.MaxArchivedFiles = 2;

            //Add trace listener to current config
            logginConfigurationSection.TraceListeners.Add(_rollingFileListener);

            //Configure the category source section of config for flat file
            var _rollingFileCategorySource = new TraceSourceData("General", SourceLevels.All);

            //Must be named exactly the same as the flat file trace listener above.
            _rollingFileCategorySource.TraceListeners.Add(new TraceListenerReferenceData("Rolling Flat File Trace Listener"));

            //Add category source information to current config
            logginConfigurationSection.TraceSources.Add(_rollingFileCategorySource);          

            //Add the loggingConfiguration section to the config.
            configBuilder.AddSection("loggingConfiguration", logginConfigurationSection);

            //Required code to update the EntLib Configuration with settings set above.
            var configSource = new DictionaryConfigurationSource();
            configBuilder.UpdateConfigurationWithReplace(configSource);

            //Set the Enterprise Library Container for the inner workings of EntLib to use when logging
            EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);

Any help would be appreciated!

mainedev
  • 11
  • 3

1 Answers1

4

Your timestamp pattern is wrong. It should be yyy-mm-dd instead of MM/dd/yyyy. The ‘/’ character is not supported.

Also, you could accomplish your objective by using the fluent configuration interface much easier. Here's how:

    ConfigurationSourceBuilder formatBuilder = new ConfigurationSourceBuilder();

    ConfigurationSourceBuilder builder = new ConfigurationSourceBuilder();
    builder.ConfigureLogging().LogToCategoryNamed("General").
        SendTo.
        RollingFile("Rolling Flat File Trace Listener")
        .CleanUpArchivedFilesWhenMoreThan(2).WhenRollFileExists(RollFileExistsBehavior.Increment)
        .WithTraceOptions(TraceOptions.None)
        .RollEvery(RollInterval.Minute)
        .RollAfterSize(10)
        .UseTimeStampPattern("yyyy-MM-dd")
        .ToFile("C:\\logs\\Trace.log")
        .FormatWith(new FormatterBuilder().TextFormatterNamed("textFormatter"));

    var configSource = new DictionaryConfigurationSource(); 
    builder.UpdateConfigurationWithReplace(configSource); 
    EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
    var writer = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();

    DateTime stopWritingTime = DateTime.Now.AddMinutes(10);
    while (DateTime.Now < stopWritingTime)
    {
        writer.Write("test", "General");
    }
Grigori Melnik
  • 4,067
  • 2
  • 34
  • 40