/// <summary> /// 重载 OnClose, 在基础实现的基础上停止缓冲刷新线程。 /// </summary> protected override void OnClose() { this.isClosed = true; if (this.Enable) { lock (this) { // 注册触发性任务以定时输出日志 if (this.task != null) { // 这里不需要取消任务的注册,而是让任务自己通过发现其相关 appender 已经关闭并将 nextExecuteTime 设为 null 来主动取消 // 因为这里调用 UnregisterTriggerTask 有可能造成死锁,参见: TriggerTaskHostBase.UnregisterTriggerTask、TriggerTaskHostBase.Execute // XMS.Core.Tasks.TaskManager.Instance.DefaultTriggerTaskHost.UnregisterTriggerTask(this.task.Key); this.task = null; } // 输出缓冲区中的所有日志 this.Flush(); base.OnClose(); } } }
/// <summary> /// 重载 ActivateOptions, 在基础实现的基础上启动缓冲刷新线程。 /// </summary> public override void ActivateOptions() { if (this.Enable) { base.ActivateOptions(); this.is4Demo = this.Name.Equals("demo", StringComparison.InvariantCultureIgnoreCase); // 注册触发性任务以定时输出日志 if (!this.is4Demo) { this.task = new FlushingLogTask(this, this.FlushInterval); XMS.Core.Tasks.TaskManager.Instance.DefaultTriggerTaskHost.RegisterTriggerTask(this.task); } } }