6

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

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

PS:当然我不想打开流并手动写入。

4

4 回答 4

12

是的,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.");

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

于 2012-07-10T08:22:21.827 回答
8

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

这正是它所针对的场景。

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

于 2012-07-10T08:24:19.190 回答
2

您可以使用系统跟踪调用,但它不能替代像 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 包。

于 2012-07-10T08:23:36.190 回答
0

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

c# 创建日志文件的最佳方法

希望能帮助到你。

于 2012-07-10T08:21:53.930 回答