zoukankan      html  css  js  c++  java
  • C#之winform捕获Console.WriteLine内容到日志文件

    问题描述

    之前接手同事的项目,是一个类似于服务端后台的Winform程序,主界面隐藏起来,只再任务栏显示程序图标。
    整个项目里面没有日志记录功能,全靠Console.WriteLine打印信息。自己调试时可以用VS查看输出的内容,但给测试人员使用时很不方便,于是我使用了下面的方法显示输出的内容:

    [转]C#之winform控制台打印输出、打印调试

    但这只能实时显示,不利于后期根据输出内容查找问题。
    最终,我选择将Console.WriteLine的输出内容记录到日志文件。

    解决方法

    代码很简单,就不过多解释了,重点注意 Console.SetOut方法ConsoleLogTextWriter 类即可, 日志类Log 根据需求自己实现。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    namespace LogDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                ConsoleLogTextWriter logSW = new ConsoleLogTextWriter();
                Console.SetOut(logSW);
                Console.WriteLine("程序启动");
            }
        }
        /// <summary>
        /// 捕获控制台输出并写入日志文件(推荐通过日志接口写日志)
        /// </summary>
        class ConsoleLogTextWriter : TextWriter
        {
            public ConsoleLogTextWriter() : base() { }
    
            public override Encoding Encoding { get { return Encoding.UTF8; } }
    
            public override void Write(string value)
            {
                Log.WriteLog(value);
            }
            public override void WriteLine(string value)
            {
                Log.WriteLog(value);
            }
            public override void Close()
            {
                base.Close();
            }
        }
        /// <summary>
        /// 日志类(只作演示使用,可自己定义实现)
        /// </summary>
        class Log 
        {
            public static void WriteLog(string msg) 
            {
                string path = "测试用日志文件.log";
                try
                {
                    FileStream fs;
                    StreamWriter sw;
                    StringBuilder sbr = new StringBuilder(16);
                    if (!System.IO.File.Exists(path))
                    {
                        fs = new FileStream(path, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite);
                        sw = new StreamWriter(fs, Encoding.UTF8);
                        sbr.Append("日志开始-");
                        sbr.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                        sbr.AppendLine();
                    }
                    else
                    {
                        fs = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
                        sw = new StreamWriter(fs, Encoding.UTF8);
                    }
                    sbr.Append("--");
                    sbr.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"));
                    sbr.Append("--");
                    sbr.Append(msg);
                    sw.WriteLine(sbr.ToString());
    
                    sw.Flush();
                    sw.Close();
                    fs.Close();
                    sbr.Clear();
                }
                catch (Exception)
                {
                    throw;
                }
            }
    
        }
    }
    
  • 相关阅读:
    element ui 时间控件 多个日期
    java 获取两个日期之间的所有日期(年月日)
    java 正则表达式(内附例子)
    Notepad++怎么使用正则替换
    基于 vue+element ui 的cdn网站(多页面,都是各种demo)
    使用github搭建个人html网站
    PL/SQL Developer 如何记住密码
    PL/SQL Developer图形化窗口创建数据库(表空间和用户)以及相关查询sql
    安装pl/sql developer(内附下载地址)
    vue中操作cookie的插件
  • 原文地址:https://www.cnblogs.com/timefiles/p/CSharp_WinForm_ConsoleWriteToLog.html
Copyright © 2011-2022 走看看