场景:ASP.NET MVC 6 Web 应用程序。
这是导入的包project.json:
"Serilog": "2.3.0",
"Serilog.Extensions.Logging": "1.3.1",
"Serilog.Sinks.RollingFile": "3.2.0",
"Serilog.Settings.Configuration": "2.2.0"
Run Code Online (Sandbox Code Playgroud)
这里是appsettings配置
"Serilog": {
"Using": [ "Serilog.Sinks.RollingFile" ],
"MinimumLevel": {
"Default": "Verbose",
"Override": {
"Microsoft": "Warning",
"Microsoft.AspNetCore.Identity": "Debug",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"path": "logger-{Date}.log",
"outputTemplate": "{Timestamp:o} [{Level:u3}] ({Application}/{MachineName}/{ThreadId}) {Message}{NewLine}{Exception}",
"fileSizeLimitBytes": 16384
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Properties": {
"Application": "Sample"
}
},
Run Code Online (Sandbox Code Playgroud)
这是Startup构造函数
var builder = new ConfigurationBuilder()
.SetBasePath( _environment.ContentRootPath …Run Code Online (Sandbox Code Playgroud) 我正在使用 Serilog 接收器Serilog.Sinks.Email。我收到了电子邮件。不幸的是也有“信息”。如果是警告错误或致命错误,我想先收到电子邮件。
有没有办法设置这个?“信息”不应再通过电子邮件发送。但是应该将信息重新写入 .txt 文件。我希望收到警告、错误或致命的电子邮件。
Log.Logger = new LoggerConfiguration()
.WriteTo.RollingFile("logs\\log.txt")
.WriteTo.Email(
fromEmail: "LOG",
toEmail: "ghost-user@ghost.com",
mailServer: "exchange")
.CreateLogger();
Log.Information("++ I'm starting logging ++");
Log.Error("Only that should arrive in the e-mail");
Run Code Online (Sandbox Code Playgroud) 我们的旧日志框架 (.NET 4.5) 将迭代 Exception.data 并记录每个 Exception.data 键值。记录与当前异常相关的上下文道具非常好。有没有办法配置 Serilog 来记录 Exception.data 键值?
序列号 2
我创建了一个自定义的 JSON Formatter,它扩展了 ITextFormatter 并尝试将它添加到 appsetting.json 中,如下所示:
"WriteTo": [
{
"Name": "Console",
"Args": {
"formatter": "CustomizedJSONFormatter"
// "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
}
}
]
Run Code Online (Sandbox Code Playgroud)
默认 jsonFormatter 工作正常,如注释行所示。但是如果我想添加自定义的,我会得到一个错误:InvalidCastException: Invalid cast from 'System.String' to 'Serilog.Formatting.ITextFormatter'。
有没有办法解决这个问题?
谢谢!
我有一个 ASP.Net Core 2 Web 应用程序,我试图将 SeriLog 配置为以 JSON 格式输出,通过 appsettings.json 文件进行配置。我不能让它与标准 Serilog.Formatting.Json.JsonFormatter 或紧凑的 Serilog.Formatting.Compact.CompactJsonFormatter 一起使用。
我看到有一个类似的问题问在这里,但似乎是使用appsettings.json没有确凿的答案,而线程已经平静了一年多(我没有足够的信誉评论轻移进一步答复)。
我正在使用以下 SeriLog 包:
我的 appsettings.json 文件的 SeriLog 部分显示:
"Serilog": {
"Using": ["Serilog.Sinks.RollingFile"],
"MinimumLevel": {
"Default": "Verbose",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"pathFormat": "C:\\Logs\\MLSBPortal-{Date}.txt",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
"restrictedToMinimumLevel": "Debug",
"retainedFileCountLimit": "10",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff …Run Code Online (Sandbox Code Playgroud) 我一直在研究如何使用 Serilog 写入 Azure 日志流。我也在这里找到了一些答案;例如,一个答案是建议登录到特定文件夹 ( home\LogFiles\http\...)中的文件,但它似乎对我不起作用。
我尝试使用跟踪和调试接收器,但在 Azure 日志流中看不到我的消息。
让我更困惑的是,即使使用System.Diagnostics.Debug或System.Diagnostics.Trace也不起作用。
所以,也许有两个问题:
不用说,我在 Azure 应用服务中启用了“诊断日志”。
任何帮助真的很感激,
谢谢
我们有一个 aspnetcore 应用程序,我们有一个健康检查,每 x 秒向一个端点发出请求。我们的 API 使用 serilog,日志级别信息记录对 API 的每个请求。
我的问题是:我们如何过滤以从对特定端点发出的日志请求中排除?
举个例子,这是我们今天的日志代码:
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
.Enrich.FromLogContext()
.Filter.ByExcluding(c => c.MessageTemplate.Text.Contains("Request"))
.WriteTo.Console()
.WriteTo.RollingFile(hostingContext.Configuration["log-path"]))
.Build();
Run Code Online (Sandbox Code Playgroud)
今天我们只能过滤所有请求。我们如何过滤特定的端点请求?
我创建了一个 .Net 类库 (4.6.2) 并创建了由其他接口(如控制台应用程序)调用的 serilog 实现。现在,当我使用文件接收器类型时,日志被写入文件,但使用 MSSQL 接收器,它没有这样做。使用 autoCreateTable 选项提供的列选项创建日志表
ILogger logger = new LoggerConfiguration()
.WriteTo.MSSqlServer(connectionString,
tableName,
autoCreateSqlTable: autoCreateSqlTable,
restrictedToMinimumLevel: LogEventLevel.Verbose,
columnOptions: GetSQLSinkColumnOptions(),
batchPostingLimit: batchPostingLimit)
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
我还启用了 serilog 的自我记录,但没有显示任何异常。没有找到任何有用的解决方案。
然而,日志表正在生成。我已经检查了用户的权限,并且也有正确的权限。
下面是代码的快照。
public static class GenericLogger
{
private static ILogger _usageLogger;
private static ILogger _errorLogger;
static GenericLogger()
{
var logTypes = LogConfigurationHelper.GetLogTypes();
if (logTypes != null && logTypes.Count > 0)
{
foreach (var logType in logTypes)
{
ConfigureLogger(logType.Id); // Intitalizes logs based on
//configuration.
}
}
Serilog.Debugging.SelfLog.Enable(msg =>
{
Debug.Print(msg); …Run Code Online (Sandbox Code Playgroud) 我将 Serilog 配置为在具有 ASP.NET 核心(运行 Core 2.1)的 WebApi 上写入 MSSQL 表和文件(以尝试确定发生了什么)。
我startup.cs按如下方式添加 Serilog 日志;
public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var log = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.MSSqlServer(
DbGlobals.DevDatabase, "Logs", schemaName:DbGlobals.SchemaName)
.WriteTo.File("Logs\\Serilog\\log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
loggerFactory.AddSerilog(log);
Run Code Online (Sandbox Code Playgroud)
其中DbGlobals.DevDatbase和Dbglobals.SchemaName是从配置中读取的字符串。
更新作为参考,这些值是;
DbGlobals.Schema = "MySchema";
DbGlobals.DevDatabase = "Data Source=xx.xx.xx.xx;Initial Catalog=DevDatabase;Integrated Security=False;Persist Security Info=False;User ID=LOGIN;Password=PASSWORD;MultipleActiveResultSets=true;";
Run Code Online (Sandbox Code Playgroud)
当使用 IIS Express 在本地运行并在两者debug和release配置下运行时,两个日志记录功能都可以正常工作。例如在我的控制器中;
public class ReviewPublicController : Controller
{
private readonly IReviewService _service;
private readonly IMapper …Run Code Online (Sandbox Code Playgroud) 今天在工作中,我被要求在我现有的 ASP.NET MVC(不是 Core)项目中添加一些基本的日志记录功能。我被告知为此使用 Serilog。
但是,我没有找到任何合理的在 MVC 中使用 Serilog 的例子,所有链接都简单地引用了 Core。我试图自己做所有事情。安装所有必要的包(Serilog、Serilog.Sinks.File)后,我创建了一个“Logs”文件夹并尝试了这个:
var log = new LoggerConfiguration()
.WriteTo.File("~/Logs/log.txt")
.CreateLogger();
log.Information("Hello from Serilog!");
Run Code Online (Sandbox Code Playgroud)
我希望在文件夹中看到一个新文件,但没有。我还尝试使用更简单的路径“log.txt”并抢先在此文件夹中创建一个文件,但没有帮助。
MVC 是否可能根本不支持 Serilog?如果是,将某些内容记录到文本文件中的简单方法是什么?
serilog ×10
c# ×6
.net-core ×2
asp.net-core ×2
logging ×2
asp.net ×1
asp.net-mvc ×1
azure ×1
email ×1
sink ×1