0

现在,每当我运行应用程序时,它都会创建一个文件(在 Web.Config 日志记录部分中指定的文件名)。

我想要的是在运行时更改文件的路径和名称(基于作为查询字符串传递的 GUID)。

我做了一些研究,但可用的例子对我不起作用。如果有人可以提供代码示例,将不胜感激。

4

2 回答 2

0

正如您所发现的,您的要求并不适合企业库的基于配置的方法。这并不是说它不能完成。

完成您想要的一种方法是使用日志记录块的编程配置。

一种方法是创建一个 IDictionary 来保存 ID 到 LogWriters 的映射。当一个 ID 进来时,检查 IDictionary 中是否已经存在一个 LogWriter。如果是,则使用它,如果不是,则创建一个新的 LogWriter。

下面是一些示例代码,它使用Logging Fluent 接口配置 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;

这只是一个示例,不是线程安全的或抽象的,但希望能有所帮助。

于 2012-03-28T03:33:02.007 回答
0

如果您只需要在运行时更改跟踪日志文件,您可以使用简单地删除当前的跟踪侦听器

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

然后添加一个新的监听器,新的日志文件名为,

System.Diagnostics.Trace.Listener.Add(new System.Diagnostics.TextWriterTraceListener("NewLogFileName.txt","Listener2");

现在您的日志将记录到 NewLogFileName.txt

于 2015-04-07T18:24:28.150 回答