我使用Serilog并将事件记录到SQL Server(使用Serilog,Serilog.Framework.Logging和Serilog.Sinks.MSSqlServer库).
作为MVC6应用程序的一部分,当我记录事件并将选项设置为包含属性时,我在XML列中看到了一些其他属性.
如果我发出类似以下声明的内容:
Log.Information("{Property1}", "Value1");
Run Code Online (Sandbox Code Playgroud)
我在Properties列中看到如下内容:
<properties>
<property key="Property1">Value1</property>
<property key="SourceContext">WebApplication4.Controllers.BaseController</property>
<property key="ActionId">1b9f9c7e-7c5c-4b14-a30d-99f2ebc88c51</property>
<property key="RequestId">80000191-0001-f000-b63f-84710c7967bb</property>
</properties>
Run Code Online (Sandbox Code Playgroud)
这些额外的属性来自哪里?我可以设置与这些类似的其他属性吗?如果是这样,我在哪里设置它们?如果我将它们包含在消息中(类似于上面的Property1),我可以设置其他属性,但我可能希望包含消息中没有的其他属性.
我有一个配置了serilog的ASP.Net5 Web应用程序。在我的家庭控制器中,我打印警告,错误,详细和调试消息,但是在我的控制台中仅显示警告,错误和详细消息。缺少调试消息我的配置是:
public class Startup
{
public Startup(IHostingEnvironment env)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.ColoredConsole()
.WriteTo.RollingFile(Path.Combine(env.WebRootPath, "log-{Date}.txt"))
.CreateLogger();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddSerilog();
}
}
Run Code Online (Sandbox Code Playgroud)
我通过依赖项注入来消耗记录器,如下所示:
public class HomeController : Controller
{
private readonly ILogger _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public async Task<IActionResult> Index()
{
_logger.LogWarning("Warning");
_logger.LogVerbose("Verbose");
_logger.LogDebug("Debug")
_logger.LogError("Error");
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
我的日志窗口显示:
2016-04-13 12:41:24 [Warning] Warning
2016-04-13 12:41:24 [Debug] Verbose
2016-04-13 12:41:24 [Error] Error
Run Code Online (Sandbox Code Playgroud)
还有其他调试消息与ASP.Net函数中的构建有关。
谁能告诉我我在做什么错?谢谢。
我正在尝试添加SeriLog设置,例如最低日志级别和配置文件中的滚动文件路径。标准是这样硬编码它们:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.RollingFile("C:/LogFiles/log-{Date}.txt")
.CreateLogger();
}
Run Code Online (Sandbox Code Playgroud)
基本上,我需要能够从Startup构造函数中的appsettings.json访问值。像这样:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Is((LogEventLevel)Enum.Parse(typeof(LogEventLevel),
Configuration.GetValue<string>("AppSettings.MinimumLoggingLevel")))
.WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings.RollingFilePath"))
Run Code Online (Sandbox Code Playgroud)
我Configuration.GetValue在另一篇SO文章中找到了该语法,但始终返回null。
我在带有RollingFile的.NET Core应用程序上使用Serilog。我想知道是否存在不同的文件名占位符?我只知道{日期}。
例如,我有类似的代码
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.RollingFile("Logs/{Date}.log")
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
文件名还有其他选项吗,例如{Date}?我想按小时查看日志文件。
将serilog实施到我们的项目中.我们已经实现了AspNetCoreRateLimit来解决对API的调用.该项目是.Net Core项目,但由于某些依赖性而构建了针对Net461的项目.
在serilog之前,api很好.
现在安装了serilog,我们收到了一个错误.
从调用之前的错误起泡,直到引入了serilog.
services.Configure<IpRateLimitOptions>(_configuration.GetSection("IpRateLimiting"));
Run Code Online (Sandbox Code Playgroud)
Startup()具有:
Log.Logger = new LoggerConfiguration()
.WriteTo.File("Logs/FSCPAPI-{Date}.log")
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
以下是在Configure()中
loggerfactory.AddSerilog();
Run Code Online (Sandbox Code Playgroud)
来自services.Configure <>()的错误是:
System.TypeLoadException发生HResult = 0x80131522消息=方法'get_Name'类型'Microsoft.Extensions.Options.ConfigurationChangeTokenSource`1'来自程序集'Microsoft.Extensions.Options.ConfigurationExtensions,Version = 1.1.2.0,Culture = neutral,PublicKeyToken = adb9793829ddae60 '没有实施.Source = Microsoft.Extensions.Options.ConfigurationExtensions StackTrace:在C的NGB.IFS.PurchApp.Services.Startup.ConfigureServices(IServiceCollection服务)的Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure [TOptions](IServiceCollection services,IConfiguration config)中:\Users\saynort\Documents\Repos \ngb.ifs.purchapp \ngb.ifs.purchapp\NGB.IFS.PurchApp.Services\Startup.cs:第86行
我安装了serilog,serilog.extensions.logging和serilog.sinks.file Nuget软件包.
在WriteTo.Observer方法中,我想传递格式化日志消息,因为它是使用格式化模板呈现的。我该怎么做?谢谢
class Program
{
static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.LiterateConsole()
.WriteTo.RollingFile("log-{Date}.txt")
.WriteTo.Observers(events => events.Do(evt => { Console.WriteLine($"Observed event {evt.MessageTemplate.Text}"); }).Subscribe())
.WriteTo.Observers(events => events.Do(evt => { LogHandler(evt.MessageTemplate.Text);}).Subscribe())
.CreateLogger();
Log.Logger.Information("Log msg from Main");
Console.ReadLine();
}
public static void LogHandler(string logMsg)
{
Console.WriteLine("LogHandler: " + logMsg); //I want the complete formatted log message as it would appear in a file i.e. "[10:20:14 INF] Log msg from DoNothing"
}
}
Run Code Online (Sandbox Code Playgroud) 之前,我曾直接使用App见解来进行应用程序日志记录,而且我已经看到.Net核心平台还创建了跟踪事件,这些事件都涉及到App见解。
在一个新的.Net核心API应用程序中,我想使用Serilog进行应用程序日志记录,并使用App Insight来存储和可视化日志事件。我想知道:
如何继续获取.Net核心.created跟踪事件以了解App见解?
如何将关联ID从应用程序传递到.Net核心创建的跟踪事件?
App洞察门户中的端到端交易功能会一起显示所有事件吗?对我来说,了解并密切注意SQL调用的延迟非常重要。
serilog azure-application-insights .net-core asp.net-core-2.0
事实证明,该问题与
NLogASP.NET日志记录系统无关。日志配置正确,但是Debug由于配置错误,构建服务器正在将构建发布到生产中。
我试图在我的ASP.NET Core 2.0(SDK 2.1.401)项目中设置第三方记录器。到目前为止,我曾尝试Serilog和NLog。但是我对两个都有同样的问题。总结一下问题,
dotnet run(例如,在Development环境中)dotnet MyApplication.dll(即在Production环境中)却没有。"Logging"为Development环境部分定义任何内容appsettings.Development.json。下面描述的问题是针对的NLog。我尝试过SeriLog并遇到相同的问题。
这是来自的相关部分 Program.cs
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.ConfigureLogging((env, logging) =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog()
.Build();
Run Code Online (Sandbox Code Playgroud)
注意我已经清除了所有提供程序并添加NLog了nlog.config文件定义:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.ConfigureLogging((env, logging) =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
}) …Run Code Online (Sandbox Code Playgroud) 我正在使用SeriLog登录基于IdentityServer3的身份验证服务。我只是用serilog.sinks.file插件替换了serilog.sinks.literate插件,以便获得File插件提供的滚动文件功能。当在Startup中将File插件与以下配置代码一起使用时。 CS,它按我的预期工作。(我仅使用RolloverInterval.Minute进行测试。部署代码时,我将切换到RolloverInterval.Day。)
Log.Logger = new LoggerConfiguration()
.WriteTo.File("E:\\Site\\AuthSvc\\Trace.log", rollingInterval: RollingInterval.Minute, retainedFileCountLimit: 10)
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
就像我说的那样,它可以按预期工作,每分钟创建一个新文件。
现在,我尝试使用serilog.settings.appsettings插件在appSettings中而不是在代码中管理所有配置。所以我将上面的代码更改为:
Log.Logger = new LoggerConfiguration()
.ReadFrom.AppSettings()
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
我在web.config appSettings中包含以下内容:
<add key="serilog:minimum-level" value="Debug"/>
<add key="serilog:using:File" value="Serilog.Sinks.File"/>
<add key="serilog:write-to:File.path" value="E:\Site\AuthSvc\Trace.log"/>
<add key="serilog:write-to:File.rollingInterval" value="RollingInterval.Minute"/>
<add key="serilog:write-to:File.retainedFileCountLimit" value="10"/>
Run Code Online (Sandbox Code Playgroud)
当我以上述配置运行服务时,出现错误消息“未找到请求的值'RollingInterval.Minute'”。任何RollingInterval值都会发生类似的错误。
如果我删除了最后两个appSettings,它可以正常工作。我是在做错什么,还是appSettings插件不支持文件接收器插件的滚动文件功能?
您好,我在ASP NET Core application设计接口时遇到了问题。我正在使用serilog,当请求进入控制器时,它会收到一个GUID。我试图找到一种优雅的方法来跟踪呼叫中的各个请求,而又不包括GUID在我的所有接口中。
public interface IService
{
Task GetSomething(string corellationId); //how do i get rid of this id
}
public interface ISomeOtherService
{
Task DoSomethingElse(string corellationId); //how do i get rid of this id
}
public class SomeController:Controller
{
public IService someService {get;set;}
[HttpGet]
public Task Get()
{
string corellationId=Guid.NewGuid().ToString();
Log.Information($"[{corellationId}] - Request started");
try
{
Log.Information($"[{corellationId}] - Get");
await this.someService.GetSomething(corellationId);
}catch(Exception ex)
{
Log.Error($"[{corellationId}] - Get",ex.Message);
}
}
}
public …Run Code Online (Sandbox Code Playgroud)