现在每当我运行应用程序时它会创建一个文件(在Web.Config Logging Section中指定的文件名)。
我想要的是在运行时更改文件的路径和名称(基于GUID作为查询sting传递)。
我做了一些研究,但可用的例子对我不起作用。如果有人可以提供代码示例,我们将不胜感激。
答案 0 :(得分:0)
正如您所发现的,您的要求并不适合基于配置的企业库方法。这并不是说它无法完成。
实现所需目标的一种方法是使用日志记录块的编程配置。
一种方法是创建一个IDictionary来保存ID到LogWriters的映射。当ID进入时,检查IDictionary中是否已存在LogWriter。如果是,则使用它,如果没有,则创建一个新的LogWriter。
以下是一些示例代码,它使用Logging Fluent Interface配置UnityContainer,然后解析LogWriter并将其保存到Dictionary:
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;
这只是一个示例,并非线程安全或抽象,但应该有所帮助。
答案 1 :(得分:0)
如果您只需要在运行时更改跟踪日志文件,则可以使用
删除当前的tracelistener。System.Diagnostics.Trace.Listener.Remove(&#34; Listener1&#34);
然后添加一个新的监听器,其新日志文件名为
System.Diagnostics.Trace.Listener.Add(new System.Diagnostics.TextWriterTraceListener(&#34; NewLogFileName.txt&#34;,&#34; Listener2&#34;);
现在您的日志将记录到NewLogFileName.txt