Winforms日志框架

时间:2012-07-10 08:19:05

标签: c# .net logging

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

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

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

4 个答案:

答案 0 :(得分:11)

是的,System.Diagnostics.TraceListener课程。您需要定义TRACE常量才能使其工作,但您可以通过配置app.config来使用许多内置的tracelistener:

如果你想写一个文件,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.");

我个人不会写文本文件,如果你可以避免它,事件日志是一个更好的位置,因为你可以排序,过滤,日志被自动清除,你不会得到文件锁定问题。

答案 1 :(得分:7)

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

这正是它的用途。

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

答案 2 :(得分: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包,当然这取决于您对“单个可执行文件”的定义。

答案 3 :(得分:0)

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

c# Best Method to create a log file

希望它有所帮助。