using System;
using System.Text;
namespace Apewer.Models
{
/// 日志条目。
[Serializable]
public sealed class LogItem
{
/// 自定义日志条目格式化程序。
public static Func Formatter { get; set; }
/// 日志记录程序。
public Logger Logger { get; internal set; }
/// 记录日志的时间。
public DateTime Clock { get; private set; }
/// 日志的标签。
public string Tag { get; internal set; }
/// 日志的文本内容。
public object[] Content { get; internal set; }
/// 日志中包含的异常对象。
public Exception Exception { get; internal set; }
///
internal LogItem()
{
Clock = DateTime.Now;
}
///
public override string ToString()
{
var formatter = Formatter;
if (formatter != null) return formatter.Invoke(this);
var sb = new StringBuilder();
var written = 0;
sb.Append(ClockUtility.Lucid(Clock));
written++;
if (!string.IsNullOrEmpty(Tag))
{
sb.Append(" [");
sb.Append(Tag);
sb.Append("]");
written++;
}
if (Exception != null)
{
sb.Append(" <");
sb.Append(Exception.GetType().Name);
sb.Append("> ");
sb.Append(Exception.Message());
written++;
}
if (Content != null && Content.Length > 0)
{
var content = TextUtility.Join(" | ", Content);
if (!string.IsNullOrEmpty(content))
{
if(written > 1) sb.Append(" | ");
else sb.Append(" ");
sb.Append(content);
}
}
return sb.ToString();
}
}
}