【问题标题】:Getting 'The 'location' attribute is not allowed" in App.Config while saving log info to a text file将日志信息保存到文本文件时,在 App.Config 中获取“不允许‘位置’属性”
【发布时间】:2026-02-17 10:30:01
【问题描述】:

我想在 Application.Log 文件中记录用户活动,以便我可以检查他/她在发生任何错误之前做了什么,或者只是检查用户是否执行了任何错误活动。首先,为了记录活动,我从Microsoft 的文档网站阅读了文章'How to: Write Log Messages (Visual Basic)',并根据我的需要更改了适当的值。一切都很好,我在 Debug Output 中成功获取了信息,但是当我想将其保存到文本文件时,我遇到了问题。我按照Microsoft 的文档网站上的文章“How to: Write Event Information to a Text File (Visual Basic)”中给出的说明进行操作。 网站上写的将日志信息保存到文本文件的代码是:

<add name="FileLogListener"   
    type="Microsoft.VisualBasic.Logging.FileLogTraceListener,   
          Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral,   
          PublicKeyToken=b03f5f7f11d50a3a"  
    initializeData="FileLogListenerWriter"  
    location="Custom"  
    customlocation="c:\temp\" />  

上面提到的所有代码看起来都很好,除了locationcustomlocation这两个抛出错误Message之外,没有显示任何错误,

  • 不允许使用“location”属性。
  • 不允许使用“customlocation”属性。

我尝试了很多,但无法解决这个错误。我在那个文档站点上发现了一个有趣的注释。它说如下。

ⓘ注意

要设置侦听器属性的值,请使用与该属性同名的属性,名称中的所有字母都小写。例如,locationcustomlocation 属性设置 LocationCustomLocation 属性的值。

但即使通过阅读这些网站中提供的信息,我也未能解决该错误。

请帮忙!

【问题讨论】:

  • 我刚刚尝试了你所做的,我没有看到任何错误。我确实看到了关于这两个属性的警告,但项目构建没有问题。您是否尝试过构建和运行项目以查看它是否真的有效?很可能该注释指的是您可以通过这种方式设置派生自TraceListener 的任何类型的属性,即使配置系统没有明确识别它们。
  • 是的,你是对的。构建和运行项目没有问题,但它不起作用。我的意思是我没有得到任何输出。 :( 顺便说一句,你得到输出了吗?

标签: vb.net logging visual-studio-2015 app-config


【解决方案1】:

我怀疑您的配置文件可能不太正确。我点击了从this pagehere 的链接,并将配置示例复制到我的应用程序中。然后我回到另一个页面并根据它修改了我的配置文件。然后我运行了我的应用程序,该应用程序的默认名称为“ConsoleApp1”,我确实看到文件“ConsoleApp1.log”写入了包含适当信息的指定文件夹。这是我的最终配置文件的样子:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
  </startup>
  <system.diagnostics>
    <sources>
      <source name="DefaultSource" switchName="DefaultSwitch">
        <listeners>
          <add name="FileLogListener"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="DefaultSwitch" value="Information" />
    </switches>
    <sharedListeners>
      <add name="FileLogListener"
           type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
           initializeData="FileLogListenerWriter"
           location="Custom"
           customlocation="D:\johnm\Documents\" />
    </sharedListeners>
  </system.diagnostics>
</configuration>

这是我的 VB 代码:

Module Module1

    Sub Main()
        TracingTest(My.Computer.FileSystem.CombinePath(My.Computer.FileSystem.SpecialDirectories.MyDocuments, "LogFile.txt"))
        Console.ReadLine()
    End Sub

    Public Sub TracingTest(ByVal fileName As String)
        My.Application.Log.WriteEntry($"Entering TracingTest with argument '{fileName}'.")

        ' Code to trace goes here.

        My.Application.Log.WriteEntry($"Exiting TracingTest with argument '{fileName}'.")
    End Sub

End Module

【讨论】:

  • 我有多个 .config 文件是否重要?像其他 .config 文件一样做这个工作,而不是 app.config?因为似乎我编写了与您所说的内容相似的所有内容,并且在阅读了您的答案后,我根据我的猜测更改了所有内容。您的回答中的一个问题是您使用了两种不同的路径,一种是“D:\johnm\Documents\”,另一个是用户文档文件夹。那么是不是就像在第一个位置“D:/”上创建了实际的日志文件一样?
  • VB 代码中使用的路径无关紧要,因为在该方法中它只是被视为String 参数。它实际上从未被视为文件路径。我只是使用了文件路径,因为参数名称暗示了它。此外,在这种情况下,“D:\johnm\Documents\”是用户文档文件夹。我将所有数据库移至 D: 驱动器,并将 C: 驱动器仅用于操作系统和应用程序。
  • 我不知道拥有多个配置文件是否重要。如果是这样,只要这是主要的,那么我认为你应该很高兴。
  • 该死的。在主“App.config”文件中输入它解决了这个问题,我得到了日志,但我想知道为什么输入第二个配置文件不起作用。请您向我解释一下,这将有助于理解错误。非常感谢!!!你连续三次帮助了我,我非常感谢你...[无法用言语表达这种感觉]
  • 请在主 .config 文件中添加使用它,以便我可以接受您的答案作为已解决。
最近更新 更多