简化版可用于多线程的logger
logger 嘛要高效,要简单。废话不多话。
GitHub 地址 https://github.com/goldli/logger
本文所说的logger使用System.Logger做为NameSpace;
一、对象说明
Dll里logger共有两类对象
1、Logger 日志输出控件类。负责启用与停用日志功能。
2、Log 日志记录类。
二、启用/停用日志
Logger.Instance.Start();
Logger.Instance.Stop().Dispose();
Logger本身继承自 IDisposable 接口。在Stop后可以调用Dispose来释放资源。
三、记录日志
需要实例化一个Log对象:使用Logger.Instance.GetLog("日志文件夹名称");
记录日志的方法
1、普通写法 WriteLog("日志内容");
2、带有顺序序号的方式 Write("日志内容",起始顺序号);
若 起始顺序号为 0 ,则Log内容会进行 +1 处理。
若 起始顺序号不为 0 ,则Write方法以此顺序号开始进行 +1 处理
四、日志目录结构
Log类本身有Folder属性与FileName属性
Folder可以用于指写日志保存的位置,若为指定则与当前调用的主程序exe同目录下的log目录.
FileName不是日志文件名称。而是日志文件所在的文件夹名称。具体的日志文件是以小时来命名的。
最终文件目录结构为
x:\log\{FileName}\{yyyy-MM-dd}\{hh}.log
或
x:\{FileName}\{yyyy-MM-dd}\{hh}.log
五、示例
1、普通示例,请参考
2、多线程示例
2.1声明Logger对象
internal Logger Logger = Logger.Instance;
2.2将Logger传入线程对象
var task1 = new task
{
Config = config,
Logger = Logger
};
2.3创建线程
Logger.Start();
_patrolor = new Thread(Tick){IsBackground = true};
_patrolor.Start(task1);
2.4 在线程中创建Log
class Task
{
protected override void Execute(Task task)
{
_logger = task.Logger.GetLog("AlertService");
_logger.WriteLog("begin");
Do(task);
_logger.WriteLog("end");
}
}
六、注意事项
在线程处理过程中,我们会用于各种数据。一定要记住的是 线程处理过程中使用的数据是从object state参数传入进行来。而非来自于处理过程所在的类