所以我最近开始构建一个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) 我正在使用 EF Core 2.0 在我的 ASP.NET Core 项目中添加迁移。我在包管理器控制台中运行了 'Add-Migration 'migrationName` 命令。迁移已成功添加到我的迁移文件夹中,但是,在尝试更新快照时出现此错误:
拒绝访问路径“C:\path\to\snapshot\DbContextModelSnapshot.cs”。
现在我的迁移文件夹中有一个新的迁移,但有一个旧的快照,因为它目前无法更新。迁移与快照保存在同一文件夹中,并且所有用户都对该文件夹具有读/写访问权限。
我该如何解决?
我正在进行异步函数的单元测试,该函数将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) 我最近将日志记录添加到了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)
这导致将名称空间和类添加到日志中,现在仅缺少该方法
我有一种方法可以将 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”异常。
我一直在寻找为我的具体情况创建一个正则表达式.最远的我来自我对Regex的有限知识,并且通过在StackOverflow上搜索是这个正则表达式:
^[pP][a-zA-Z0-9- ]*
Run Code Online (Sandbox Code Playgroud)
我正在寻找强制字符串的正则表达式:
应与正则表达式匹配的字符串示例:
我正在寻找什么样的正则表达式?我正在使用的语言是C#
使用log4net,可以在运行时通过更改app.config文件来更改日志记录设置。
<add key="log4net.Config.Watch" value="True" />
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:是否可以为Serilog做到这一点?
我已经阅读了LoggingLevelSwitch()类,但看起来只能通过代码进行更改。现在当然可以自己编程了,但是我正在寻找Serilog编写的解决方案。
我想验证视图模型中的属性以匹配正则表达式。
视图模型:
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) 我已经有一个数据库,我的几个项目用于身份验证,我有一个特定于我当前项目的数据库.我目前正在使用EF Core开发ASP.NET Core 2.0项目.现在我想知道是否可以将身份验证添加到我当前的项目中,它将使用现有的身份验证数据库但仍然使用它自己的数据库来存储数据.
c# ×8
asp.net-core ×4
logging ×3
serilog ×3
moq ×2
regex ×2
.net ×1
asp.net ×1
entity-framework-migrations ×1
mocking ×1
snapshot ×1
stack-trace ×1
stream ×1
unit-testing ×1
validation ×1