当前位置: 首页 > news >正文

C#: 日志函数

背景:

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.");
    }
}

相关文章:

  • 新版 WSL2 2.0 设置 Windows 和 WSL 镜像网络教程
  • Linux提权之john破解shadow root密文登录提权(十)
  • 《操作系统 - 清华大学》 8 -7:进程管理:进程挂起
  • 内部知识库的核心模块是什么?
  • libwebsockets交叉编译全流程
  • 【每日八股】Redis篇(一):概述
  • 计算机毕设-基于springboot的汽车配件销售管理系统的设计与实现(附源码+lw+ppt+开题报告)
  • rust学习笔记4-基础类型2和内存管理模型
  • ike-scan:发现并指纹识别 IKE 主机(IPsec VPN 服务器)!全参数详细教程!Kali Linux教程!黑客教程!
  • 解决jupyter notebook不是内部或外部命令问题
  • 正则表达式--捕获exec方法
  • Grouped-Query Attention(GQA)详解: Pytorch实现
  • 红帽7基于kickstart搭建PXE环境
  • 【MySQL 一 数据库基础】深入解析 MySQL 的索引(3)
  • redis-bitmap使用场景
  • CSS中的`position`属性的几种定位方式
  • 计算机视觉算法实战——三维重建(主页有源码)
  • Linux提权之suid提权(六)
  • Python--函数进阶(下)
  • SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)
  • 范宇任上海宝山区副区长
  • 中信银行一季度净利195.09亿增1.66%,不良率持平
  • 临港迎来鸿蒙智行“尚界”整车及电池配套项目,首款车型今秋上市
  • 解读|特朗普“助攻”下加拿大自由党“惨胜”,卡尼仍需克服“特鲁多阴影”
  • 王毅:携手做世界和平与发展事业的中流砥柱
  • 卸任兰大校长后,严纯华院士重返北大作报告