# LogProvider **Repository Path**: imanzhi/LogProvider ## Basic Information - **Project Name**: LogProvider - **Description**: [魔方] 日志存储项目 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-04-18 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1.日志组件使用 === ### 1. 从Nuget包管理器中下载Mofang.Utils.LogProvider 命令行:Install-Package Mofang.Utils.LogProvider ######搜索程序管理包:Mofang.Utils.LogProvider Nuget URL:https://www.nuget.org/packages/Mofang.Utils.LogProvider ### 2. 修改log4net.config属性 安装成功后会有三个引用(Dapper、log4net、MySql.Data)和一个log4net.config,右键单击log4net.config属性,改为“始终复制” ### 3.使用日志组件: a.存储Info信息, **注:Info信息是存储在数据库中。** ``` var log = new LogModel { Type = (int)OperateTypes.LogType.CommonLog,//LogType指示了Log的类型 IsSuccess = true, Message = "hello", OrgId = "102", RelationId = "102", Operate = (int)OperateTypes.Order.Add, UserId = "jinbiao", UserName = "王金彪", Helper = new LogHelper(),//必须携带LogHelper 进入 }; LogProvider.InfoLog(log); ``` b.存储Error信息 (或者是Warn、Debug、Fatal)**注:Error、Warn、Debug、Fatal信息是存储在项目Logs文件夹中。** ``` LogProvider.ErrorLog("this is error."); ``` ### 4.查找Info日志信息: ``` var rep = new LogRepository<OrderLog>(); var logs = rep.BatchGet(" OrgId=@OrgId", new { OrgId = "101" }); var flog = rep.Get("A2C129D00000196"); ``` 2.扩展日志组件 === ### 扩展日志组件需要四个步骤(以'Room'为例): ### 1.Bulid数据库脚本: ``` CREATE TABLE `roomlog` ( `Id` varchar(20) NOT NULL DEFAULT '', `Type` int(11) NOT NULL COMMENT '日志类型', `Operation` varchar(256) DEFAULT NULL, `Message` text, `IsSuccess` tinyint(1) NOT NULL, `UserId` varchar(255) DEFAULT NULL, `UserName` varchar(256) DEFAULT NULL, `RelationId` varchar(255) DEFAULT NULL COMMENT '关联操作的ID', `OrgId` varchar(255) DEFAULT NULL, `Client` varchar(1024) DEFAULT NULL, `Server` varchar(1024) DEFAULT NULL, `Created` datetime NOT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` ### 2.添加字典表: ``` INSERT INTO `logger`.`dictcode` (`Code`, `Parent`, `Name`, `Seq`, `EngName`, `PinYin`, `IsValid`) VALUES ('300', 'RoomLog', '房间操作', '0', 'Room', 'fangjiancaozuo', '1'); ``` ### 3.添加RoomLog类: ``` namespace Mofang.Utils.LogProvider {     /// <summary>   /// 房间日志   /// </summary>   public class RoomLog : CommonLog   { /// <summary> /// /// </summary> public RoomLog() : base() { }     /// <summary>     /// 自定义日志     /// </summary>     /// <param name="log"></param>     /// <param name="operation"></param>     public RoomLog(LogModel log,string operation): base(log, operation)     {     }       } } ``` ### 4.修改OperateTypes.LogType枚举类型: ``` public enum LogType { /// <summary> /// 通用业务 /// </summary> CommonLog = 0, /// <summary> /// 订单 /// </summary> OrderLog = 1, /// <summary> /// 用户 /// </summary> UserLog = 2, /// <summary> /// 房间 /// </summary> RoomLog=3, } ``` ### 5.重写LogHelper.BuildLog方法: ``` /// <summary> /// 获取日志 /// </summary> /// <param name="log"></param> /// <returns></returns> public override ICommonLog BuildLog(LogModel log) { var type = (OperateTypes.LogType)log.Type; var typeName = type.ToString("g"); var operation = OperationReader.Instance.ReadOperate(log.Operate, typeName); switch (type) { case OperateTypes.LogType.OrderLog: return new OrderLog(log, operation); case OperateTypes.LogType.RoomLog: return new RoomLog(log, operation); default: return new CommonLog(log, operation); } } ```