C#: 日志函数

news/2025/2/24 16:31:44

背景:

1.常见的官方日志模块项目过于复杂,且配置过于繁琐,针对这种现象,实现在大型项目中快速定位错误问题;

实现思路:

1.设置当前日志文件路径(获取到当前文件应用程序路径 + \ErrorLog)
2.判断当前日志文件路径是否存在,不存在则创建
3.在当前日志文件路径下创建日志文本
4.判断当前文件是否存在,如果不存在则创建,如果存在则增加

源码:

using System;
using System.IO;

public class Logger
{
    private static StreamWriter streamWriter;

    // 日志级别
    public enum LogLevel
    {
        INFO,
        WARNING,
        ERROR
    }    
    public static void WriteLog(LogLevel level, string message)
    {
        try
        {
            string directoryPath = Environment.CurrentDirectory + "\\ErrorLog";    //在获得文件夹路径(根据你们自己的实际情况去写错误日志文件夹路径)

            // 判断文件夹是否存在,如果不存在则创建
            if (!Directory.Exists(directoryPath))
            {
                Directory.CreateDirectory(directoryPath);
            }

            string logFilePath = Path.Combine(directoryPath, $"{DateTime.Now.ToString("yyyy-MM-dd")}.log");

            // 判断文件是否存在,如果不存在则创建,如果存在则追加。
            using (streamWriter = !File.Exists(logFilePath) ? File.CreateText(logFilePath) : File.AppendText(logFilePath))
            {
                streamWriter.WriteLine("***********************************************************************");
                streamWriter.WriteLine(DateTime.Now.ToString("HH:mm:ss"));
                streamWriter.WriteLine($"Log Level: {level}");
                if (message != null)
                {
                    streamWriter.WriteLine($"Message:\r\n{message}");
                }
            }
        }
        finally
        {
            if (streamWriter != null)
            {
                streamWriter.Flush();
                streamWriter.Dispose();
                streamWriter = null;
            }
        }
    }
}

class Program
{
    static void Main()
    {
        // 测试单元
        Logger.WriteLog(Logger.LogLevel.INFO, "This is an informational message.");
        Logger.WriteLog(Logger.LogLevel.WARNING, "This is a warning message.");
        Logger.WriteLog(Logger.LogLevel.ERROR, "This is an error message with some additional information.");
    }
}

http://www.niftyadmin.cn/n/5864573.html

相关文章

五、Three.js顶点UV坐标、纹理贴图

一部分来自1. 创建纹理贴图 | Three.js中文网 ,一部分是自己的总结。 一、创建纹理贴图 注意:把一张图片贴在模型上就是纹理贴图 1、纹理加载器TextureLoader 注意:将图片加载到加载器中 通过纹理贴图加载器TextureLoader的load()方法加…

Qt 中的线程池QRunnable和QThreadPool

Qt 中的线程池QRunnable和QThreadPool 一、QThreadPool类介绍 QThreadPool 是 Qt 框架中用于管理线程池的类,它提供了一种高效的方式来管理和复用线程,避免频繁创建和销毁线程带来的开销。 1. 基本概念 QThreadPool 是一个全局的线程池,它…

猿大师播放器:智慧安防网页播放RTSP H.265实时监控革命,无需转码终极解决方案

一、智慧安防的致命瓶颈:当传统技术拖累生命安全 在智慧城市、工业安全、应急指挥等场景中,实时视频监控是守护生命与财产的核心防线。然而,传统RTSP播放方案在延迟、成本、稳定性上的缺陷,正在成为安防系统的“阿喀琉斯之踵”。…

解锁Redis的深层能力:事务与消息队列的最佳实践

在当今数据驱动的世界里,高效的数据管理和处理成为了每一个成功应用的核心。Redis,作为一款高性能的内存数据库,不仅以其快速读写能力著称,还提供了诸如事务、持久化、以及灵活的消息队列实现等高级功能,使得开发者能够…

【Python爬虫(55)】Scrapy进阶:深入剖析下载器与下载中间件

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

sql的索引与性能优化相关

之前面试的时候,由于在简历上提到优化sql代码,老是会被问到sql索引和性能优化问题,用这个帖子学习记录一下。 1.为什么要用索引 ------------------------------------------------------------------------------------------------------…

Ryu:轻量开源,开启 SDN 新程

1. Ryu 控制器概述 定位:轻量级、开源的SDN控制器,专为开发者和研究人员设计,基于Python实现。开发者:由日本NTT实验室主导开发,遵循Apache 2.0开源协议。核心理念:简化SDN应用开发,提供友好的…

Python基于flask的智慧交通可视化,大数据智慧交通数据可视化系统

博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅&#x1f447…