【问题标题】:Winforms logging frameworkWinforms 日志框架
【发布时间】:2012-07-10 08:19:05
【问题描述】:

我正在编写一个 WinForms 应用程序。我需要将信息记录到文件中。通常我使用log4net 进行日志记录,但由于限制,我无法添加引用。我无法向我的项目添加外部引用,因为我必须部署一个可执行文件。

.NET 中是否有任何内置的日志记录框架,这样我就可以在不添加外部 dll 的情况下登录文件?

P.S:我当然不想打开流并手动写入。

【问题讨论】:

  • 如果 .NET 框架提供了一个成熟的日志框架,那么首先就不需要 log4net...
  • @Alex 并非所有 .NET 功能都很出色,有各种外部库可以替换部分框架,因为它们做得更好。
  • @Daniel 这个要求从何而来? merging 程序集是一个选项吗?
  • .NET 确实附带了一个完整的日志框架,只有一个具有合理数量的严重级别

标签: c# .net logging


【解决方案1】:

是的,System.Diagnostics.TraceListener 类。您需要定义 TRACE 常量才能使其工作,但您可以通过配置 app.config 使用许多内置的跟踪侦听器:

如果您想写入文件,app.config 看起来像这样,您还可以添加很多过滤器:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.diagnostics>
        <trace autoflush="false" indentsize="4">
          <listeners>
            <add name="yourName" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\mylogfile.txt" />
          </listeners>
        </trace>
    </system.diagnostics>
</configuration>

及用法:

Trace.TraceError("There's been an error captain: {0}", e);
Trace.TraceWarning("The system broke but don't worry.");
Trace.TraceInformation("Starting up the engines.");

如果可以避免,我个人不会写入文本文件,事件日志是一个更好的位置,因为您可以进行排序、过滤、自动清除日志并且您不会遇到文件锁定问题。

【讨论】:

  • 监听器中的“yourName”是什么?
  • @DanielPeñalba 这个名字并不重要,除非你通过Trace.Listeners["yourName"]在代码中引用它
  • @ChrisS 我的日志文件中没有写入任何内容。有什么原因吗?
  • @reggie 您是否在项目属性中定义了#TRACE?
【解决方案2】:

好吧,如果您对 log4net 感到满意,那就这样吧。使用您选择的日志记录工具,并在构建后使用ILMerge 将所有依赖项合并到一个可执行文件中。

这正是它的预期场景。

如果您不想在命令行模式下使用它,还有一个GUI

【讨论】:

    【解决方案3】:

    您可以使用系统跟踪调用,但它不能替代像 log4net 这样的适当日志框架。

    http://msdn.microsoft.com/en-us/library/system.diagnostics.trace.aspx

    另一种可能更灵活的长期方法是在编译所有内容后使用 ILMerge 将所有外部 DLL 组合成一个可执行文件。

    http://www.microsoft.com/en-us/download/details.aspx?id=17630

    当然,也可以将所有内容打包为 MSI 或 clickonce 包,具体取决于您对“单个可执行文件”的定义。

    【讨论】:

      【解决方案4】:

      以下页面显示了手动记录到 XML 文件的示例。看起来相当简单。

      c# Best Method to create a log file

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-18
        • 2015-03-11
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多