【问题标题】:NLog in WCF ServiceWCF 服务中的 NLog
【发布时间】:2011-02-02 23:59:51
【问题描述】:

我可以在 WCF 服务中使用 NLog 吗?我正在尝试但无法使其正常工作。

首先,我在 Windows 窗体应用程序中设置了一个简单的配置,以检查我的设置是否正确,这会很好地写入日志文件(我正在使用名称而不是 IP 地址写入网络位置)。

然后我在 WCF 服务中做了完全相同的事情。它没有用。

为了检查权限,我添加了一些代码来使用 TextWriter。

        TextWriter tw = new StreamWriter(fileName);
        tw.WriteLine(DateTime.Now);
        tw.Close();

这工作正常,所以我知道我可以写信到该位置。

【问题讨论】:

  • 尝试通过将 NLog 配置的第一行修改为如下所示打开 NLog 内部日志记录:nlog-project.org/schemas/NLog.mono2.xsd" xmlns:xsi="w3.org/2001/XMLSchema-instance" autoReload="true " internalLogLevel="Warn" internalLogFile="nlog_log.log" > 将级别调低至 Trace,看看它告诉你什么。
  • 该评论的格式不太好。有关如何为 NLog 启用内部日志记录的一个很好的示例,请参阅此线程中的“以不同的方式处理异常”。 stackoverflow.com/questions/4091606/…

标签: wcf nlog


【解决方案1】:

检查您的 NLog.config 文件是否与 .svc 文件位于同一目录中,而不是 Bin 目录中。

如果您刚刚将配置文件添加到 WCF 项目,然后发布它,您可能会发现您的配置文件已复制到 bin 目录,这就是 NLog 找不到它的原因。将其移至更高级别,然后重新启动托管服务的网站(以确保获取更改)。

今天早上这让我难过了一阵子!

【讨论】:

    【解决方案2】:

    将您的 NLog 配置放入 web.config 文件中。像这样:

    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
      </configSections>
    
      . . . (lots of web stuff)
    
      <nlog>
        <targets>
          <target name="file" xsi:type="File" fileName="${basedir}/logs/nlog.log"/>
        </targets>
        <rules>
          <logger name="*" minlevel="Trace" writeTo="file" />
        </rules>
      </nlog>
    </configuration>
    

    【讨论】:

      【解决方案3】:

      有关如何打开 NLog 的内部日志记录,请参阅我对您原始问题的评论。

      要打开 NLog 的内部日志记录,请修改顶部的 NLog 配置,如下所示:

      <nlog xmlns="http://www.nlog-project.org/schemas/NLog.mono2.xsd"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
            autoReload="true"       
            internalLogLevel="Trace"       
            internalLogFile="nlog_log.log"       
      > 
      

      关键部分是 internalLogLevel 和 internalLogFile。

      您还可以将internalLogToConsole 设置为truefalse 以将内部日志记录定向到控制台。

      还有另一个设置,throwExceptions,它告诉 NLog 是否抛出异常。通常,一旦日志记录成功配置并正常工作,它就会设置为 false。您可以将其设置为 true 以帮助确定您的问题是否是由 NLog 错误引起的。

      因此,如果您启用了所有这些选项,您的 NLog 配置顶部可能如下所示:

      <nlog xmlns="http://www.nlog-project.org/schemas/NLog.mono2.xsd"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
            autoReload="true"       
            internalLogLevel="Trace"       
            internalLogFile="nlog_log.log"       
            internalLogToConsole="true"
            throwExceptions="true"
      > 
      

      我的第一个猜测是 NLog 没有找到配置信息。您使用的是外部配置文件 (NLog.config) 还是“内联”配置(在您的 app.config 或 web.config 中)?在您的项目中,您的配置文件是否(在属性中)标记为“始终复制”?

      【讨论】:

      • 按照您的建议在 NLog.config 中进行所有设置。文件的其余部分是... 'code''/代码'我没有收到任何错误,也没有任何问题的迹象,但也没有日志文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多