заставить {aspnet-request} работать должным образом без ссылки на NLog.Web из проекта, который вызывает NLog - PullRequest
0 голосов
/ 03 октября 2019

У меня есть проект asp.net, который вызывает мой класс-оболочку NLog (.netframework 4.7). Чтобы заставить {aspnet-request} работать, мне нужно было добавить ссылку на проект NLog.Web на проект asp.net вместе со ссылкой на мой класс-оболочку NLog. Есть ли способ заставить вызовы {aspnet} работать, не ссылаясь на NLog.Web из проекта asp.net и просто ссылаясь на мой класс-оболочку NLog? Я пытался добавить расширения для добавления сборки NLog.Web в мой файл NLog.config, но безрезультатно. Я также попытался просто сослаться на NLog.Web в моем классе оболочки. Но из класса проекта asp.net выдается ошибка, которая говорит, что он не может найти NLog.Web. Заранее спасибо.

Текущие ссылки: мои ссылки

NLog Wrapper Class

using System;
using NLog;

public class MyLogger {

    private Logger _logger;

    public MyLogger(string name)
    {
        _logger = LogManager.GetLogger(name); 
    }

    public void Info(string msg, params object[] args)
    {
        LogEventInfo logEvent = new LogEventInfo(LogLevel.Info, _logger.Name, null, msg, args);
        _logger.Log(typeof(MyLogger), logEvent); 
    }
}

Asp.Net Проект, который вызывает NLog класс-оболочку:

WebApplication.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            EventLog.MyLogger l = new EventLog.MyLogger("uuu");
            l.Info("Test {param1} and {param2}", new { OrderId = 2, Status = "Processing" }, new { OrderId = 1, Status = "Processing" });
        }
    }
}

Вот мой 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"
  autoReload="true"
  throwConfigExceptions="true"
  internalLogLevel="info"
  internalLogFile="${basedir}\logs\internal\nlog.log">

     <extensions>
         <add assembly="NLog.Web"/>
     </extensions>

      <!-- NLog wikipedia: https://github.com/nlog/nlog/wiki/Tutorial -->

     <!-- the targets to write to -->
     <targets async="true">
         <!-- write logs to file  -->   
         <target xsi:type="File" name="allfile" fileName="${basedir}\logs\events\${date:format=yyyyMMdd}-${appsetting:item=Version}-${appsetting:item=Environment}.log"
             layout="${longdate}
              |${uppercase:${level}}
              |IP:${aspnet-request-ip}
              |Identity:${windows-identity}
              |Controller:${aspnet-mvc-controller}
              |Action:${aspnet-mvc-action}     
              |Callsite:${callsite}
              |Message:${message} />   
      </targets>
      <!-- rules to map from logger name to target -->
      <rules>
          <!--All logs-->
          <logger name="*" minlevel="Trace" writeTo="allfile" />
      </rules>
</nlog>

Это ошибка, которую я получаю в своем классе оболочки NLog: Сообщение об ошибке, которое я получаю

1 Ответ

2 голосов
/ 03 октября 2019

Проект WebApplication ссылался на библиотеку классов EventLog, но один из библиотек не копировался в выходные данные проекта. Это было связано с тем, что, хотя библиотека классов ссылалась на эту dll, не было никакого фактического вызова или использования dll, кроме ссылки, должен быть явный вызов этой dll для того, чтобы она была скопирована впроект.

Поэтому я добавил фиктивный вызов случайного свойства в NLog.Web.dll внутри библиотеки классов, и теперь проект, который ссылается на библиотеку классов, получает файл NLog.Web.dll в своей выходной папке (bin).

Зависимая DLL не копируется в выходную папку сборки в Visual Studio

...