如何以编程方式确定VB应用程序日志的位置?

时间:2009-01-26 15:15:00

标签: vb.net logging

我正在改编旧的vb.net应用程序,使其符合Vista中的LUA原则。到目前为止,该应用程序已经使用了大量的日志记录机制,但核心日志涉及将日志写入c:\ temp \,如果该文件夹存在。我想用更标准的日志记录机制替换当前的日志记录。

这是VB,我决定尝试将My.Application.Log与app.config一起使用,并尽可能地工作(尽管我没想到它会转储到漫游配置文件中)。不幸的是,用户习惯于使用日志中的信息进行故障排除,以及在提交错误时发送登录,并且移动此日志会很好地隐藏它。

我的想法是通过在应用程序的UI中添加一个链接,或至少添加到包含它的文件夹,使日志更容易访问。但是,我不知道如何确定链接指向的位置。

编辑(添加信息):

我的配置文件或多或少是内置默认值:

<system.diagnostics>
    <sources>
        <source name="Error Log" switchName="DefaultSwitch">
            <listeners>
                <add name="FileLog"/>
            </listeners>
        </source>
    </sources>
    <switches>
        <add name="DefaultSwitch" value="Information" />
    </switches>
    <sharedListeners>
        <add name="FileLog"
             type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
             initializeData="FileLogWriter"/>
    </sharedListeners>
</system.diagnostics>

我想在配置文件中设置FileLogTraceListener上的一些属性。 MaxSize,例如(之前存在最大尺寸行为)。但是,我没有看到任何调用此文档的文档。 (在FileLogTraceListener page的基础上有一些社区内容表明我应该能够这样做,所以我会检查一下。如果我找到一些官方文件支持,我会更舒服。 )

如果我这样做,我应该能够遍历My.Application.Log上的跟踪侦听器集合,并且只链接到第一个FileLogTraceListener的FullLogFileName。

4 个答案:

答案 0 :(得分:1)

解决方案是使用Microsoft.VisualBasic.Logging.FileLogTraceListener。此跟踪侦听器支持通过其FullLogFileName属性检索完整日志路径,以及通过Location属性自定义位置。

答案 1 :(得分:1)

我相信这是可配置的。它可以在machine.config文件中配置,或者您可以在应用程序配置文件中覆盖它 - 您将要执行此操作,以便您可以控制它并创建指向它的链接。

您需要在app.config中添加FileLogTraceListener

它位于system.diagnostics\sharedListeners部分。您可以在initializeData属性中指定文件名。

来自MSDN的更多文档:

答案 2 :(得分:0)

一种可能性是完全跳过My.Application.Log并直接转到System.Diagnostics.TraceListener。我可以选择我自己的日志文件夹,我肯定知道它的位置。

答案 3 :(得分:0)

我喜欢使用内置的Trace对象进行日志记录。此外,如果您需要保留使用临时文件的旧行为,请查看System.IO.Path.GetTempFileName()