系列文章
C#底层库--记录日志帮助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124187709
C#底层库--数据库访问帮助类(MySQL版)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379
C#底层库--获取文件版本和MD5值
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871
C#底层库--操作文件帮助类FileHelper(获取目录的所有文件)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887161
C#底层库--操作Excel帮助类(读取、导出表格)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887445
C#底层库--软件版本管理XML
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110195766
C#底层库--随机数生成类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126888812
C#底层库--正则表达式帮助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/109745286
C#底层库--CSV和DataTable相互转换
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128804367
C#底层库--Image图片操作类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805298
C#底层库--JSON帮助类_详细(序列化、反序列化、list、datatable)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805705
C#底层库--cookie操作辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816347
C#底层库--Session操作辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817096
C#底层库--数据实体类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638
C#底层库--Image图片操作类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805298
C#底层库--数据库类型与程序类型转换类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817610
C#底层库--日期扩展类(上周、本周、明年、前年等)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663
目录
前言
本专栏为【底层库】,主要介绍编程过程中 通用函数。我们将这些通用固化的源码,进行重写、封装、拓展,再进行单元测试、集成测试、beta测试,最终形成通用化模板,这里我们称为“底层库”。
作为研发人员的你,并不需要花大量时间,研究“底层库”的含义,及“底层库”的实现方法。你只需要几行调用代码,就可以解决项目上碰到的难题。而调用方法、项目样例本文均有介绍,大家有任何问题,可以私信我,如果你对本栏感兴趣关注一下。
底层库已实现功能:数据库操作、加解密算法、日志记录、HTTP通信、Socket通信、API前后端交互、邮件发送、文件操作、配置参数存储、Excel导入导出、CSV和DataTable转换、压缩解压、自动编号、Session操作等。
一、底层库介绍
本文将介绍,如何在项目中跟踪记录程序运行状态的日志,日志:包含程序运行状态、报错异常信息、用户点击事件等。
说的神乎其神,其实很简单,就是说创建一个含日期的文本文件(.txt),文件里存放一些日志信息。
二、底层库源码
直接上源码,您可以创建一个类文件,命名LogHelper.cs。_configFile变量为配置文件的路径,您可以选择合并在app.config文件中,使用System.Configuration.ConfigurationSettings.AppSettings 来读取。
/// <summary>
/// 通用日志记录帮助类
/// 创建人:gyc
/// 创建事件:2022-03-17
/// 说明:采用反汇编技术,解析Wesun.Utils.LogHelper.dll获得
/// 根目录LogHelper.config用于设置日志等级。
/// </summary>
public static class LogHelper
{
private static string _configFile = AppDomain.CurrentDomain.BaseDirectory + "LogHelper.config";
private static string _logDir = AppDomain.CurrentDomain.BaseDirectory + "log";
private static string _loglevel = LogHelper.GetValue("loglevel", "error");
public static void Error(string msg)
{
LogHelper.Error(msg, "");
}
public static void Error(string msg, string locate)
{
try
{
string text = LogHelper._logDir + "\\LogService" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
LogHelper.CreateLogDir();
LogHelper.CreateLogFile(text);
string text2 = string.Format("[{0}]Error {1}:{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), locate, msg);
File.AppendAllLines(text, new string[]
{
text2
});
}
catch
{
}
}
public static void Info(string msg)
{
LogHelper.Info(msg, "");
}
public static void Info(string msg, string locate)
{
try
{
string text = LogHelper._logDir + "\\LogService" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
if (LogHelper._loglevel.Equals("info", StringComparison.OrdinalIgnoreCase) || LogHelper._loglevel.Equals("debug", StringComparison.OrdinalIgnoreCase))
{
LogHelper.CreateLogDir();
LogHelper.CreateLogFile(text);
string text2 = string.Format("[{0}]Info {1}:{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), locate, msg);
File.AppendAllLines(text, new string[]
{
text2
});
}
}
catch
{
}
}
public static void Debug(string msg)
{
LogHelper.Debug(msg, "");
}
public static void Debug(string msg, string locate)
{
try
{
string text = LogHelper._logDir + "\\LogService" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
if (LogHelper._loglevel.Equals("debug", StringComparison.OrdinalIgnoreCase))
{
LogHelper.CreateLogDir();
LogHelper.CreateLogFile(text);
string text2 = string.Format("[{0}]Debug {1}:{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), locate, msg);
File.AppendAllLines(text, new string[]
{
text2
});
}
}
catch
{
}
}
private static void CreateLogDir()
{
try
{
if (!Directory.Exists(LogHelper._logDir))
{
Directory.CreateDirectory(LogHelper._logDir);
}
}
catch
{
}
}
private static void CreateLogFile(string a_strlogFile)
{
try
{
if (!File.Exists(a_strlogFile))
{
using (new FileStream(a_strlogFile, FileMode.Create))
{
}
}
}
catch
{
}
}
private static string GetValue(string key)
{
string result;
try
{
string text = AppDomain.CurrentDomain.BaseDirectory + "app.config";
if (!File.Exists(text))
{
string contents = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n<appSettings> \r\n<add key=\"loglevel\" value=\"error\" />\r\n</appSettings>\r\n</configuration>";
File.WriteAllText(text, contents);
}
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(text);
string xpath = "//add [@key=\"" + key + "\"]/@value";
XmlNode xmlNode = xmlDocument.SelectSingleNode(xpath);
result = xmlNode.Value;
}
catch
{
result = "";
}
return result;
}
private static string GetValue(string key, string valueDefault)
{
string text = "";
string result;
try
{
text = LogHelper.GetValue(key);
}
catch
{
result = valueDefault;
return result;
}
if (text == "")
{
result = valueDefault;
}
else
{
result = text;
}
return result;
}
}
三、调用方法
①项目生成目录下,找到LogHelper.config文件,设置日志记录等级
<add key="loglevel" value="info" />
②项目中使用
LogHelper.Info(msg);//插入需记录的运行信息
LogHelper.error(msg);//插入程序可能出现的异常,放在catch里记录
③日志查看
在当前程序的输出路径下,你可以找到log目录,点击打开里面就是日志文件了,你可以监控程序的运行情况。
三、项目样例
日志文件如下,记录程序运行的报错信息。