小编Jer*_*oen的帖子

ASP.NET Core 2.0使用Serilog在抛出异常时记录堆栈跟踪

所以我最近开始构建一个asp.net核心应用程序,并且我正在使用SeriLog进行日志记录.这工作正常,直到最近我发现大多数情况下异常的堆栈跟踪没有转移到我的日志.我正在使用.WriteTo.RollingFile()方法在Startup.cs中的LoggerConfiguration中写入.txt文件,如此

public void ConfigureServices(IServiceCollection services)
{
    //add a bunch of services

    services.AddLogging(builder =>
    {
        builder.AddConsole();
        builder.AddDebug();

        var logger = new LoggerConfiguration()
            .MinimumLevel.Verbose()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
            .Enrich.WithExceptionDetails()
            .WriteTo.RollingFile(Configuration.GetValue<string>("LogFilePath") + "-{Date}.txt", LogEventLevel.Information,
                outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}")
            .CreateLogger();

        builder.AddSerilog(logger);
    });

    services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)

在我的loggerFactory中,我添加了这行代码的Serilog

loggerFactory.AddSerilog();
Run Code Online (Sandbox Code Playgroud)

我的BuildWebHost方法没有.UserSerilog(),如下所示:

public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
Run Code Online (Sandbox Code Playgroud)

这个方法作为MainProgram.cs 中我方法的最后一步被调用.阅读Serilog的文档,RollingFile的outputTemplate中的{Exception}也应该记录异常的堆栈跟踪.但是,例如我记录这样的错误(使用Microsoft.Extensions.Logging.ILogger)

