/// <summary> /// 日志写入处理 /// </summary> /// <param name="sender">调用者</param> /// <param name="args"><see cref="LogEventArgs"/> 数组</param> protected virtual void WriteLog(object sender, LogEventArgs[] args) { if(Checker.CheckEmptyArray("args", args, false)) { return; } this.WriteLogInternal(sender, args); }
private void LogHelperLogEvent(object sender, LogEventArgs[] args) { foreach (var e in args) { if(e.Level >= LogLevel.ERROR) { var log = string.Format("[{0}][{1}][{2}]\r\n{3}\r\n------------------\r\n", e.LogTime, e.Sender, e.Level, e.Message); this.EventLog.WriteEntry(log, EventLogEntryType.Error); } } }
private void LogHelperLogEvent(object sender, LogEventArgs[] args) { foreach (var e in args) { var log = string.Format("[{0}][{1}][{2}]\r\n{3}\r\n------------------\r\n", e.LogTime, e.Sender, e.Level, e.Message); if(this.Visible && this.txtLog != null) { if(this.txtLog.TextLength >= this.txtLog.MaxLength) { this.txtLog.Clear(); } this.txtLog.AppendText(log); } } }
/// <summary> /// 写日志 /// </summary> /// <param name="sender">调用者</param> /// <param name="level">日志等级,参见<see cref="LogLevel"/></param> /// <param name="logFormat">日志格式</param> /// <param name="parameters">格式化参数</param> /// <remarks>先找是否有<see cref="ILogService"/>的实现,有则调用相关方法;无则默认写入WARN级及以上的日志信息到应用程序同级目录Logs下</remarks> public static void WriteLog(object sender, int level, string logFormat, params object[] parameters) { var service = ServiceLocator.GetService<ILogService>(); if (service != null) { service.WriteLog(sender, level, logFormat, parameters); } else { if(level >= LogLevel.WARN) { try { var arg = new LogEventArgs(sender, level, DateTime.Now, string.Format(logFormat, parameters)); FileHelper.WriteLog(FileHelper.GetFullPath(string.Format(@"..{0}Logs{0}Error", Path.DirectorySeparatorChar)), string.Format(@"{0}yyyy{0}MM{0}dd{0}HH\.\l\o\g", Path.DirectorySeparatorChar), FormatLog(sender, new[] { arg }, false)); } catch { } } } }
/// <summary> /// 格式化日志信息 /// </summary> /// <param name="sender">调用者</param> /// <param name="args"><see cref="LogEventArgs"/> 数组</param> /// <param name="withBatchFlag">批量标志</param> /// <returns>格式化后的日志信息</returns> public static string FormatLog(object sender, LogEventArgs[] args, bool withBatchFlag) { if (args == null || args.Length <= 0) { return string.Format("{0}", sender); } var log = new StringBuilder(); if (withBatchFlag) { log.AppendFormat("[###### Start ######]\r\n{0}\r\n", sender); } foreach (var e in args) { log.AppendFormat("[{0}][{1}][{2}]\r\n{3}\r\n{4}\r\n------------------\r\n", e.LogTime, e.Sender, LogLevel.Format(e.Level), e.Message, e.InnerObject); } if (withBatchFlag) { log.Append("[###### End ######]\r\n"); } return log.ToString(); }
/// <summary> /// 把日志压入堆栈并启动定时器 /// </summary> /// <param name="sender">调用者</param> /// <param name="level">日志等级,参见<see cref="LogLevel"/></param> /// <param name="message">日志消息</param> /// <param name="innerObject">附加的内部对象,比如<see cref="Exception"/></param> protected virtual void WriteLogInternal(object sender, int level, string message, object innerObject) { sender = this.GetLogSource(sender); var e = new LogEventArgs(sender, level, DateTime.Now, message, innerObject); lock (this.LogQueue) { this.LogQueue.Enqueue(e); } this.StartTimer(); }
/// <summary> /// 把异常信息写入缺省的日志处理器中 /// </summary> /// <param name="e">异常</param> /// <param name="args">日志列表</param> protected virtual void WriteErrorToDefaultHandler(Exception e, LogEventArgs[] args) { if (this.DefaultHandler != null) { try { var arg = new LogEventArgs(this, LogLevel.EMERGENCY, DateTime.Now, e.Message, LogHelper.FormatLog(e, args, true)); this.DefaultHandler.WriteLog(this, new[] { arg }); } catch { } } }
/// <summary> /// 日志写入触发方法 /// </summary> /// <param name="e">LogEventArgs[]</param> protected virtual void OnLogWriting(LogEventArgs[] e) { if (this.LogWritingInternal != null) { this.LogWritingInternal(this, e); } }
/// <summary> /// ��־д�봥������ /// </summary> /// <param name="e">LogEventArgs</param> protected virtual void OnLogEvent(LogEventArgs e) { if(this.logEvent != null) { try { this.logEvent(this, e); } catch { } } }
void IBaseLogger.WriteLog(object sender, int level, string message) { LogEventArgs e = new LogEventArgs(sender, level, DateTime.Now, message); this.queue.Enqueue(e); }
/// <summary> /// ȱʡ����־д�봦�� /// </summary> /// <param name="sender">������</param> /// <param name="e">LogEventArgs</param> public static void DefaultLogEventHandler(object sender, LogEventArgs e) { string log = string.Format("[{0}][{1}][{2}]\r\n{3}\r\n------------------\r\n", e.LogTime, e.Sender, e.Level, e.Message); LogHelper.WriteLog(logger.logPath, logger.logFile, log); }
/// <summary> /// 实际的日志写入处理过程 /// </summary> /// <param name="sender">调用者</param> /// <param name="args"><see cref="LogEventArgs"/> 数组</param> protected abstract void WriteLogInternal(object sender, LogEventArgs[] args);
/// <summary> /// 日志格式化 /// </summary> /// <param name="sender">调用者</param> /// <param name="args"><see cref="LogEventArgs"/> 数组</param> /// <param name="withBatchFlag">是否加上批量日志的标志</param> /// <returns>格式化后的日志</returns> protected virtual string LogFormat(object sender, LogEventArgs[] args, bool withBatchFlag) { return LogHelper.FormatLog(sender, args, withBatchFlag); }
void ILogger.WriteLog(object sender, LogEventArgs[] args) { this.WriteLog(sender, args); }