我在VS 2010中使用“new ... c#service”菜单创建了一个Windows服务。在构造函数中我有:
TextWriterTraceListener tr1 = new TextWriterTraceListener( System.IO.File.CreateText("d:\\output\\test.log"));
Trace.Listeners.Add(tr1);
Trace.WriteLine("Created");
将服务设置为在LocalService或LocalSystem帐户(WinXP)中运行我获取服务启动时创建的文件,但它始终为空。向析构函数添加Flush()调用没有帮助。我在OnStart / OnStop / OnPause / OnContinue方法中有更多跟踪调用。
(编辑)我在项目中启用了跟踪和调试 - 正在创建跟踪输出文件 ,它只是空的。
该服务将从数据库中提取记录,并将文件写入磁盘,以用于我们必须与之交互的消息系统。因此,日志文件问题只是更广泛问题的第一个实例 - 我需要能够写入用户选择的消息传递目录。
这看起来像another question中的症状,但我也把问题当作LocalSystem(我认为它有太多的权限因此被弃用)。
感谢您的帮助
答案 0 :(得分:5)
您确定为项目定义了TRACE
符号吗?基于此符号有条件地编译所有System.Diagnostics.Trace
代码。请注意,您仍然需要刷新跟踪输出以确保写入所有行(或将Trace.AutoFlush
设置为true)。
作为旁注,我建议不要使用静态Trace
方法,并建议至少使用System.Diagnostics.TraceSource
。
答案 1 :(得分:1)
尝试在应用程序的app.exe.config中配置跟踪。
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
您可以使用Microsoft Windows SDK工具下的服务配置编辑器来执行此操作。