我正在编写一个 WinForms 应用程序。我需要将信息记录到文件中。通常我使用log4net进行日志记录,但由于限制,我无法添加参考。我无法向我的项目添加外部引用,因为我必须部署一个可执行文件。
.NET中是否有任何内置的日志记录框架,这样我就可以在不添加外部 dll 的情况下登录文件?
PS:当然我不想打开流并手动写入。
是的,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.");
就个人而言,如果可以避免它,我不会写入文本文件,事件日志是一个更好的位置,因为您可以排序、过滤、自动清除日志并且您不会遇到文件锁定问题。
您可以使用系统跟踪调用,但它不能替代像 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 包。