一、前言

生活中的日志是记录你生活的点点滴滴,让它把你内心的世界表露出来,更好的诠释自己的内心世界。而在开发者眼中的日志是我们排除问题的第一手资料,项目中的程序上线之后,一旦发生异常,第一件事就是先去查看日志是否有捕获到什么异常信息,然后再根据日志去排查问题。所以日志的重要性是非常高的,今天就分享一个简单的本地日记工具类。

二、正文

1、代码比较简单,这里直接贴出日志的代码,该类会在exe所在的目录下生成一个文件夹,然后每天生成一个文本来储存日志信息。这里我只添加了三个简单的方法,有需要的可以自己改造成更高级的用法。

public static class LogUtil
{
private const int LOG_CONTENT_MAX_LENGTH = 800; static LogUtil()
{
string logDirPath = Path.Combine(Directory.GetCurrentDirectory(), "Log");
if (!Directory.Exists(logDirPath))
{
Directory.CreateDirectory(logDirPath);
}
} private static string TestCurrentLogExists()
{
string logPath = Path.Combine(Directory.GetCurrentDirectory(), "Log", DateTime.Now.ToString("yyyy-MM-dd") + ".log");
if (!File.Exists(logPath))
{
File.Create(logPath).Close();
}
return logPath;
} public static void Debug(string text)
{
WriteLog("Debug", text);
}

public static void Error(string text)
{
WriteLog("Error", text);
} public static void Info(string text)
{
WriteLog("Info", text);
}

private static void WriteLog(string label, string log_content)
{
if (log_content.Length > LOG_CONTENT_MAX_LENGTH)
{
log_content = log_content.Substring(0, LOG_CONTENT_MAX_LENGTH);
} var logPath = TestCurrentLogExists();
using (var fs = File.Open(logPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
fs.Position = fs.Length;
byte[] bytes = Encoding.UTF8.GetBytes($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} {label} {log_content}{Environment.NewLine}");
fs.Write(bytes, 0, bytes.Length);
}
}
}

2、使用示例,这里去遍历一个空的List来触发一个异常,然后看看日志有没有帮我们记录下异常信息。

public partial class MainWindow : Window
{
private List<string> lists = null; public MainWindow()
{
InitializeComponent();
} private void Button_Click(object sender, RoutedEventArgs e)
{
LogUtil.Info("这是一条普通的信息!!!");
LogUtil.Debug("这是一条普通的调试信息!!!"); try
{
foreach (var item in lists)
{
Console.WriteLine(item);
}
}
catch (Exception ex)
{
LogUtil.Error(ex.ToString());
throw;
}
}
}

3、运行结果,可以看到exe所在的目录下生成了一个Log文件夹,目录下也生成了一个以当日日期命名的.log文件

4、打开日志,我们可以看到异常的信息已经被记录到日志文件中,程序的哪个文件,哪个方法里的哪一行的什么异常导致的都已经清晰可见,这样就能方便定位的问题所在了

WPF开发随笔收录-本地日志LogUtil类的更多相关文章

  1. WPF开发随笔收录-唯一标识符GUID

    一.前言 该系列博客用于记录本人在WPF开发过程中遇到的各种知识点 二.正文 1.在工作的项目中,软件需要用到在线升级功能,由于第一次弄,在下载服务端的文件到本地时,文件的名称我选择直接生成为固定的格 ...

  2. WPF开发随笔收录-仿安卓Toast

    一.前言 在项目中,经常需要用到消息提醒功能,在以前接触安卓开发那会使用过Toast,于是打算在WPF上也来模仿一个,话不多说,撸起袖子干起来! 二.正文 1.首先新建一个工程,工程的目录如下 2.编 ...

  3. WPF开发随笔收录-心电图曲线绘制

    一.前言 项目中之前涉及到胎儿心率图曲线的绘制,最近项目中还需要添加心电曲线和血样曲线的绘制功能.今天就来分享一下心电曲线的绘制方式: 二.正文 1.胎儿心率曲线的绘制是通过DrawingVisual ...

  4. WPF开发随笔收录-ScrollViewer滑块太小解决方案

