【发布时间】:2019-10-03 15:45:02
【问题描述】:
我有一个调用我的 NLog 包装类 (.netframework 4.7) 的 asp.net 项目。为了让 {aspnet-request} 工作,我必须添加一个对 asp.net 项目的 NLog.Web 引用,以及对我的 NLog 包装类的引用。有没有一种方法可以让 {aspnet} 调用工作而无需从 asp.net 项目中引用 NLog.Web,而只需引用我的 NLog 包装类?我尝试添加扩展以在我的 NLog.config 中添加 NLog.Web 程序集,但无济于事。我也尝试在我的包装类中引用 NLog.Web 。但是从 asp.net 项目类中抛出一个错误,说它找不到 NLog.Web。提前致谢。
当前参考:my references
NLog 包装类
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);
}
}
调用 NLog 包装类的 Asp.Net 项目:
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 包装类中遇到的错误:Error Message I get
【问题讨论】:
-
你能在
<extensions>中显示你正在使用的包含NLog.Web的NLog.config 吗?你记得用你的 Nlog.config 部署NLog.Web.dll吗? -
好的,先生。我更新了一些东西,包括 Nlog.config 和我得到的异常消息。我更新了参考图片,还编辑了包装类,以根据我在网上找到的文档正确包装 NLog
-
我确实将 NLog 和 NLog.Web 源代码编译成 dll,然后引用它们。我没有使用 NuGet 包管理器将它们导入。idk 如果这有所作为。但这是我必须遵循的准则
-
旧的 dotnet 项目在处理瞬态依赖方面很糟糕。部署应用程序时,您必须手动包含所有子依赖项(例如 NLog.dll + NLog.Web.dll)。如果您确实包含了相关的依赖项,那么您必须使用
Fuslogvw.exe之类的东西来查看运行应用程序时缺少的内容。 -
顺便说一句。无需手动编译 NLog.dll 和 NLog.Web.dll,您也可以直接从 nuget-packages 解压缩官方版本。请参阅nuget.org/packages/NLog.Web 和nuget.org/packages/NLog 上的“下载包”