using System.Diagnostics;

namespace LogStudy.TraceLog.Next
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("跟踪日志学习-进阶项目");

            DefaultTraceSource();
            DefaultTraceSourceWithLog();
            DefaultTraceSourceWithoutSourceLevels();

            Console.WriteLine("按回车键,退出程序!");
            Console.ReadLine();
        }

        static void Test()
        {
            WeakReference s = new WeakReference(null);
        }

        /// <summary>
        /// 使用默认 SourceLevels 参数的 TraceSource
        /// 因为 SourceLevels 默认为Off,所以使用默认不传SourceLevels参数的构建函数生成的 TraceSource 是不会输出任何跟踪信息的。
        /// </summary>
        static void DefaultTraceSourceWithoutSourceLevels()
        {
            TraceSource defaultTraceSource = new TraceSource("Andy-DefaultTraceSourceWithoutSourceLevels");

            var preMessaage = defaultTraceSource.Name + ": ";

            defaultTraceSource.TraceData(TraceEventType.Verbose, 1, $"{preMessaage}================");
            defaultTraceSource.TraceEvent(TraceEventType.Error, 1, $"{preMessaage}---------------");
            defaultTraceSource.TraceInformation($"{preMessaage}++++++++++++++++++++++++++++++++++++++++++++++");
            defaultTraceSource.TraceTransfer(2, $"{preMessaage}************", Guid.NewGuid());

            //强制输出
            defaultTraceSource.Flush();
        }

        /// <summary>
        /// 默认 TraceSource
        /// </summary>
        static void DefaultTraceSource()
        {
            TraceSource defaultTraceSource = new TraceSource("Andy-DefaultTraceSource", SourceLevels.All);

            var preMessaage = defaultTraceSource.Name + ": ";

            defaultTraceSource.TraceData(TraceEventType.Verbose, 1, $"{preMessaage}================");
            defaultTraceSource.TraceEvent(TraceEventType.Error, 1, $"{preMessaage}---------------");
            defaultTraceSource.TraceInformation($"{preMessaage}++++++++++++++++++++++++++++++++++++++++++++++");
            defaultTraceSource.TraceTransfer(2, $"{preMessaage}************", Guid.NewGuid());

            //强制输出
            defaultTraceSource.Flush();
        }

        /// <summary>
        /// 默认跟踪源:内容输出到日志文件
        /// </summary>
        static void DefaultTraceSourceWithLog()
        {
            TraceSource defaultTraceSource = new TraceSource("Andy-DefaultTraceSourceWithLog", SourceLevels.All);
            defaultTraceSource.Listeners.Clear();

            defaultTraceSource.Listeners.Add(new DefaultTraceListener() { LogFileName = "DefaultTraceListener.log" });

            var preMessaage = defaultTraceSource.Name+": ";

            defaultTraceSource.TraceData(TraceEventType.Verbose, 1, $"{ preMessaage }================");
            defaultTraceSource.TraceEvent(TraceEventType.Error, 1, $"{ preMessaage }---------------");
            defaultTraceSource.TraceInformation($"{ preMessaage }++++++++++++++++++++++++++++++++++++++++++++++");
            defaultTraceSource.TraceTransfer(2, $"{ preMessaage }************", Guid.NewGuid());

            //强制输出
            defaultTraceSource.Flush();
        }
    }
}