用Trace与TextWriterTraceListener实现的类似Log4Net的日志工具

很实用,希望有帮助到大家

/// <summary>
    /// 日志类/
    /// 默认路径在Debug下的log文件夹下(若要修改路径可设置LogPath属性)/
    /// 日志文件名称统一为当天:yyyy-MM-dd.log
    /// </summary>
    public class Logger
    {
        private static string _logPath = AppDomain.CurrentDomain.BaseDirectory + "log";

        /// <summary>
        /// 保存日志的文件路径
        /// </summary>
        public static string LogPath
        {
            get { return _logPath; }
            set { _logPath = value; }
        }

        /// <summary>
        /// 当前日期
        /// </summary>
        private static DateTime CurrentDate = DateTime.Now;

        /// <summary>
        /// 是否第一次打开或者日志文件名称已经改变
        /// 默认为true,即第一次打开日志文件
        /// </summary>
        private static bool firstTimeOpenOrFileNameChanged = true;

        public static void LogInfo(string message)
        {
            Log(message, LogType.INFO);
        }

        public static void LogInfo(string message,Exception ex)
        {
            Log(message, ex,LogType.INFO);
        }

        public static void LogError(string message)
        {
            Log(message, LogType.ERROR);
        }

        public static void LogError(string message, Exception ex)
        {
            Log(message, ex, LogType.ERROR);
        }

        public static void Fail(string message)
        {
            Log(message, LogType.FAIL);
        }

        public static void Fail(string message, Exception ex)
        {
            Log(message, ex, LogType.FAIL);
        }

        public static void Warn(string message)
        {
            Log(message, LogType.WARN);
        }

        public static void Warn(string message, Exception ex)
        {
            Log(message, ex, LogType.WARN);
        }

        public static void Debug(string message)
        {
            #if DEBUG
            Log(message,LogType.DEBUG);
            #endif
        }

        public static void Debug(string message, Exception ex)
        {
            #if DEBUG
            Log(message, ex, LogType.DEBUG);
            #endif
        }

        public static void Log(string message, LogType type)
        {
            if (!Directory.Exists(_logPath))
            {
                Directory.CreateDirectory(_logPath);
            }

            //总是检查今天是否已经过了
            //日期过了,日志文件名称也发生了改变
            if (CurrentDate.Subtract(DateTime.Now).Days != 0)
            {
                firstTimeOpenOrFileNameChanged = true;
                CurrentDate = DateTime.Now;
            }

            if (firstTimeOpenOrFileNameChanged)
            {
                firstTimeOpenOrFileNameChanged = false;//设置为false
                string logFile = Path.Combine(_logPath, CurrentDate.ToString("yyyy-MM-dd") + ".log");
                FileStream fileStream = File.Open(logFile, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
                fileStream.Position = fileStream.Length;//定位到文件末尾,追加
                TextWriterTraceListener listener = new TextWriterTraceListener(fileStream);
                Trace.AutoFlush = true;
                Trace.Listeners.Add(listener);
            }

            Trace.WriteLine("");
            Trace.WriteLine(string.Format("{0} - {1} - {2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), type, message));
        }

        public static void Log(string message, Exception ex, LogType type)
        {
            Log(message, type);
            Trace.WriteLine(string.Format("[Exception]{0}", ex));
        }

        public enum LogType
        { 
            DEBUG,
            INFO,
            ERROR,
            WARN,
            FAIL,
        }
    }