_log.LogError("Exception thrown when trying to convert customer viewmodel to model or getting data from the database with id: " + id, …
Run Code Online (Sandbox Code Playgroud)

c# logging stack-trace serilog asp.net-core

8
推荐指数
1
解决办法
4077
查看次数

Access denied to ContextModelSnapshot while migrating

我正在使用 EF Core 2.0 在我的 ASP.NET Core 项目中添加迁移。我在包管理器控制台中运行了 'Add-Migration 'migrationName` 命令。迁移已成功添加到我的迁移文件夹中,但是,在尝试更新快照时出现此错误:

拒绝访问路径“C:\path\to\snapshot\DbContextModelSnapshot.cs”。

现在我的迁移文件夹中有一个新的迁移,但有一个旧的快照,因为它目前无法更新。迁移与快照保存在同一文件夹中,并且所有用户都对该文件夹具有读/写访问权限。

我该如何解决?

snapshot entity-framework-core entity-framework-migrations

7
推荐指数
1
解决办法
1617
查看次数

c#mocking IFormFile CopyToAsync()方法

我正在进行异步函数的单元测试,该函数将IFormFile列表转换为我自己的任意数据库文件类列表.

将文件数据转换为字节数组的方法是:

internal async Task<List<File>> ConvertFormFilesToFiles(ICollection<IFormFile> formFiles)
{
    var file = new File
    {
        InsertDateTime = DateTime.Now,
        LastChangeDateTime = DateTime.Now
    };
    if (formFile.Length > 0)
    {
        using (var memoryStream = new MemoryStream())
        {
            await formFile.CopyToAsync(memoryStream, CancellationToken.None);
            file.FileData = memoryStream.ToArray();
        }
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

该函数接收IFormFiles的ICollection,因此它是可模拟的.

现在我有这样的测试代码:

//Arrange
var fileConverter = new FilesConverter();
using (var fileStream = new FileStream("Files/uploadme.txt", FileMode.Open, FileAccess.Read))
{
    using (var memoryStream = new MemoryStream())
    {
        var newMemoryStream = new MemoryStream();
        fileStream.CopyTo(memoryStream);
        FormFileMock.Setup(f => f.CopyToAsync(newMemoryStream, CancellationToken.None)).Returns(Task.CompletedTask);
        // some …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq stream

5
推荐指数
3
解决办法
1717
查看次数

C#ASP.NET Core Serilog添加类名称和方法进行记录

我最近将日志记录添加到了ASP.Net Core项目中。当前,日志以以下格式写入.txt文件:

{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {消息} {NewLine} {Exception}

例如:

2017-11-30 13:58:22.229 +01:00 [信息]在数据库中创建的项目。

很好,但是我想输入要记录到该.txt文件的类的名称和方法。例如,当类A使用方法B向数据库中写入一些内容并将其记录下来时,我希望看到类似

ClassA.MethodB:在数据库中创建的项目

所有记录日志的类都将其Logger注入到其构造函数中,例如

public class ClassA
{
    private readonly ILogger _log;

    public ClassA(ILogger<ClassA> log){
        _log = log;
    }

    public void AddItemToDb(Item item){
        //Add item
        //On success: 
        _log.LogInfo("Added item to db.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我当前正在使用Serilog并使用以下LoggerConfiguration:

var logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
    .WriteTo.RollingFile(Configuration.GetValue<string>("LogFilePath") + "-{Date}.txt", LogEventLevel.Information)
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

如何将类和方法添加到日志中?

编辑

我向.WriteTo.Rollingfile()方法添加了一个自定义outputTemplate,如下所示:

"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}")
Run Code Online (Sandbox Code Playgroud)

这导致将名称空间和类添加到日志中,现在仅缺少该方法

c# asp.net logging serilog asp.net-core

5
推荐指数
2
解决办法
1万
查看次数

使用 Moq 在 Mock&lt;DbSet&lt;T&gt;&gt; 上模拟 ToListAsync

我有一种方法可以将 List 转换为 DbSet,我在模拟数据库上下文应返回的数据时使用该方法。例如:

MockedDatabaseContext.Setup(u => u.SomeTable).Returns(GetDbSet(ListOfItems));
Run Code Online (Sandbox Code Playgroud)

但是,我尝试编写单元测试的方法曾一度使用 ToListAsync 方法将 IQueryable 转换为列表。

有没有办法使用 Moq 框架在 ToListAsync 方法调用上进行设置?

我试过这个:

dbSet.Setup(d => d.ToListAsync(CancellationToken.None)).Returns((Task<List<T>>) Task.CompletedTask);
Run Code Online (Sandbox Code Playgroud)

但这会在上面的行中引发“ThrowIfSetupExpressionInvolvesUnsupportedMember”异常。

c# entity-framework moq mocking

5
推荐指数
0
解决办法
2808
查看次数

寻找具体的正则表达式

我一直在寻找为我的具体情况创建一个正则表达式.最远的我来自我对Regex的有限知识,并且通过在StackOverflow上搜索是这个正则表达式:

^[pP][a-zA-Z0-9- ]*
Run Code Online (Sandbox Code Playgroud)

我正在寻找强制字符串的正则表达式:

  • 以字母'p'或'P'开头,所以小写和大写
  • 不短于19个字符
  • 可能包含' - ','%20',''或'+'
  • 结束'0000'
  • 在'p'和四个零之间以及' - ','%20',''或'+'分隔符之间是字母数字

应与正则表达式匹配的字符串示例:

  • PLX000000000PQ50000
  • pLX000000000PQ50000
  • plx000000000pq50000
  • PLX-0000-0000-0PQ5-0000
  • PLX-0000-0000-0PQ50000
  • PLX + 0000 + 0000 + 0PQ5 + 0000
  • PLX%200000%200000%200PQ5%200000
  • PLX 0000 0000 0PQ5 0000

我正在寻找什么样的正则表达式?我正在使用的语言是C#

c# regex

5
推荐指数
1
解决办法
92
查看次数

Serilog相当于log4net.Config.Watch吗?

使用log4net,可以在运行时通过更改app.config文件来更改日志记录设置。

<add key="log4net.Config.Watch" value="True" />
Run Code Online (Sandbox Code Playgroud)

我的问题很简单:是否可以为Serilog做到这一点?

我已经阅读了LoggingLevelSwitch()类,但看起来只能通过代码进行更改。现在当然可以自己编程了,但是我正在寻找Serilog编写的解决方案。

.net c# logging serilog

5
推荐指数
1
解决办法
268
查看次数

RegularExpression Validation属性无法正常工作

我想验证视图模型中的属性以匹配正则表达式。

视图模型:

using System.ComponentModel.DataAnnotations;

namespace ProjectName.ViewModels
{
    public class ViewModel
    {
        [Required(ErrorMessage = "error message.")]
        [RegularExpression(@"[a-zA-Z0-9][/\\]$/img", ErrorMessage = "End with '/' or '\\' character.")]
        public string FilePath { get; set; }

        public ViewModel()
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

视图:

@model ProjectName.ViewModels.ViewModel
<form asp-action="EditPath" asp-controller="Files" id="EditFilePathForm">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="col-md-5">
        <div class="form-group">
            <div class="col-md-12">
                <label asp-for="FilePath" class="control-label"></label>
            </div>
            <div class="col-md-8">
                <input asp-for="FilePath" class="form-control"/>
                <span asp-validation-for="FilePath" class="text-danger"></span>
            </div>
            <div class="col-md-4">
                <p>@Model.FileName</p>
            </div>
        </div>
    </div>

    <div class="col-md-12 text-right">
        <hr />
        <button type="button" class="btn …
Run Code Online (Sandbox Code Playgroud)

c# regex validation asp.net-core

4
推荐指数
1
解决办法
3861
查看次数

ASP.NET Core 2.0使用两个数据库,一个用于身份验证,一个用于数据

我已经有一个数据库,我的几个项目用于身份验证,我有一个特定于我当前项目的数据库.我目前正在使用EF Core开发ASP.NET Core 2.0项目.现在我想知道是否可以将身份验证添加到我当前的项目中,它将使用现有的身份验证数据库但仍然使用它自己的数据库来存储数据.

c# authentication asp.net-core

2
推荐指数
1
解决办法
2016
查看次数