Exemplo n.º 1
0
        /// <summary>
        /// 2012.11.05 修正初次调用的时候,由于同步BUG,导致Log为空的问题。
        /// </summary>
        static Boolean InitLog()
        {
            /*
             * 日志初始化可能会除法配置模块,其内部又写日志导致死循环。
             * 1,外部写日志引发初始化
             * 2,标识日志初始化正在进行中
             * 3,初始化日志提供者
             * 4,此时如果再次引发写入日志,发现正在进行中,放弃写入的日志
             * 5,标识日志初始化已完成
             * 6,正常写入日志
             */

            if (_Log != null)
            {
                return(true);
            }
            if (_initing > 0 && _initing == Thread.CurrentThread.ManagedThreadId)
            {
                return(false);
            }

            lock (_lock)
            {
                if (_Log != null)
                {
                    return(true);
                }

                _initing = Thread.CurrentThread.ManagedThreadId;
                _Log     = TextFileLog.Create(LogPath);

                var set = Setting.Current;
                if (!set.NetworkLog.IsNullOrEmpty())
                {
                    var nlog = new NetworkLog(NetHelper.ParseEndPoint(set.NetworkLog, 514));
                    _Log = new CompositeLog(_Log, nlog);
                }

                _initing = 0;
            }

            WriteVersion();

            return(true);
        }
Exemplo n.º 2
0
        /// <summary>在WinForm控件上输出日志,主要考虑非UI线程操作</summary>
        /// <remarks>不是常用功能,为了避免干扰常用功能,保持UseWinForm开头</remarks>
        /// <param name="control">要绑定日志输出的WinForm控件</param>
        /// <param name="useFileLog">是否同时使用文件日志,默认使用</param>
        /// <param name="maxLines">最大行数</param>
        public static void UseWinFormControl(this Control control, Boolean useFileLog = true, Int32 maxLines = 1000)
        {
            var clg = _Log as TextControlLog;
            var ftl = _Log as TextFileLog;

            if (_Log is CompositeLog cmp)
            {
                ftl = cmp.Get <TextFileLog>();
                clg = cmp.Get <TextControlLog>();
            }

            // 控制控制台日志
            if (clg == null)
            {
                clg = new TextControlLog();
            }
            clg.Control  = control;
            clg.MaxLines = maxLines;

            if (!useFileLog)
            {
                Log = clg;
                if (ftl != null)
                {
                    ftl.Dispose();
                }
            }
            else
            {
                if (ftl == null)
                {
                    ftl = TextFileLog.Create(null);
                }
                Log = new CompositeLog(clg, ftl);
            }
        }