如何使用nlog和asp.net core rc2获得可用的$ {callsite}(How to get a usable ${callsite} using nlog and asp.net core rc2)

我正在使用带有asp.net核心rc2的NLog。 (“NLog.Extensions.Logging”:“1.0.0-rc2-final-2016-05-21”)我很难使用布局中的$ {callsite}标记获取日志记录事件的位置。 我更喜欢在消息中键入它,因为我想将它呈现给自己的数据库列。

我的启动看起来像这样:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddNLog();
        env.ConfigureNLog("NLog.config");

我的NLog配置:

<target xsi:type="File" name="infolog" fileName="${basedir}/logs/info-${shortdate}.log"
        layout="${longdate}|${level}|${callsite:className=true:methodName=true}|${machinename}|${message}" />

像这样叫:

Logger.LogInformation("Information: User > Get");

唉,输出总是:

2016-06-20 16:00:03.4458|Info|Microsoft.Extensions.Logging.Logger.Log ...

有没有办法使用Microsoft日志记录扩展和NLog来获取写入日志的类/方法名称?


I'm using NLog with asp.net core rc2. ("NLog.Extensions.Logging": "1.0.0-rc2-final-2016-05-21") I'm having difficulty getting the location of the logging event using the ${callsite} tag in the layout. I prefer this to typing it in the message because I want to render it to its own database column.

My startup looks like this:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddNLog();
        env.ConfigureNLog("NLog.config");

My NLog configuration:

<target xsi:type="File" name="infolog" fileName="${basedir}/logs/info-${shortdate}.log"
        layout="${longdate}|${level}|${callsite:className=true:methodName=true}|${machinename}|${message}" />

called like this:

Logger.LogInformation("Information: User > Get");

Alas, the output is always:

2016-06-20 16:00:03.4458|Info|Microsoft.Extensions.Logging.Logger.Log ...

Is there a way using the Microsoft logging extensions and NLog to get the class/method name where the log was written?


原文:https://stackoverflow.com/questions/37931013
2021-12-03 18:12

满意答案

我刚刚使用Owin + NLog遇到了这个问题,我发现你需要告诉NLog“ 忽略 ”那些日志包装器 ,这可以通过使用LogManager.AddHiddenAssembly来完成,在我的情况下我只需要将它添加到我的Startup类中:

LogManager.AddHiddenAssembly(typeof(NLogFactory).Assembly);
LogManager.AddHiddenAssembly(typeof(LoggerExtensions).Assembly);

在你的情况下,我认为它应该是:

LogManager.AddHiddenAssembly(typeof(Microsoft.Extensions.Logging.Logger.Log).Assembly);

我没有测试它,但它可以指向正确的方向。

希望能帮助到你。


I have a solution. Update the package to the lastest, 1.0.0-rtm-alpha3

Check the dependencies. If you see 4.3.4, you need to tweak it. enter image description here

  1. Find the package .nuspec file.

enter image description here

  1. Open the file in Notepad.
  2. Edit the file, and change the NLog version to 4.3.5 enter image description here

  3. Restore packages. This will update the dependency in your project. It should work as expected now.

相关问答

更多

.NET Core RC2 - NeutralResourcesLanguageAttribute(.NET Core RC2 - NeutralResourcesLanguageAttribute)

包含[NeutralResourcesLanguage]属性, 因为您要求将其包含在内 ,方法是在project.json中设置"language": "en-US" 。 如果您不想依赖System.Resources.ResourceManager包,请从project.json中删除该行。 The [NeutralResourcesLanguage] attribute is included, because you're asking for it to be included, by s...

ASP.NET Core RC2身份库数据库架构迁移(ASP.NET Core RC2 Identity Database Schema Migrations)

