首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模拟NLog的记录器并读取已记录的消息

模拟NLog的记录器并读取已记录的消息
EN

Stack Overflow用户
提问于 2021-02-02 06:43:57
回答 1查看 838关注 0票数 2

我使用NLog 4.5.11进行日志记录,使用Moq4.10.1进行模拟。

我有一个中间件,它使用NLog将异常细节写入日志文件。

我需要在API项目中对中间件进行单元测试,并检查记录的消息是否有合适的值。

我是这样声明异常记录器的:

代码语言:javascript
运行
复制
private static Logger _exceptionLogger = LogManager.GetLogger("ExceptionLogger");

im是如何在中间件构造函数中初始化Logmanager的:

代码语言:javascript
运行
复制
 LogManager.LoadConfiguration(String.Concat(Directory.GetCurrentDirectory(), "/nlog.config"));

下面是im记录异常消息的方式:

代码语言:javascript
运行
复制
_exceptionLogger.Error(exceptionMessage);

我们有什么办法可以做到这一点,而不实际写入和读取文件中的日志消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-02 07:10:15

建议在单元测试中使用记忆目标,而不是模拟记录器。

例如:

代码语言:javascript
运行
复制
// Arrange
var config = new NLog.Config.LoggingConfiguration();
var memoryTarget = new NLog.Targets.MemoryTarget();
memoryTarget.Layout = "${message}";   // Message format
config.AddRuleForAllLevels(memoryTarget);
LogManager.Configuration = config;

// Act
// Your call

// Assert
var logEvents = target.Logs;
// E.g. contains message in logEvents

PS:请注意,在上面的示例中使用了全局LogManager,因此不能并行运行测试。如果需要并行测试,则创建一个新的LogFactory并将LogFactory或已创建的记录器传递给您的类/方法。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66004805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档