简化版可用于多线程的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参数传入进行来。而非来自于处理过程所在的类
简化版可用于多线程的logger的更多相关文章
- QThread 与 QObject的关系(QObject可以用于多线程,可以发送信号调用存在于其他线程的slot函数,但GUI类不可重入)
QThread 继承 QObject..它可以发送started和finished信号,也提供了一些slot函数. QObject.可以用于多线程,可以发送信号调用存在于其他线程的slot函数,也可以 ...
- 多线程中的event,用于多线程的协调
''' 简单的需求:红绿灯,红灯停,绿灯行 一个线程扮演红绿灯,每过一段时间灯变化,3-5个线程扮演车,红灯停,绿灯行 红绿灯线程和车的线程会相互依赖 这种场景怎么实现?---事件 切换一次灯就是一次 ...
- Java多线程整理(li)
目录: 1.volatile变量 2.Java并发编程学习 3.CountDownLatch用法 4.CyclicBarrier使用 5.BlockingQueue使用 6.任务执行器Executor ...
- windows多线程编程(一)(转)
源出处:http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022036.html CreateThread:Windows的API函数(SDK函 ...
- android Logger 一二三
我们在开发Android应用的过程中可以很方便地使用Log信息来调试程序,这都归功于Android的Logger驱动为用户层提供的Log支持.无论是底层的源代码还是上层的应用,我们都可以使用Logge ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- java多线程--同步屏障CyclicBarrier的使用
CyclicBarrier的概念理解: CyclicBarrier的字面上的意思是可循环的屏障,是java并发包java.util.concurrent 里的一个同步工具类,在我下载的JDK1.6的中 ...
- Java—多线程编程
一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径. 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程.一个线程不能独立的存 ...
- C#多线程总结
线程的创建 Thread var thread = new Thread(() => { Console.WriteLine("thread start:" + Thread ...
随机推荐
- 白盒测试之gtest第一个demo
认识gtest工具后,关于它的使用,下面将用一个demo程序演示一下gtest的用法以及成果展示. 一.需要测试的C++代码: #include "myfunction.h" // ...
- cocos2d-x 详解之 CCLayer(触摸事件)
CCLayer继承自CCNode,在CCLayer中可以实现单点触摸.多点触摸和重力感应回调3种不同形式的交互.这部分的难点在于,当存在多个层都要去接收触摸时它的响应机制是如何处理的.了解内部的处理机 ...
- UML统一建模语言
概述 统一建模语言(UML)是一种图形化的语言,用于软件密集系统要素的可视化.制定规范.构建对象和编写文档.UML提供了一种标准的方式来描述系统的设计图,既包括概念方面,例如业务过程和系统功能,也包括 ...
- 多校6 1003 HDU5795 A Simple Nim (sg函数)
思路:直接打表找sg函数的值,找规律,没有什么技巧 还想了很久的,把数当二进制看,再类讨二进制中1的个数是必胜或者必败状态.... 打表: // #pragma comment(linker, &qu ...
- linux下无法安装VMware的解决方法
在Reahat下安装VMware-Player-6.0.1-1379776.x86_64.bundle,结果却提示 Extracting VMware Installer...done.NOT_REA ...
- 时间,闰秒,及NTP
1.时间 格林尼治时间 GMT,以地球自转为准的时间,也叫世界时UT,但是由于自转速度会变化,所以后来不被作为标准. 世界协调时UTC,以原子钟为准,现在时间校准的标准就是原子钟. 2.闰秒 是指地球 ...
- Protocol Buffers编码详解,例子,图解
Protocol Buffers编码详解,例子,图解 本文不是让你掌握protobuf的使用,而是以超级细致的例子的方式分析protobuf的编码设计.通过此文你可以了解protobuf的数据压缩能力 ...
- Spring AOP + AspectJ in XML configuration example
For those don't like annotation or using JDK 1.4, you can use AspectJ in XML based instead. Review l ...
- STC89c52RC 的EEPROM和AVR的EEPROM
二者的EEPROM不是一回事,AVR片内的EEPROM是独立于程序存储器的数据存储器,本身不能存储程序并运行,但现代MCU很多支持IAP,利用IAP技术可在程序存储空间实现数据存储即替代EEPROM, ...
- 转载 C#使用Salt + Hash来为密码加密
转载 http://www.csharpwin.com/csharpspace/13412r9615.shtml (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站用户的密码),你要考 ...