【问题标题】:WCF logging messagesWCF 记录消息
【发布时间】:2011-01-08 08:17:49
【问题描述】:

我有一个正在运行的 WCF 服务(由 IIS 网页托管),但我想将更多信息写入日志文件。

我继承了代码,它有一些简单的日志记录到文件中。这在原始开发人员机器上有效,但我没有写出任何内容。请注意,它从我认为是 Web 配置的配置中读取日志文件路径,但以防我现在硬编码位置“c:\temp\logfile.log”。

我将 temp 的完全权限授予 ASPNET,然后用户认为这是权限问题。

我还注意到 WCF 中内置了跟踪和消息日志记录。试过了,但不确定我是否正确。

关于简单文件编写的任何想法?
我应该做内置的日志记录吗?如果有的话,有什么简单的例子吗?

谢谢!

【问题讨论】:

标签: wcf logging


【解决方案1】:

要配置日志记录: 配置日志记录
1. 在配置编辑器中,选择诊断节点。

2. 在右侧窗格中,单击启用消息记录。

这将创建 ServiceModelMessageLoggingListener 和 Listeners 和 Sources 下的 System.ServiceModel.MessageLogging 节点 文件夹。

3. 在左侧窗格中,选择 Diagnostics 节点下的 MessageLogging。

4. 通过选择此选项将 LogMessagesAtServiceLevel 属性设置为 True 从下拉列表中。

5. 在左侧窗格中,选择 ServiceModelMessageLoggingListener 下的 侦听器节点。

注意 InitData 属性的默认值,该值设置为 c:\inetpub\wwwroot\WCFService\web_messages.svclog,所在位置 消息将被记录。

via WCF Security Guidance.

【讨论】:

    【解决方案2】:

    <system.serviceModel>中使用以下内容

    <diagnostics>
          <messageLogging
               logEntireMessage="true"
               logMalformedMessages="false"
               logMessagesAtServiceLevel="true"
               logMessagesAtTransportLevel="false"
               maxMessagesToLog="3000"
             maxSizeOfMessageToLog="2000"/>
        </diagnostics>
    

    并在&lt;configuration&gt;中使用以下内容

    <system.diagnostics>
        <sources>
          <source name ="System.ServiceModel" switchValue="Information, ActivityTracing">
            <listeners>
              <add name="xml" />
            </listeners>
          </source>
          <source name ="System.ServiceModel.MessageLogging"
                  switchValue="Verbose, ActivityTracing">
            <listeners>
              <add name="xml" />
            </listeners>
          </source>
          <source name ="System.Runtime.Serialization" switchValue="Verbose">
            <listeners>
              <add name="xml" />
            </listeners>
          </source>
        </sources>
        <sharedListeners>
          <add name="xml" type="System.Diagnostics.XmlWriterTraceListener"
               traceOutputOptions="LogicalOperationStack"
               initializeData="C:\logs\RestAPISvcLog\Traces.svclog" />
        </sharedListeners>
        <trace autoflush="true" />
      </system.diagnostics>
    

    这将创建日志文件,您可以使用 svctracelog 查看器(VS 附带)直接查看。

    更多信息请参考——http://msdn.microsoft.com/en-us/library/ms730064(v=vs.110).aspx

    【讨论】:

    • 我有一个托管在 Windows 服务上的 WCF 服务。我使用了上述配置,但它没有记录任何消息。是否需要额外配置?
    【解决方案3】:

    改用 EventViewer 日志记录,但您必须确保安装程序可以创建适当的 EventViewer 源。

    【讨论】:

      【解决方案4】:

      也许您应该使用配置编辑器工具“SvcConfigEditor.exe”(see description on MSDN)。这允许以安静、简单和结构化的方式配置 WCF 日志记录。

      然后可以使用服务跟踪查看器工具“SvcTraceViewer.exe”(see on MSDN) 分析日志文件。

      这两个工具都与 Visual Studio 捆绑在一起,可以从 Microsoft 下载。

      【讨论】:

        【解决方案5】:

        要写入日志文件,请确保运行 Web 应用程序的身份具有对日志目录的写入权限。

        IIS7: 您可以在 IIS 管理控制台中找到该标识。选择您的 Web 应用程序正在使用的应用程序池。单击高级设置。在属性窗口中,查找标识字段。它可能会说网络服务。这是需要对您的日志输出文件夹具有写入权限的帐户。

        IIS6: 与 IIS7 相同,只是右键单击应用程序池并选择属性。 IIS6 的属性窗口将有一个标识选项卡。

        如果您在此目录中已有日志文件,请尝试将其删除并让框架创建它。

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2010-12-01
          • 2010-10-28
          • 1970-01-01
          • 2012-03-08
          • 2011-12-24
          • 2014-12-19
          • 1970-01-01
          • 1970-01-01
          • 2020-04-15
          相关资源
          最近更新 更多