当前位置: 首页 > 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.dtcms.com/a/284705.html

相关文章:

  • 【JavaEE进阶】使用云服务器搭建Linux环境
  • Java网络通信:UDP和TCP
  • 关于CDH以及HUE的介绍
  • vue-seo优化
  • Android构建流程与Transform任务
  • 题解:P13311 [GCJ 2012 Qualification] Speaking in Tongues
  • java面向对象-多态
  • 【前端】Power BI自动化指南:从API接入到Web嵌入
  • 旅游管理实训基地建设:筑牢文旅人才培养的实践基石
  • LeetCode热题100—— 238. 除自身以外数组的乘积
  • Pygame创建窗口教程 - 从入门到实践 | Python游戏开发指南
  • 小白学Python,网络爬虫篇(1)——requests库
  • java Integer怎么获取长度
  • 【Jmeter】报错:An error occured:Unknown arg
  • 3.PCL点云合并
  • 为什么选择Selenium自动化测试?
  • 接口黑洞?破!安全堡垒?筑!冰火炼狱?战!MES7114W终极掌控
  • 学习C++、QT---27(QT中实现记事本项目实现行列显示、优化保存文件的功能的讲解)
  • 三、CV_VGGnet
  • 栈和队列的实现,咕咕咕
  • CTF之栅栏密码的传统型、W型与偏移量
  • ota之.加密算法,mcu加密方式
  • 开源 python 应用 开发(八)图片比对
  • Android wifi简单白名单实现逻辑
  • 20250717在荣品的PRO-RK3566开发板的Android13系统下解决点屏出现问题unsupport command data type: 217
  • 通俗的解释一下以太网中的端口号
  • 流式数据处理实战:用状态机 + scan 优雅过滤 AI 响应中的 `<think>` 标签
  • 深入理解CSS定位:绝对定位的包含块机制
  • 退休时间计算器,精准预测养老时间
  • 项目实战(18)-POE分离器