我找到了一个CodeProject,其中有一个如何使其工作的示例,但它不起作用.主要问题似乎是"Microsoft.Framework.Logging.NLog": "1.0.0-*"Nuget中似乎不存在包.我查看了这个StackOverflow问题并查看了它引用的GitHub示例,但它似乎包含相同的问题.
我试图让它自己工作,我提出的最好的是以下内容:
public class NLogLogger : ILogger
{
public NLogLogger()
{
new WebLoggerConfigurer().ConfigureDefault();
}
public void Log(LogLevel logLevel, int eventId, object state, Exception exception, Func<object, Exception, string> formatter)
{
// currently need the global:: for LogLevels because our namespace contains NLog in it. Is there a better naming convention we could use instead?
var ll = logLevel == LogLevel.Debug ? global::NLog.LogLevel.Debug
: logLevel == LogLevel.Verbose ? global::NLog.LogLevel.Trace
: logLevel == LogLevel.Critical ? global::NLog.LogLevel.Fatal …Run Code Online (Sandbox Code Playgroud) 我有一个简单的测试项目,尝试使用Microsoft Logging Extensions包测试NetCore 2.0.
我遇到的问题是,当我第一次运行我的应用程序时,它会按预期记录信息性消息.我遇到的奇怪行为是后续运行根本不会产生任何消息.
我的项目面向Net Core 2.0框架,并安装了以下NuGet包:
下面是我的示例代码我正在尝试使用以下日志:
using System;
namespace LoggingNetCore2
{
using Microsoft.Extensions.Logging;
class Program
{
static void Main(string[] args)
{
var loggerFactory = new LoggerFactory();
loggerFactory.AddConsole();
loggerFactory.AddDebug(); // <-- why is this needed for console logging?
var logger = loggerFactory.CreateLogger(typeof(Program));
logger.LogInformation("Hello, World!");
logger.LogTrace("trace");
logger.LogDebug("debug");
logger.LogWarning("warning");
logger.LogCritical("critical");
logger.LogError("errrrr");
//using (logger.BeginScope("MyMessages"))
//{
// logger.LogInformation("Beginning Operation...");
// logger.LogInformation("Doing something cool... please wait.");
// logger.LogInformation("Completed successfully.");
//}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行上面的操作时,我在控制台窗口上没有输出.任何可能会发生什么的想法都会浮现在脑海中?
我试过的事情:
我正在使用一个利用Simple Injector作为依赖注入器的项目.另一方面,该项目使用Microsoft.Extensions.Logging来记录某些类中发生的事件.
我的技术问题很容易解释.我想在我的DI中注册ILogger独立于正在调用的类T,但我需要从我的ILoggerFactory.CreateLogger<T>()方法中执行它,因为这将使用记录器配置Microsoft.Extensions.Configuration.
我需要使用这样的东西来实例我的记录器:
private Microsoft.Extensions.Logging.ILogger CreateLogger<T>()
{
var factory = this.ResolveService<ILoggerFactory>();
var logger = factory.CreateLogger<T>();
return logger;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式实现注射:
Container.Register(typeof(ILogger<>), typeof(Logger<>));
Run Code Online (Sandbox Code Playgroud)
这使我们可以解决类似的问题:
public class SomeApiController : ApiController
{
public SomeApiController(ILogger<SomeApiController> logger)
{
//logger is well instantiated, but doesn't got the configuration
logger.LogInformation("test log.");
}
}
Run Code Online (Sandbox Code Playgroud)
但正如我所说,这样做不会通过从Microsoft.Extensions.Logging.ILoggerFactory类中获得的配置,所以这没用.
有没有办法
ILogger<T>使用我的注册CreateLogger<T>?
c# dependency-injection simple-injector ms-extensions-logging
如何在Asp.Net 5 RC1中登录文件?我找不到Microsoft.Extensions.Logging的任何解决方案.有没有与.Net Core 5(DNX Core 5.0)兼容的解决方案?我也试图使用Serilog,但Serilog还不支持核心5.
我正在处理一个应用程序,我在Startup.cs部分类中遇到错误,我无法找到为什么会出现此错误:
以下方法或属性之间的调用不明确:Microsoft.Extensions.DependencyInjection.OptionsServiceCollectionExtensions.Configure(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action)Microsoft.Extensions.DependencyInjection.OptionsServiceCollectionExtensions.Configure(Microsoft.Extensions.DependencyInjection.IServiceCollection) ,System.Action)
我的两个部分Startup.cs类是
using Microsoft.Extensions.DependencyInjection;
using System.Security.Claims;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
namespace GiftUWish.WebAPI
{
public partial class Startup
{
private void SetServices(IServiceCollection services)
{
//PROFILE service and repository
services.AddScoped<IProfileService, ProfileService>();
services.AddScoped<IProfileRepository, ProfileRepository>();
////GIFT service and repository
services.AddScoped<IBankAccountService, BankAccountService>();
services.AddScoped<IBankAccountRepository, BankAccountRepository>();
//EVENT service and repository
services.AddScoped<ICreditCardService, CreditCardService>();
services.AddScoped<ICreditCardRepository, CreditCardRepository>();
//CREDIT CARD INFORMATION serice and repository
services.AddScoped<IPayPalService, PayPalService>();
services.AddScoped<IPayPalRepository, PayPalRepository>();
//CHIPPED IN serive and repository
services.AddScoped<IShippingAdressService, ShippingAdressService>();
services.AddScoped<IShippingAdressRepository, ShippingAdressRepository>();
//UNIT OF WORK
services.AddScoped<IUnitOfWork, UnitOfWork>();
//Authentication-Token , Header which contains information about …Run Code Online (Sandbox Code Playgroud) 我正在开发一个MVC6 Web应用程序,我是ASP.NET 5的新手.我可以看到Logging(Microsoft.Extensions.Logging)在ASP.NET 5中的许多地方(例如:AccountController.cs)使用默认的Web应用程序模板,但我无法弄清楚在何处配置创建的日志文件的路径.以下设置位于appsettings.json文件中.
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Verbose",
"System": "Information",
"Microsoft": "Information"
} }
Run Code Online (Sandbox Code Playgroud)
在本节中添加参数是否足够?如果是,参数名称是什么?如果没有,该怎么办?
以前我使用Log4Net,配置是在logger.config文件中完成的.
这个问题与史蒂文的答案有关 - 这里.他提出了一个非常好的记录器包装器.我将在下面粘贴他的代码:
public interface ILogger
{
void Log(LogEntry entry);
}
public static class LoggerExtensions
{
public static void Log(this ILogger logger, string message)
{
logger.Log(new LogEntry(LoggingEventType.Information,
message, null));
}
public static void Log(this ILogger logger, Exception exception)
{
logger.Log(new LogEntry(LoggingEventType.Error,
exception.Message, exception));
}
// More methods here.
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是创建代理Microsoft.Extensions.Logging的实现的正确方法是什么,以及在代码中稍后使用它的最佳方法是什么?