概述
程序开发与运行过程需要对各类信息进行记录,具体记录的内容应用实际需要进行设定,例如:程序运行Debug记录、程序运行错误、一般运行信息、运行警告、接口运行警告、接口运行错误、接口一般运行信息、接口运行警告、sql执行记录、LuckTrace等。根据日志记录发生频率需要可以预置天、时、分、不需要记录 等。
日志记录操作理解为“信息队列”,信息队列其实质为多线程的键值集合,记录日志就是从信息队列中获取信息,再写入文件。
创建项目
基于上述要求,创建一个基础类来实现日志记录功能,创建解决方案NetDBLogger,向解决方案添加用于日志记录的DBLoggerBase项目,向解决方案添加应用项目DBLoggerSite。
基础类定义
日志频率
定义枚举,在项目DBLoggerBase中创建LogRule.cs类文件,代码:
namespace DBLoggerBase
{
public enum LogRule
{
Day,
Hour,
Minute,
No
}
}
日志级别
定义日志级别枚举,在项目DBLoggerBase中创建LogLevel.cs类文件,代码:
namespace DBLoggerBase
{
public enum LogLevel
{
/// <summary>
/// 程序运行记录,Debug模式
/// </summary>
AppTrace,
/// <summary>
/// 程序运行错误
/// </summary>
AppException,
/// <summary>
/// 一般运行信息,主要日志方式
/// </summary>
AppInfo,
/// <summary>
/// 运行警告,由开发人员记录
/// </summary>
AppWarn,
/// <summary>
/// 接口运行记录,Debug模式
/// </summary>
ApiTrace,
/// <summary>
/// 接口运行错误
/// </summary>
ApiException,
/// <summary>
/// 接口一般运行信息,主要日志方式
/// </summary>
ApiInfo,
/// <summary>
/// 接口运行警告,由开发人员记录
/// </summary>
ApiWarn,
/// <summary>
/// sql执行记录
/// </summary>
SqlTrace,
/// <summary>
/// 抽奖统计记录
/// </summary>
LuckTrace
}
}
日志写入
程序调试或运行的写入的日志进入键值集合对象,再从集合中获取信息,写入设定目录的文件,文件路径由应用配置中设置的LogPath确定,创建类文件Logger.cs,代码:
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Timers;
namespace DBLoggerBase
{
public class Logger
{
/// <summary>
/// 日志队列
/// </summary>
private static ConcurrentQueue<KeyValuePair<string, string>> _logQueue;
/// <summary>
/// 日志文件夹
/// </s