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

.Net将控制台的输出信息存入到日志文件按分钟生成日志文件

.Net将控制台的输出信息存入到日志文件

  • .Net将控制台的输出信息存入到日志文件,按分钟生成日志文件
    • 创建MultiTextWriter类
    • 在Program里直接引用
    • 查看bin目录下的日志文件

.Net将控制台的输出信息存入到日志文件,按分钟生成日志文件

因为控制台的输出比较大,在本地调试抓取日志比较困难时,不想用中间件记录日志的时候,可以将控制台的输出存入到指定目录,采用按分钟存储,一个文件存太大了,打不开。

创建MultiTextWriter类

public class MultiTextWriter : TextWriter
{private readonly TextWriter _consoleWriter;private StreamWriter _fileWriter;private string _currentLogFilePath;private DateTime _currentLogFileTime;public MultiTextWriter(TextWriter consoleWriter, string logDirectory){_consoleWriter = consoleWriter;_currentLogFileTime = DateTime.Now;_currentLogFilePath = GetLogFilePath(logDirectory, _currentLogFileTime);Directory.CreateDirectory(logDirectory);_fileWriter = new StreamWriter(new FileStream(_currentLogFilePath, FileMode.Append, FileAccess.Write)) { AutoFlush = true };}public override Encoding Encoding => _consoleWriter.Encoding;public override void Write(char value){RotateLogFileIfNeeded();_consoleWriter.Write(value);_fileWriter.Write(value);}public override void WriteLine(string value){RotateLogFileIfNeeded();_consoleWriter.WriteLine(value);_fileWriter.WriteLine(value);}public override void Flush(){_consoleWriter.Flush();_fileWriter.Flush();}private void RotateLogFileIfNeeded(){var now = DateTime.Now;if (now.Minute != _currentLogFileTime.Minute || now.Hour != _currentLogFileTime.Hour || now.Date != _currentLogFileTime.Date){_fileWriter.Dispose();_currentLogFileTime = now;_currentLogFilePath = GetLogFilePath(Path.GetDirectoryName(_currentLogFilePath)!, _currentLogFileTime);_fileWriter = new StreamWriter(new FileStream(_currentLogFilePath, FileMode.Append, FileAccess.Write)) { AutoFlush = true };}}private static string GetLogFilePath(string logDirectory, DateTime logTime){return Path.Combine(logDirectory, $"console_output_{logTime:yyyyMMdd_HHmm}.log");}
}

在Program里直接引用

    partial class Program{static void Main(string[] args){#region Redirect Console Output to File and Consolevar logDirectory = "Logs";var multiWriter = new MultiTextWriter(Console.Out, logDirectory);Console.SetOut(multiWriter);Console.SetError(multiWriter);#endregionConsole.WriteLine("Hello, World!");}}

查看bin目录下的日志文件

在这里插入图片描述

http://www.lryc.cn/news/591688.html

相关文章:

  • 编译原理第六到七章(知识点学习/期末复习/笔试/面试)
  • Docker-Beta?ollama的完美替代品
  • 如何将 ONLYOFFICE 文档集成到使用 Laravel 框架编写的 PHP 网络应用程序中
  • NO.7数据结构树|线索二叉树|树森林二叉树转化|树森林遍历|并查集|二叉排序树|平衡二叉树|哈夫曼树|哈夫曼编码
  • vue3 自定义vant-calendar header/footer/maincontent
  • Java数组中相关查找排序算法(1)
  • 力扣 hot100 Day47
  • 网络安全威胁下的企业困境与破局技术实践
  • Linux内核内存管理相关的配置参数
  • 电商行业如何做好网络安全工作?
  • 【web安全】DVWA反射型XSS漏洞分析与利用
  • RGBA图片格式转换为RGB格式(解决convert转换的失真问题)
  • 利用node.js在本地搭建简易http服务器
  • 快慢指针的应用
  • RCU机制及常见锁的理解
  • web安全入门 | 记新手小白初次尝试挖越权漏洞
  • Ansible AWX 自动化运维
  • 3t车用手动卧式千斤顶设计含8张CAD图纸PDF图
  • parallels desktop windows win10无法复制文件无法共享剪切板
  • [NIPST AI]对抗性机器学习攻击和缓解的分类和术语
  • RocketMq集群高可用
  • Java并发编程第三篇(深入解析Synchronized)
  • 系统引导修复(2)
  • 《Java语言程序设计》1.2.5 复习题
  • Spring Boot 分层架构详解:Controller、Service、Mapper...
  • SLG 游戏如何进行防破解和防盗版保护?
  • 《迭代器 VS 生成器:Python 惰性计算的两种实现方案详解》
  • Scrapy无缝集成Pyppeteer:异步无头浏览器爬虫架构实战
  • 中科固源深度解析:DoIP 协议原理、应用与安全防护全流程
  • cnpm命令报internal/modules/cjs/loader.js:797 throw err; ^ Error: Cannot find