NLog 控制台应用程序

Ale*_*one 5 .net c# nlog console-application

我有一个控制台应用程序,为了记录它的活动,我复制了与我的 Web 应用程序相同的 Nlog.config 文件。我还导入了Nlog.ExtendedNlog.Web。我还检查了 Nlog.config 属性(构建操作 = 内容,复制到输出目录 = 始终复制)并设置 internalLogFile 和 internalLogLevel。

什么时候

private static Logger logger = LogManager.GetCurrentClassLogger();
Run Code Online (Sandbox Code Playgroud)

被称为 'System.TypeInitializationException' 被抛出,毕竟

Scanning XXXXLayoutRenderer (all parameter in my config)
Run Code Online (Sandbox Code Playgroud)

这与我的内部日志文件进行了比较

Info Found 105 configuration items
Run Code Online (Sandbox Code Playgroud)

没有别的

这是我的NLog.config文件

  <?xml version="1.0" encoding="utf-8" ?>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
        autoReload="true"
        throwExceptions="true"
        internalLogFile="c:\Temp\internal_log_file.txt"
        internalLogLevel="Trace"
        internalLogToConsole="true">


    <variable name="brief" value="${longdate} | ${level} | ${message}"/>
    <variable name="verbose" value="${longdate} | ${machinename} | ${processid} | ${processname} | ${level} | ${logger} | ${message}"/>
    <variable name="logDirectory" value="${basedir}/Logs/${date:format=yyyyMM}"/>

    <targets>


      <!-- FILE target -->
      <target name="file" xsi:type="File" layout="${brief}" fileName="${logDirectory}/${shortdate}.txt"/>

      <!-- EMAIL target -->
      <target name="email" xsi:type="Mail"
              smtpServer="smtp.gmail.com"
              smtpPort="587"
              smtpAuthentication="Basic"
              smtpUserName="user@gmail.com"
              smtpPassword="password"
              enableSsl="true"
              from="user@gmail.com"
              to="user@gmail.com"
              layout="${verbose}"
            />

      <!-- DATABASE target -->
      <target name="database" xsi:type="Database">


        <connectionStringName>NLogEntities</connectionStringName>

        <commandText>
          insert into dbo.Log (
          Application, Logged, Level, Message,
          Username,
          ServerName, Port, Url, Https,
          ServerAddress, RemoteAddress,
          Logger, CallSite, Exception
          ) values (
          @Application, @Logged, @Level, @Message,
          @Username,
          @ServerName, @Port, @Url, @Https,
          @ServerAddress, @RemoteAddress,
          @Logger, @Callsite, @Exception
          );
        </commandText>
        <parameter name="@application" layout="${appsetting:key=AppName:default=Unknown}" />
        <parameter name="@logged" layout="${date}" />
        <parameter name="@level" layout="${level}" />
        <parameter name="@message" layout="${message}" />

        <parameter name="@username" layout="${identity}" />

        <parameter name="@serverName" layout="${aspnet-request:serverVariable=SERVER_NAME:default=Unknown}" />
        <parameter name="@port" layout="${aspnet-request:serverVariable=SERVER_PORT}" />
        <parameter name="@url" layout="${aspnet-request:serverVariable=HTTP_URL}" />
        <parameter name="@https" layout="${when:inner=1:when='${aspnet-request:serverVariable=HTTPS}' == 'on'}${when:inner=0:when='${aspnet-request:serverVariable=HTTPS}' != 'on'}" />

        <parameter name="@serverAddress" layout="${aspnet-request:serverVariable=LOCAL_ADDR}" />
        <parameter name="@remoteAddress" layout="${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" />

        <parameter name="@logger" layout="${logger}" />
        <parameter name="@callSite" layout="${callsite}" />
        <parameter name="@exception" layout="${exception:tostring}" />
      </target>
    </targets>
    <rules>
      <!-- DATABASE rules -->
      <logger name="*" minlevel="Error" writeTo="database" />
      <!-- EMAIL rules -->
      <logger name="*" minlevel="Error" writeTo="email" />
      <!-- FILE rules -->
      <logger name="*" minlevel="Trace" writeTo="file" />
    </rules>
  </nlog>
Run Code Online (Sandbox Code Playgroud)

这是输出的内部日志文件

    2016-01-22 12:47:43.0520 Debug ScanAssembly('NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c')
    ....
    ....

    2016-01-22 12:47:43.2532 Trace    Scanning LongDateLayoutRenderer 'Layout Renderer: ${longdate}'
    2016-01-22 12:47:43.2532 Trace    Scanning LiteralLayoutRenderer 'Layout Renderer: ${literal}'
    2016-01-22 12:47:43.2532 Trace    Scanning LevelLayoutRenderer 'Layout Renderer: ${level}'
    2016-01-22 12:47:43.2532 Trace    Scanning LiteralLayoutRenderer 'Layout Renderer: ${literal}'
    2016-01-22 12:47:43.2532 Trace    Scanning MessageLayoutRenderer 'Layout Renderer: ${message}'
    2016-01-22 12:47:43.2532 Info Found 105 configuration items
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿?

Ale*_*one 4

找到解决方案!!!我必须改变这个

<parameter name="@application" layout="${appsetting:key=AppName:default=Unknown}" />
Run Code Online (Sandbox Code Playgroud)

有了这个

<parameter name="@application" layout="${appsetting:name=AppName:default=Unknown}" />
Run Code Online (Sandbox Code Playgroud)

关键字必须替换为名称

解决了。