首页 > 其他分享 >.net6 ILogger日志保存到本地

.net6 ILogger日志保存到本地

时间:2024-04-26 17:24:16浏览次数:25  
标签:log LogLevel basePath logPath DateTime ToString ILogger net6 日志

1、新建一个LocalFileLogger的类

 public class LocalFileLogger : ILogger
    {
        private readonly string categoryName;
        private readonly string basePath;

        public LocalFileLogger(string categoryName)
        {
            this.categoryName = categoryName;
            string[] fieldstrs = Enum.GetNames(typeof(LogLevel));
            foreach (var item in fieldstrs)
            {
                basePath = Directory.GetCurrentDirectory().Replace("\\", "/") + "/Logs/"+$"/{item}/";

                if (Directory.Exists(basePath) == false)
                {
                    Directory.CreateDirectory(basePath);
                }
            }
            basePath = Directory.GetCurrentDirectory().Replace("\\", "/") + "/Logs/";
        }

        public IDisposable BeginScope<TState>(TState state)
        {
            return default!;
        }

        public bool IsEnabled(LogLevel logLevel)
        {
            if (logLevel != LogLevel.None)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
        {
            if (IsEnabled(logLevel))
            {
                if (state != null && state.ToString() != null)
                {
                    var logContent = state.ToString();

                    if (logContent != null)
                    {
                        if (exception != null)
                        {
                            var logMsg = new
                            {
                                message = logContent,
                                error = new
                                {
                                    exception?.Source,
                                    exception?.Message,
                                    exception?.StackTrace
                                }
                            };

                            logContent = System.Text.Json.JsonSerializer.Serialize(logMsg);
                        }

                        var log = new
                        {
                            CreateTime = DateTime.UtcNow,
                            Category = categoryName,
                            Level = logLevel.ToString(),
                            Content = logContent
                        };

                        string logStr = System.Text.Json.JsonSerializer.Serialize(log);

                        string logPath=string.Empty;
                        switch (logLevel)
                        {
                            case LogLevel.Trace:
                             logPath= basePath + "/Trace/"+ DateTime.Now.ToString("yyyyMMddHH") + ".log";
                                break;
                            case LogLevel.Debug:
                                logPath = basePath + "/Debug/" + DateTime.Now.ToString("yyyyMMddHH") + ".log";
                                break;
                            case LogLevel.Information:
                                logPath = basePath + "/Information/" + DateTime.Now.ToString("yyyyMMddHH") + ".log";
                                break;
                            case LogLevel.Warning:
                                logPath = basePath + "/Warning/" + DateTime.Now.ToString("yyyyMMddHH") + ".log";
                                break;
                            case LogLevel.Error:
                                logPath = basePath + "/Error/" + DateTime.Now.ToString("yyyyMMddHH") + ".log";
                                break;
                            case LogLevel.Critical:
                                logPath = basePath + "/Critical/" + DateTime.Now.ToString("yyyyMMddHH") + ".log";
                                break;
                            case LogLevel.None:
                                logPath = basePath + "/None/" + DateTime.Now.ToString("yyyyMMddHH") + ".log";
                                break;
                            default:
                                logPath = basePath + "/Start/" + DateTime.Now.ToString("yyyyMMddHH") + ".log";
                                break;
                        }
                        File.AppendAllTextAsync(logPath, logStr + Environment.NewLine, System.Text.Encoding.UTF8);
                       
                    }
                   
                   
                }
            }
        }
    }

2、新建LocalFileLoggerProvider

    public class LocalFileLoggerProvider : ILoggerProvider
    {
        private readonly System.Collections.Concurrent.ConcurrentDictionary<string, LocalFileLogger> loggers = new();

        public ILogger CreateLogger(string categoryName)
        {
            return loggers.GetOrAdd(categoryName, new LocalFileLogger(categoryName));
        }

        public void Dispose()
        {
            loggers.Clear();
            GC.SuppressFinalize(this);
        }
    }

  最后在Program注册服务

 

标签:log,LogLevel,basePath,logPath,DateTime,ToString,ILogger,net6,日志
From: https://www.cnblogs.com/lisghxfdfgh/p/18160482

相关文章

  • 响应结果写入日志文件
    方法一:使用查看结果树直接写入(不推荐,工具自带效果不理想)◆AsXML:保存为xml格式◆ElapsedTime:请求的消耗时间,从请求发送到接收完毕全程耗时(经常用)◆Responsemessage:默认值:ok◆Success:成功标识,true/false◆SentByteCount:发送数据量的总和◆ResponseFilename:响应......
  • .net6-获取配置文件数据
    配置文件{"RedisConfig":{"IsEnabled":true,"ConnectionString":"localhost:6379,password=123456,defaultDatabase=1,ssl=false,writeBuffer=10240"}}实体类publicclassRedisConfig{///<summa......
  • docker 日志驱动程序
    loggingdriver说明Docker中的日志驱动程序(loggingdriver)用于控制容器的日志记录方式,允许您将容器中生成的日志发送到不同的目标,如标准输出、文件、远程日志服务器等。loggingdriver类型none: 容器没有可用的日志,并且dockerlogs不返回任何输出。local: 日志以旨......
  • Linux文件系统与日志分析
    目录1.inode与block(1)inode的内容(2)inode的号码(3)inode的大小(4)inode的特殊作用2.硬链接与软连接3.恢复误删的文件(1)恢复EXT类型的文件(2)恢复XFS类型的文件4.分析日志文件(1)日志文件(1)日志的功能:(2)日志文件的分类:(3)日志保存位置(2)内核及系统日志(2)日志消息的级别(3)日志记录的一般格式(3)用户日志......
  • springboot的日志swagger的配置
    我们导入swagger分为三步一.导入依赖首先我们需要在项目的pom里导入依赖<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0......
  • C语言环境下的日志库:zlog
    一、安装zloghomepage:zloggithub链接编译和安装链接二、配置文件编程时,在zlog_init()函数需要指定配置文件,而配置文件可以根据用户的需求进行个性化定制。2.1基本配置example_zlog.conf[global]strictinit=truebuffermin=1024buffermax=2048rotate......
  • 日志服务 HarmonyOS NEXT 日志采集最佳实践
    背景信息随着数字化新时代的全面展开以及5G与物联网(IoT)技术的迅速普及,操作系统正面临前所未有的变革需求。在这个背景下,华为公司自主研发的鸿蒙操作系统(HarmonyOS)应运而生,旨在满足万物互联时代的多元化设备接入、高效协同和安全可靠运行的需求。HarmonyOS不仅着眼于智能手机......
  • 开发日志:Kylin麒麟操作系统部署ASP.NET CORE
    需求场景:   我需要部署的项目是在Windows上开发的,目标框架为.netcore6.0因此我们需要先在kylin上部署项目运行所需要的环境。借助百度词条,先看看Kylin是什么: 服务器资源: 查看系统版本 cat/etc/kylin-release  cat/proc/version   需要用到的工具:S......
  • nginx1.24配置logrotate日志切割
    安装logrotate(如果尚未安装):yuminstalllogrotate#CentOS/RHEL配置logrotate:通常,logrotate的配置文件位于/etc/logrotate.conf,并且可以包含指向其他配置文件的引用。这些其他配置文件通常位于/etc/logrotate.d/目录中。创建Nginx的logrotate配置文件:vim/etc/lo......
  • 实践探讨Python如何进行异常处理与日志记录
    本文分享自华为云社区《Python异常处理与日志记录构建稳健可靠的应用》,作者:柠檬味拥抱。异常处理和日志记录是编写可靠且易于维护的软件应用程序中至关重要的组成部分。Python提供了强大的异常处理机制和灵活的日志记录功能,使开发人员能够更轻松地管理代码中的错误和跟踪应用程序......