C#如何书写日志

本文探讨了在C#开发中如何有效地书写日志,以跟踪程序状态、变量变化,特别是在程序崩溃时提供故障排查线索。同时,文章还提到了避免日志写入过程中的资源抢占问题,提出了使用锁进行同步的策略。

在编程当中,我们往往需要书写日志,以方便我们查看
通过书写日志,我们可以获取到程序在运行时的状态,并且可以看到当前值的变化
更可以在程序崩溃时,给到我们提示
在写日志的同时,很容易造成资源的抢占,那我们便需要添加一个锁来预防

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Log
{
    class Program
    {
    	private static Object _lock = new object();
        static void Main(string[] args)
        {
            string ConfigPath = @"D:\C#";
            WriteInfoLog(ConfigPath); // 可在外部调用
        }
        public static void WriteInfoLog(string ConfigPath)
        {
            string msg = string.Empty;
            try
            {
                string path = ConfigPath + @"\log";
                if (!Directory.Exists(path)) // 判断路径是否存在
                {
                    Directory.CreateDirectory(path);// 创建目录
                }
                string logFileName = path + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + "Common.log";
                if (!File.Exists(logFileName)) // 判断文件是否存在
                {
                    File.Create(logFileName); // 创建文件
                }
                lock (_lock) // 加锁防止抢占
                {
                    StreamWriter writer = File.AppendText(logFileName);// 文件中添加文件流
                    for (int i = 0; i < 10; i++)
                    {
                        writer.WriteLine(DateTime.Now.ToString("写日志HH:mm:ss") + "" + msg);
                        Thread.Sleep(1000);
                    }
                    writer.Flush(); // 为了防止数据丢失,应该在关闭读写流之前先flush()
                    writer.Close();
                }
                
            }
            catch (Exception ex)
            {
                string path = ConfigPath + "\\log";
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                string logFileName = path + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + "Catch.log";
                if (!File.Exists(logFileName))
                {
                    File.Create(logFileName);
                }
                lock (_lock)
                {
                    StreamWriter writer = File.AppendText(logFileName);
                    writer.WriteLine(DateTime.Now.ToString("日志记录错误HH:mm:ss") + ex.Message + " " + msg);
                    writer.Flush();
                    writer.Close();
                }
                
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值