#c# #enterprise-library
#c# #корпоративная библиотека
Вопрос:
Есть ли другой способ изменить местоположение ведения журнала в блоке ведения журнала entlib? В настоящее время у меня есть следующий код для внесения изменений
var location = CommonConfiguration.ErrorLogPath;
ConfigurationFileMap configFileMap = new ConfigurationFileMap();
configFileMap.MachineConfigFilename = "AppName.exe.config";
var entLibConfig = ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
LoggingSettings loggingSettings = (LoggingSettings)entLibConfig.GetSection(LoggingSettings.SectionName);
RollingFlatFileTraceListenerData fileTraceListener = loggingSettings.TraceListeners.Get("Rolling Flat File Trace Listener") as RollingFlatFileTraceListenerData;
fileTraceListener.FileName = Path.Combine(location, @"LogAppname.log");
entLibConfig.Save();
проблема заключается в том, что, когда у пользователей нет доступа на запись, изменение не сохраняется в файле ведения журнала
Ответ №1:
Вы можете использовать API Fluent Configuration, например, следующий код модульного тестирования:
[Test]
public void TestLoggingWithFluentConfigurationAPI()
{
var builder = new ConfigurationSourceBuilder();
builder.ConfigureLogging()
.WithOptions
.DoNotRevertImpersonation()
.LogToCategoryNamed("Basic")
.SendTo.FlatFile("Basic Log File")
.FormatWith(new FormatterBuilder()
.TextFormatterNamed("Text Formatter")
.UsingTemplate(
"Timestamp: {timestamp}{newline Message: {message}{newline}Category: {category}{newline}"))
.ToFile("d:\logs\BasicTest.log")
.SendTo.RollingFile("Rolling Log files")
.RollAfterSize(1024)
.ToFile("d:\logs\RollingTest.log")
.LogToCategoryNamed("General")
.WithOptions.SetAsDefaultCategory()
.SendTo.SharedListenerNamed("Basic Log File");
var configSource = new DictionaryConfigurationSource();
builder.UpdateConfigurationWithReplace(configSource);
EnterpriseLibraryContainer.Current
= EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
LogWriterFactory logFactory = new LogWriterFactory(configSource);
LogWriter logWriter = logFactory.CreateDefault();
logWriter.Write("This is test message", "Basic");
logWriter.Write("This is default message");
string logfilepath = Path.Combine("d:", "logs\BasicTest.log");
Assert.IsTrue(File.Exists(logfilepath));
Assert.IsTrue(File.Exists("d:\logs\RollingTest.log"));
}
Ссылка:
http://msdn.microsoft.com/en-us/library/ff664363 (PandP.50).aspx