Изменить местоположение и имя файла журнала во время выполнения на основе GUID, переданного в QueryString - PullRequest
0 голосов
/ 27 марта 2012

Прямо сейчас, когда я запускаю приложение, оно создает файл (имя файла, указанное в разделе ведения журнала Web.Config).

Я хочу изменить путь и имя файла (на основе GUID, передаваемого в качестве строки запроса) во время выполнения.

Я провел некоторое исследование, но имеющиеся примеры не работают для меня. Буду признателен, если кто-то может предоставить пример кода.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2015

Если вам просто нужно изменить файл журнала трассировки во время выполнения, вы можете просто удалить текущий tracelistener, используя

System.Diagnostics.Trace.Listener.Remove ( "Listener1");

Затем добавьте новый прослушиватель с новым именем файла журнала как,

System.Diagnostics.Trace.Listener.Add (новый System.Diagnostics.TextWriterTraceListener ("NewLogFileName.txt", "Listener2");

Теперь ваши журналы будут записываться в NewLogFileName.txt

0 голосов
/ 28 марта 2012

Как вы обнаружили, ваши требования не совсем подходят для подхода на основе конфигурации Enterprise Library.Это не значит, что это невозможно.

Один из способов выполнить то, что вы хотите, - это использовать программную конфигурацию блока ведения журнала.

Один из подходов заключается в создании IDictionary дляпровести сопоставление идентификаторов с LogWriters.Когда приходит идентификатор, проверьте, существует ли уже LogWriter в IDictionary.Если это так, используйте его, а если нет, то создайте новый LogWriter.

Вот пример кода, который использует Logging Fluent Interface для настройки UnityContainer, а затем разрешает LogWriterи сохраняет его в Словаре:

int id = 123123;
Dictionary<int, LogWriter> loggers = new Dictionary<int, LogWriter>();

ConfigurationSourceBuilder builder = new ConfigurationSourceBuilder();

builder.ConfigureLogging()
        .WithOptions
            .DoNotRevertImpersonation()
        .SpecialSources.LoggingErrorsAndWarningsCategory.SendTo.FlatFile("Flat File Listener").ToFile(@"trace.log")
        .LogToCategoryNamed("General")
            .WithOptions.SetAsDefaultCategory()
            .SendTo.FlatFile("AppSpecificFlatFile" + id)
            .ToFile("logging" + id + ".log")       
            ;

DictionaryConfigurationSource configSource = new DictionaryConfigurationSource();
builder.UpdateConfigurationWithReplace(configSource);
coreExtension = new EnterpriseLibraryCoreExtension(configSource);

IUnityContainer container = new UnityContainer();
container.AddExtension(coreExtension);

var logger = container.Resolve<LogWriter>();

loggers[id] = logger;

Это всего лишь пример, который не является потокобезопасным или абстрагированным, но, надеюсь, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...