当前位置:  开发笔记 > 编程语言 > 正文

具有企业应用程序块的自定义跟踪侦听器

如何解决《具有企业应用程序块的自定义跟踪侦听器》经验,为你挑选了1个好方法。

我目前正在开发的项目使用Enterprise Libraries V3.1框架进行日志记录.

我需要获取生成的日志文件并将其存档在特定点.内置的跟踪侦听器似乎使文件在记录事件之间保持打开状态.我已经设置了一个自定义跟踪侦听器,它将附加到文件并关闭它,以便文件始终可以移动.

它看起来像这样(为清晰起见,减去错误处理):

[ConfigurationElementType(typeof(CustomTraceListenerData))]
public class AlwaysClosedTextFileTraceListener : CustomTraceListener
{
    private string logFilePath;

    public AlwaysClosedTextFileTraceListener ()
    {
        logFilePath = @"hardcodedpath\log.txt";
    }

    public override void Write(string message)
    {
        using (StreamWriter logFile = File.AppendText(logFilePath))
        {
            logFile.Write(message);
            logFile.Flush();
            logFile.Close();
        }
    }

    public override void WriteLine(string message)
    {
        using (StreamWriter logFile = File.AppendText(logFilePath))
        {
            logFile.WriteLine(message);
            logFile.Flush();
        }
    }

    public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
    {
        if (data is LogEntry && this.Formatter != null)
        {
            WriteLine(this.Formatter.Format(data as LogEntry));
        }
        else
        {
            WriteLine(data.ToString());
        }
    }
}

这工作正常,但我宁愿以某种方式作为参数传递路径,而不是硬编码.

为了好玩,我尝试将它添加到构造函数中,看看会发生什么:

    public LogFolderTraceListener(string logFilePath)
    {
        this.logFilePath = logFilePath;
    }

当我这样做时,我收到一条错误信息,暗示我做错了什么:

System.InvalidOperationException : The type 'AlwaysClosedTextFileTraceListener' specified for custom trace listener named 'MyLogFile' does not a default constructor, which is required when no InitData is specified in the configuration.

从现在开始,我的调查已经非常多,与死胡同相反,无限概率问题.

我已经通过内置的源代码找到了这个翻版 RollingTraceListener

有一个类RollingFlatFileTraceListenerData : TraceListenerData似乎包含传递给构造函数的所有设置

在该文件的底部扎营RollingFlatFileTraceListenerData是类RollingTraceListenerAssembler : TraceListenerAsssembler这似乎是一个工厂

还有另一个类SystemDiagnosticsTraceListenerNode : TraceListenerNode似乎使Data类可以呈现给配置应用程序

我的问题是:如何CustomTraceListener使用可配置参数创建path



1> squig..:

CustomTraceListener派生自TraceListener,它有一个名为Attributes的StringDictionary.

这将包含TraceListener配置行中的所有属性,并且可以通过名称获取,例如.

string logFileName= Attributes["fileName"]


属性仅在构建对象时可用,您不能在构造函数中使用它们.
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有