    一.前言 在WPF开发过程中,ScrollViewer是一个很常使用到的控件,在自己工作的项目中,收到一个反馈就是当ScrollViewer里面的内容太长时,滚动条的滑块就会变得很小,然后导致点击起来 ...

  5. WPF开发随笔收录-DataAnnotations实现数据校验(MVVM架构下)

    一.前言 在自己的项目中挺多地方需要涉及到数据验证的,初期的实现方式都是通过点击确定后再逐个验证数据是否符合要求,但这种方式会让后台代码变得很多很乱.于是就开始在网上需求好的解决方式,刚好看到了一个大 ...

  6. WPF开发随笔收录-DrawingVisual绘制高性能曲线图

    一.前言 项目中涉及到了心率监测,而且数据量达到了百万级别,通过WPF实现大数据曲线图时,尝试过最基础的Canvas来实现,但是性能堪忧,而且全部画出来也不实际.同时也尝试过找第三方的开源库,但是因为 ...

  7. WPF开发随笔收录-WriteableBitmap绘制高性能曲线图

    一.前言 之前分享过一期关于DrawingVisual来绘制高性能曲线的博客,今天再分享一篇通过另一种方式来绘制高性能曲线的方法,也就是通过WriteableBitmap的方式:具体的一些细节这里就不 ...

  8. WPF开发随笔收录-获取软件当前目录的坑

    一.唠唠叨叨 软件开发过程中,经常需要使用到获取exe当前目录这个功能,前同事在实现这个需求时使用的是Directory.GetCurrentDirectory()这个方法,但再最近的测试中,突然发现 ...

  9. WPF开发随笔收录-报警闪烁效果实现

    一.前言 工作中目前经手的项目是医疗相关的监护软件,所以会涉及到一些报警效果的实现,今天在这里就简单分享一下实现方式 二.正文 1.实现的方式比较的简单,就是通过一个Border控件,然后搭配Data ...

随机推荐

  1. echarts饼图禁止鼠标悬浮区块突出

    禁止悬浮突出,在series内添加hoverAnimation:false即可 代码如下: option = { color:['#3498db','#EEEEEE'], series: [ { na ...

  2. 2021.08.09 P6037 Ryoku的探索(基环树)

    2021.08.09 P6037 Ryoku的探索(基环树) P6037 Ryoku 的探索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的性质 2.基环树的性质 ...

  3. 伪元素 Before & Aster

    1. html 结构 <label class="is-required" for="name">姓名</label> <inpu ...

  4. html_学习所有标签使用

    <!DOCTYPE html><!--声明为HTML5文档--><html lang="en"><head><!-- 页面表头 ...

  5. python源码方式安装后如何卸载

    可以重新源码安装,此时需要记录安装文件细节,可通过--record XX来记录,如: python setup.py install --record setup.log 这时所有的安装细节都写到lo ...

  6. Node爬取网站数据

    npm安装cheerio和axios npm isntall cheerio npm install axios 利用cheerio抓取对应网站中的标签根据链接使用axios获取对应页面数据 cons ...

  7. Halo 开源项目学习(七):缓存机制

    基本介绍 我们知道,频繁操作数据库会降低服务器的系统性能,因此通常需要将频繁访问.更新的数据存入到缓存.Halo 项目也引入了缓存机制,且设置了多种实现方式,如自定义缓存.Redis.LevelDB ...

  8. [笔记] 2-sat

    定义 简单的说就是给出 \(n\) 个集合,每个集合有两个元素,已知形如选 \(a\) 则必须选 \(b\) 的若干个条件, 问是否存在从每个集合选择一个元素满足条件的方案,通常可以题目只要求任意一种 ...

  9. tuandui last

    组长博客链接### 组长博客 参考邹欣老师的问题模板进行总结思考### 设想和目标(2分)#### 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题 ...

  10. 五四青年节,今天要学习。汇总5道难度不高但可能遇到的JS手写编程题

    壹 ❀ 引 时间一晃,今天已是五一假期最后一天了,没有出门,没有太多惊喜与意外.今天五四青年节,脑子里突然想起鲁迅先生以及悲欢并不相通的话,我的五一经历了什么呢,忍不住想说那大概是,父母教育孩子大声嚷 ...