我正在编写WinForms应用程序。我需要将信息记录到文件中。通常我使用log4net进行日志记录,但由于限制,我无法添加引用。我无法向我的项目添加外部引用,因为我必须部署一个可执行文件。
.NET中是否有内置的日志框架,因此我可以在不添加外部dll的情况下登录文件?
P.S:当然,我不想打开流并手动写。答案 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)