对于测试场景,您可以在启动期间的某处使用context.Database.EnsureCreatedAsync() 。 确保您正在使用此模式 (暂时),而不是直接在configure中注入它,以避免在启动期间出现问题。 为了将来参考,从MusicStore示例应用程序复制代码部分。 using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope()) { var...

Asp.net核心1.0 RC2是否支持编译预处理?(Does Asp.net core 1.0 RC2 support compilation preprocess?)

根据Muhammad Rehan Saeed在此问题的后续回答中,从ASP.NET Core 1.0 RC2中删除了Razor预编译MVC6 是否支持预编译视图? Razor pre-compilation was dropped from ASP.NET Core 1.0 RC2 according to Muhammad Rehan Saeed in a followon answer to this question Does MVC6 support Precompiled Views?

ASP.NET Core RC2发布工具(ASP.NET Core RC2 Publish Tooling)

我刚遇到同样的问题。 在project.json文件中,您可以添加发布时包含的文件/文件夹。 标准它只包括appsettings.json。 我还添加了appsettings。*。json,因此在发布时会包含所有环境的设置。 不确定这是否是正确的新方法,但确实有效。 "publishOptions": { "include": [ "wwwroot", "Views", "appsettings.json", "appsettings.*...

ASP.NET Core RC2是否仍然依赖于DNX(Does ASP.NET Core RC2 still rely on DNX at all)

.NET Core RC2和ASP.NET Core根本不依赖于DNX。 Afair在上个月有一个兼容层,但这也应该消失了。 如果您的项目使用RC2构建,那么您可以安全地卸载所有ASP.NET 5工具(dnx,dnvm,...)并删除它们的缓存。 同时删除nuget缓存不会损害并减少空间(因为实际部件将在下次机会时恢复)。 您在Visual Studio中的问题是,很可能ASP.NET的VS工具仍然存在。 我在卸载它们时遇到了问题,但一旦完成,您可以使用Visual Studio而不会遇到DNX或...

如何使用nlog和asp.net core rc2获得可用的$ {callsite}(How to get a usable ${callsite} using nlog and asp.net core rc2)

我刚刚使用Owin + NLog遇到了这个问题,我发现你需要告诉NLog“ 忽略 ”那些日志包装器 ,这可以通过使用LogManager.AddHiddenAssembly来完成,在我的情况下我只需要将它添加到我的Startup类中: LogManager.AddHiddenAssembly(typeof(NLogFactory).Assembly); LogManager.AddHiddenAssembly(typeof(LoggerExtensions).Assembly); 在你的情况下,...

在ASP.Net Core RC2中添加SQLite(Adding SQLite in ASP.Net Core RC2)

这似乎是一个文档问题,有太多的代码示例显示了AddSqlite()的用法,实际上这需要通过DbContextOptionsBuilder类来完成。 所以: services .AddEntityFramework() .AddDbContext<MyDbContext>( options => { options.UseSqlite(connection); }); 作为替代方法,您可以覆盖MyDbConte...

ASP.NET Core RC2和.NET 4.5.1应用程序之间的共享cookie身份验证(Shared cookie authentication between ASP.NET Core RC2 and .NET 4.5.1 apps)

结合https://github.com/GrabYourPitchforks/aspnet5-samples/tree/dev/CookieSharing并在Asp.Net Core 1(MVC6)和MVC 5应用程序之间共享身份验证cookie,我能够提出一个可行的解决方案。 我不知道这是否是“正确”的方法,但它确实有效,所以这里有: 在两个应用程序中使用nuget-package Microsoft.Owin.Security.Interop 1.0.0-rc2-final 。 使用Data...

asp net core 1 RC2 AccountController注入(asp net core 1 RC2 AccountController injection)

在您的Startup.cs您将看到对此方法的调用 services.AddIdentity<ApplicationUser, IdentityRole>() 阅读@AndrésRobinet建议的依赖注入链接后,您实际上可以看到服务的连接位置。 这个扩展方法存在于`IdentityServiceCollectionExtensions中 - 然后你可以去查看这个方法调用的源代码(.NET core在github上): AddIdentity方法的第67行 services.TryAddScope...

在asp.net核心RC2中使用swagger(Using swagger in asp.net core RC2)

它适用于.net 4.5。 检查这个project.json { "dependencies": { "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final", "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final", "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final", ...

相关文章

更多

Chapter 9 - Securing Your Application -- Professional ASP.NET MVC 1.0

Overview Let's face it: security isn't sexy. Most ...

asp.net 列表控件

BulletedList 控件 (“BulletedList”控件创建一个无序或有序(编号)的项列表, ...

AMF: ASP.NET Mobile Framework

ASP.NET移动框架(AMF)是一种最常用的平板电脑和智能手机上Web应用程序的框架,基于jQuer ...

solr.xml 之core

转自 solr中文网 每个 core 指定一个 SolrCore,core 是 cores 的 ...

asp.net mvc 微信开发随笔(1)

这几天一直在看基于微信平台的系统开发,虽然微信并不复杂,但没有搞过,还是有点摸不着北的。 不过还好,经 ...

微信公众平台开发(ASP.NET)

运行环境 .NET 准备工作 1.在微信公众平台申请开发者。 2.功能页面完成后上传至 ...

org.apache.solr.common.SolrException: No such core: core0

删除掉E:/Java Projects/fulltextsearch/WebRoot/WEB-INF/ ...

Full-Text Search in ASP.NET using Lucene.NET

This post is about the full-text search engine ...

微信公众平台开发小记(ASP.NET)

微信的好东西,提供了很大的平台去发挥,公司最近推出微信公众账号,也接触了一些东西, 最终决定用asp. ...

solr 1.4.0 multi core deploy

i cost one day and half to accomplish it.i read all ...

最新问答

更多

将十六进制的字符串转换为字符串(Convert hex-encoded String to String)

您希望将十六进制编码的数据用作AES密钥,但数据不是有效的UTF-8序列。 您可以将其解释为ISO Latin编码中的字符串,但AES(key: String, ...)初始化程序将该字符串转换回其UTF-8表示形式,也就是说,您将从开始时获得不同的关键数据。 所以你不应该把它转换成字符串。 使用 extension Data { init?(fromHexEncodedString string: String) } 方法从Swift中进行十六进制/二进制字符串转换,将十六进制编码的

将friendly_id添加到用户模型后,登录后的友好转发不起作用(Friendly forwarding after login doesn't work after adding friendly_id to the user model)

在应用程序控制器中,将redirect_back_or(path)方法更改为此方法。 def redirect_back_or(path) redirect_to session[:forwarding_url] || path session.delete(:forwarding_url) end 你有redirect_to request.referer之前负责将你重定向到最后一个url,即login_url。 我不知道为什么你要定义两个不同的方法

Qt + VS2010:由于 .dll从您的计算机丢失,程序无法启动(Qt + VS2010: The program can't start because .dll is missing from your computer)

您可能需要将有问题的DLL复制到您的可执行文件所在的文件夹中,或者确保DLL位于系统PATH中的文件夹中。 You likely need to copy the DLLs in question to the folder your executable is in, or ensure that the DLLs are located in a folder in the system's PATH.

AutoFixture使用内部setter创建属性(AutoFixture create property with internal setter)

理想情况下 ,测试不应该与类的internal成员交互,因为它们明确地从其公共API中排除 。 相反,这些成员将通过公共API启动的代码路径间接测试。 但是,如果在您的特定情况下这不可行,则可能的解决方法是从测试中明确地为内部属性赋值 。 您可以通过以下两种方式之一来实现: 通过使用InternalsVisibleTo属性将程序集中的所有内部成员公开给测试项目。 通过在特定接口中表示类的可修改状态并明确地实现它。 在您的示例中,选项1将是: // [assembly:InternalsVisib

使用Trigger.IO/PhoneGap在UIWebView中使用focus()事件自动显示键盘(Show keyboard automatically with focus() event in UIWebView using Trigger.IO/PhoneGap)

访问UIWebView不是我们在当前版本的插件中正确公开的东西(但我们很快就会支持)。 现在,如果您想尝试一下,可以添加 extern UIWebView *webView; 在插件文件的顶部,这将使您的API方法中的变量webView可用。 这将很快停止工作,所以我建议你现在只用它来测试一下。 2012年10月更新 : 该应用程序的Web视图现在通过ForgeApp : http : ForgeApp 例如: [ForgeApp sharedApp].webView Access to t

ASP.NET MVC控件(ASP.NET MVC Control)

您可以使用RadComboBox以及此处找到的此telerik社区项目提供的一些小调整。 应该在MVC中都能正常工作。 You can use the RadComboBox along with a little tweaking as provided for by this telerik community project, found here. Should all work fine in MVC.

在后期保存上下文 - 将指针保存到上下文?(Saving Context At a Later Stage - Saving Pointer To Context ? Core Data)

是的,您可以在循环后保存上下文。 它比每次迭代中的保存要好得多。 如果你看一下MagicalRecord src,你会看到MR_contextForCurrentThread总是为相同的线程返回相同的上下文,如果没有上下文的线程,MagicalRecord会创建它。 此外,您不需要传递上下文[_entityClass createInContext:context] ,只需要[_entityClass MR_createEntity] - 它将在当前线程的上下文中创建 Yes, you can

tinyMce函数用于确定弹出窗口是否已打开(tinyMce function to determine if popup is already open)

这是我要去的解决方案: 我似乎已经确认: - windowManager.open()不会像window.open()那样返回对窗口的引用 - windowManager没有内置方法来限制可以打开的实例数。 但它确实有一种方法可以将onClose函数添加到插件窗口:ed.windowManager.onClose.add(function(){alert('Closing!');}); 所以我将在onClick代码中使用一个变量来跟踪弹出窗口是否已被打开和关闭。 onClose函数将该变量标记为

使用nil调用Document.find在mongodb中无效(Calling Document.find with nil is invalid in mongodb)

OrderController #new调用OrderController#current_cart,它运行Cart.find(session [:cart_id])。 在会话开始时没有:cart_id,即session [:cart_id]为nil,你得到上面的Mongoid :: Errors :: InvalidFind异常。 请注意,当您正在抢救ActiveRecord :: RecordNotFound时,您的救援子句不会挽救该异常。 您正在使用Mongoid,而不是ActiveRec

在函数中返回postgresql查询结果(Return postgresql query result in a function)

假设您正在使用nodejs和pg模块。 正如您所说,由于查询功能是异步的,您无法直接将结果返回给调用者。 传统上,在nodejs中,调用者传递一个回调函数来处理结果或错误(如果有的话)。 在Kotlin中,这看起来像: client.query(MY_QUERY_TEMPLATE, params) { err, result -> if (err != null) { // do something with the error }