【项目学习】——C#自动生成错误日志

本文介绍了一个简单的错误日志功能实现方法,通过C#代码记录并导出Excel模板导入时的错误信息,便于用户查看及修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提    

   系统中的错误日志是一个非常重要的部分,能很好的帮助开发人员了解系统的问题,及时改进系统,提高软件的使用效率。而且这一部分之前师傅也曾提到过,可是千言万语都抵不过一个“懒”字,这次更是项目必须用到了,才真正想到要去实现一下。

    我这次做的这个功能是为了给用户看到,目的利用这个日志提示导入Excel模板中有多少内容存在问题,方便用户修改。为了用户方便,所有的错误信息提示,由用户选择保存路径,默认路径桌面。

代码部分

  <span style="white-space:pre">	</span>#region 自动生成错误txt+贾文静+2016-8-13 17:56:11
        public void WriteLog(string cdmstring)
        {
            try
            {
                //该错误日志以日期命名
                string filename = DateTime.Now.ToString("yyyy-MM-dd") + "错误信息";
                Response.Clear();
                Response.Buffer = false;
                Response.ContentType = "application/octet-stream";
                //下载文件为txt格式
                Response.AppendHeader("content-disposition", "attachment;filename=" + filename + ".txt;");
                //定义sbLog的目的是为了拼接错误日志的显示格式
                StringBuilder sbLog = new StringBuilder();
                sbLog.Append("=====================================");
                sbLog.Append("\r\n");
                sbLog.Append("添加日期为:");
                sbLog.AppendFormat("{0}", DateTime.Now.ToString());
                sbLog.Append("\r\n");
                sbLog.Append("日志内容为:");
                //cdmstring是需要提供错误信息的字符串
                sbLog.AppendFormat("{0}", cdmstring);
                sbLog.Append("\r\n");
                sbLog.Append("=====================================");
                Response.Write(sbLog.ToString());
                Response.Flush();
               
                Response.End();


            }
            catch (Exception ex)
            {
                ex.ToString();
            }
            finally
            {
                //无论此过程是否成功,都刷新用户界面
                Response.Redirect(Request.Url.ToString()); 
            }
        }
        #endregion

    这个过程一开始使用的弹出框,后来改用此方法原因还是弹出框不方便,一个确定按钮,需要提示用户的信息就消失了。不变用户的修改,但是这个过程发现一个问题就换行的问题,因为错误的信息采用StringBuilder拼接,在弹出框的时候换行符写为sbErrorCash.Append("@\r\n")而改成错误日志后换行符就变成sbErrorCash.Append("\r\n")。原因是弹出框采用的JavaScript,而日志则是使用C#语言。语言的不同,格式不同,因为都是在Asp.net中编写也没有注意格式问题,后面还是调了好久。想说一下虽然语言基本上相似,还是需要多多注意一下细节,多一点认真啊。

【总结】

    说错误日志这个东西吧,能做大做小,我就这就是非常小的功能,仅仅用户小小的需求吧。今天接触一个新的框架,也是关于企业的错误日志收集的系统——es+flume+kafka完成企业日志追踪,里面更是涉及到一些我目前还没有接触到的技术,看到些东西,这个小东西也就练练手吧,同样是看到这些东西还是革命尚未成功,同志仍需努力啊!

        

### 如何在 C# WinForms 应用程序中生成日志的最佳实践 在 C# WinForms 应用程序中生成日志是一项重要的功能,可以帮助开发者跟踪应用程序的行为、诊断错误并提高维护效率。以下是几种常见的日志生成方式及其最佳实践。 #### 1. 使用 `Console.WriteLine` 或自定义 TextBox 控件 对于简单场景,可以直接使用 `Console.WriteLine` 将日志输出到控制台窗口[^1]。如果希望在图形界面上展示日志,则可以通过绑定一个 `TextBox` 或者 `RichTextBox` 来实时更新日志内容: ```csharp public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void AppendLog(string message) { if (richTextBoxLogs.InvokeRequired) { richTextBoxLogs.Invoke(new Action<string>(AppendLog), message); } else { richTextBoxLogs.AppendText(message + Environment.NewLine); } } private void buttonGenerateLog_Click(object sender, EventArgs e) { AppendLog("This is a log entry."); } } ``` 这种方式适合小型项目或快速原型设计,但对于复杂应用可能不够灵活。 --- #### 2. 利用第三方日志库 为了更高效地管理和存储日志信息,推荐使用成熟的第三方日志库,例如 **NLog**, **log4net** 和 **Serilog**。这些工具提供了丰富的配置选项以及多种目标(Target),如文件、数据库甚至远程服务器。 ##### NLog 配置示例 安装 NuGet 包 `NLog` 后,在项目的根目录下创建名为 `nlog.config` 的 XML 文件,并设置如下参数: ```xml <?xml version="1.0" encoding="utf-8"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd"> <targets> <!-- 输出至文本文件 --> <target name="logfile" type="File" fileName="${basedir}/logs/${shortdate}.txt"/> <!-- 实时打印到控制台 --> <target name="console" type="Console"/> </targets> <rules> <logger name="*" minlevel="Info" writeTo="logfile, console"/> </rules> </nlog> ``` 随后可以在代码中调用该日志实例完成记录工作: ```csharp using NLog; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private void GenerateLogEntry() { logger.Info("An informational event occurred at {time}", DateTime.Now); logger.Warn("Something unusual happened but not critical."); try { throw new InvalidOperationException("Test exception"); } catch (Exception ex) { logger.Error(ex, "Error during operation!"); } } ``` 此方法具备高度可定制性和跨平台兼容能力,适用于大多数生产环境下的需求[^2]。 --- #### 3. 数据加密与安全性考量 当涉及敏感数据的日志记录时,应特别注意保护隐私不被泄露。一种常见做法是对特定字段进行哈希处理后再存入日志系统;另一种则是采用端到端的数据加解密机制确保传输过程中的机密性[^3]。 例如,下面展示了如何计算文件的 SHA-3 哈希值作为其唯一标识符之一: ```csharp public static string ComputeFileHash(string filePath) { using var sha = System.Security.Cryptography.SHA3_256.Create(); using var stream = File.OpenRead(filePath); byte[] hashBytes = sha.ComputeHash(stream); return BitConverter.ToString(hashBytes).Replace("-", "").ToLowerInvariant(); } ``` 将此类算法应用于日志条目前的内容预处理阶段能够有效降低潜在风险。 --- #### 总结 综上所述,针对不同规模的应用可以选择不同的日志解决方案——从小型项目的内置控件显示,到大型系统的专业化日志框架支持。无论哪种途径都应当遵循良好的编码习惯和技术规范以保障最终成果的质量。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandy_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值