赞
踩
欢迎讨论!
在生产环境中,控制台窗口不便展示出来。
为了在生产环境中,完整记录控制台应用的输出,选择将其输出到文件中。
但是,存储所有输出的话会占用很多空间,故而在时间上,只存储近期一段时间里的。
本项目实现:
将控制台输出重定向到文件。
按天存储,且仅存储最近2天的输出。
这里在测试时,使用时分格式"HHmm"
代替日期格式"yyyyMMdd"
来测试。在实际应用时,应该使用后者。
public class Log2Days : TextWriter { private string pathFormat = null; // 可以根据文件计数打开的日志文件路径,待填充后缀 private string path = null; // 当日日志文件路径 private string perviousPath = null; // 前一日日志文件路径 private string today = null; // 今日,如20230402 private StreamWriter fileWriter = null; // 文件写入对象 public Log2Days(string defaultPath) { Directory.CreateDirectory(Path.GetDirectoryName(defaultPath)); // 解析原有路径,以为文件名添加后缀 pathFormat = Path.Combine(Path.GetDirectoryName(defaultPath), Path.GetFileNameWithoutExtension(defaultPath) + "{0}" + Path.GetExtension(defaultPath)); } /// <summary> /// 选择要输出的文件目标 /// </summary> public void SelectTarget() { try { string theDay = DateTime.Now.ToString("HHmm"); // 今日日期要改为yyyyMMdd if (fileWriter is null || !today.Equals(theDay)) // 未初始化,或未成功创建文件,或隔天 { if (!(fileWriter is null)) // 隔天 { // 如果有文件正在使用,则关闭之 fileWriter.Close(); fileWriter.Dispose(); fileWriter = null; if (File.Exists(perviousPath)) // 当前是第三天才会满足此条件 File.Delete(perviousPath); // 删除前天的文件(昨天成了前天) perviousPath = path; // 更新昨日的路径 } // 未初始化,或未成功创建文件 today = theDay; // 今日日期 path = string.Format(pathFormat, today); // 今日路径 fileWriter = new StreamWriter(path, true, Encoding.UTF8) { AutoFlush = true }; // 追加,如果今日已写则继续写 } } catch { } } /// <summary> /// [可选]覆盖写的方法WriteLine(int) /// </summary> public override void WriteLine(int content) { SelectTarget(); fileWriter.WriteLine(content); } /// <summary> /// [可选]覆盖写的方法Write(int) /// </summary> public override void Write(int content) { SelectTarget(); fileWriter.Write(content); } /// <summary> /// 需实现抽象类的此方法 /// </summary> public override Encoding Encoding { get { return fileWriter.Encoding; } } }
当17:05分时
当17:06分时
当17:08分时
当第二日8点多时
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。