简化版可用于多线程的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参数传入进行来。而非来自于处理过程所在的类

时间: 2024-10-20 06:50:44

简化版可用于多线程的logger的相关文章

QThread 与 QObject的关系(QObject可以用于多线程,可以发送信号调用存在于其他线程的slot函数,但GUI类不可重入)

QThread 继承 QObject..它可以发送started和finished信号,也提供了一些slot函数. QObject.可以用于多线程,可以发送信号调用存在于其他线程的slot函数,也可以postevent给其他线程中的对象.之所以可以这样做,是因为每个线程都有自己的事件循环. 在进行下面的讲解之前,应该了解的重要的一点是:QThread 对象所在的线程,和QThread 创建的线程,也就是run()函数执行的线程不是同一个线程.QThread 对象所在的线程,就是创建对象的线程.我

python Queue模块用于多线程通信

# -*-coding:utf-8 -*- import Queue import threading import time q = Queue.Queue(100000) def producer():     for i in range(1000):         q.put(i)         time.sleep(0) def consumer():     for i in range(1000):         print q.get(), q.qsize()       

多线程中的event,用于多线程的协调

''' 简单的需求:红绿灯,红灯停,绿灯行 一个线程扮演红绿灯,每过一段时间灯变化,3-5个线程扮演车,红灯停,绿灯行 红绿灯线程和车的线程会相互依赖 这种场景怎么实现?---事件 切换一次灯就是一次事件,这次事件的变化造成其他状态的变化 事件是用于线程之间的数据同步的.事件变化其他线程相应作出变化 应该设置一个全局变量当做灯,车的线程监测全局变量. 事件就是封装的一个全局变量 event = threading.event() event.set() 设置标志位,该状态下程序激活,"绿灯&qu

阿里内部Java多线程资料整理

目录: 1.volatile变量 2.Java并发编程学习 3.CountDownLatch用法 4.CyclicBarrier使用 5.BlockingQueue使用 6.任务执行器Executor7.CompletionService使用8.ConcurrentHashMap使用9.Lock使用 一. volatile变量 1.volatile原理:volatile的原理实际上是告诉处理器,不要把变量缓存在寄存器或者相对于其他处理器不可见的地方,而是把变量放在主存,每次读写操作都在主存上进行

windows多线程编程(一)(转)

源出处:http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022036.html CreateThread:Windows的API函数(SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用),提供操作系统级别的创建线程的操作,且仅限于工作者线程 beginthread beginthreadex:MS对C Runtime库的扩展SDK函数,首先针对C Runtime库做了一些初始化的工作,以保证C Runtime库工作正常,然后,调

Java多线程基础(二)

信号量Semaphore,类似于锁的功能,用于多线程中对一组资源的控制. acquire方法用于尝试获取一个资源,未获取前将一直等待.release用于释放一个资源,release的前提是已经获得了一个资源. package multiThread; import java.util.concurrent.Semaphore; public class SemaphoreTest { public static void main(String [ ] args) { int N = 8; //

多线程概念

一个进程是由一个或者N个线程组成的! 线程:cpu调度和分配的基本单位!电脑中真正执行的是线程! 在同一个时间点,我们的电脑只能运行一个线程 多线程: 如果在一个进程中,同时运行多个线程,来完成不同的工作,我们称之为多线程! CUP不能同时运行多个线程! 一个CPU在同一个时间点,只能运行一个线程,单线程运行的速度太快,我们肉眼无法分辨,所以我们认为是多线程! 生活中进入地铁站的例子: 场景1:现在地铁站有1个进站口,同时来了5个人! 需要排队进站! 场景2:现在地铁站有5个进站口,同时来了5个

Java多线程(二) —— 线程安全、线程同步、线程间通信(含面试题集)

一.线程安全 多个线程在执行同一段代码的时候,每次的执行结果和单线程执行的结果都是一样的,不存在执行结果的二义性,就可以称作是线程安全的. 讲到线程安全问题,其实是指多线程环境下对共享资源的访问可能会引起此共享资源的不一致性.因此,为避免线程安全问题,应该避免多线程环境下对此共享资源的并发访问. 线程安全问题多是由全局变量和静态变量引起的,当多个线程对共享数据只执行读操作,不执行写操作时,一般是线程安全的:当多个线程都执行写操作时,需要考虑线程同步来解决线程安全问题. 二.线程同步(synchr

Python多线程入门指南

一直懒得写Python相关的文章,恰好有天需要简单的给童鞋们讲点课,仓促之余就诞生了此文. 今天本来准备全面的聊聊有关高性能并发这个话题来着,但是周末马上要来了啊.所以我就取了其中的一点来介绍,关于其他的方面,有兴趣的小伙伴可以和我交流.谈高效并发,往往脱离不了以下三种方案: 进程:每个逻辑控制流都是一个进程,由内核来调度和维护.因为进程有独立的虚拟地址空间,想要和其他控制流通信必须依靠显示的进程间通信,即我们所说的IPC机制 线程:线程应该是我们最为熟知的.它本质是运行在一个单一进程上下文中的