C#: 日志函数

背景:

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

实现思路:

1.设置当前日志文件路径(获取到当前文件应用程序路径 + \ErrorLog)

2.判断当前日志文件路径是否存在,不存在则创建

3.在当前日志文件路径下创建日志文本

4.判断当前文件是否存在,如果不存在则创建,如果存在则增加

源码:

csharp 复制代码
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.");
    }
}
相关推荐
CHANG_THE_WORLD1 小时前
python 批量终止进程exe
开发语言·python
古城小栈1 小时前
从 cargo-whero 库中,找到提升 rust 的契机
开发语言·后端·rust
Gary Studio2 小时前
安卓HAL C++基础-智能指针
开发语言·c++
啧不应该啊3 小时前
Day1 Python 与 C 的类型区别
c语言·开发语言
cen__y3 小时前
Linux07(信号01)
linux·运维·服务器·c语言·开发语言
xingpanvip3 小时前
星盘接口开发文档:星相日历接口指南
android·开发语言·前端·css·php·lua
guygg883 小时前
基于遗传算法的双层规划模型求解MATLAB实现
开发语言·matlab
凯瑟琳.奥古斯特4 小时前
SQLAlchemy核心功能解析
开发语言·python·flask
卷Java4 小时前
GPTQ vs AWQ vs GGUF:模型量化工具横向测评
开发语言·windows·python
charlie1145141914 小时前
嵌入式C++工程实践第20篇:GPIO 输入模式内部电路 —— 芯片是如何“听“到外部信号的
开发语言·c++·stm32·单片机