From 8cca1086d956ed84ae800eaeeda86654a2677011 Mon Sep 17 00:00:00 2001 From: Jijie Chen Date: Mon, 6 May 2019 18:13:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=BE=93=E5=87=BA=E7=9A=84=E6=96=B9=E5=BC=8F=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20JSON=20=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Logging/LoggerExtensions.cs | 10 ++-- .../Controllers/AccountController.cs | 56 +++++++++++-------- .../Controllers/CommonController.cs | 2 +- .../Controllers/ReplyController.cs | 14 ++--- .../Controllers/TopicController.cs | 18 ++---- .../Controllers/UserController.cs | 44 ++++++++------- src/Discussion.Web/Discussion.Web.csproj | 2 +- .../appsettings.Production.json | 16 ++++-- .../Controllers/AccountControllerSpecs.cs | 10 ++-- .../Specs/Controllers/ReplyControllerSpecs.cs | 6 +- .../Specs/Controllers/TopicControllerSpecs.cs | 10 ++-- 11 files changed, 100 insertions(+), 88 deletions(-) diff --git a/src/Discussion.Core/Logging/LoggerExtensions.cs b/src/Discussion.Core/Logging/LoggerExtensions.cs index 8b37a839..df4793f3 100644 --- a/src/Discussion.Core/Logging/LoggerExtensions.cs +++ b/src/Discussion.Core/Logging/LoggerExtensions.cs @@ -8,20 +8,22 @@ namespace Discussion.Core.Logging { public static class LoggerExtensions { - public static void LogModelState(this ILogger logger, string action, ModelStateDictionary modelState, string userName = null) + public static void LogModelState(this ILogger logger, string action, ModelStateDictionary modelState, int? userId = null, string userName = null) { var errorMessage = modelState.IsValid ? null : ApiResponse.Error(modelState).ErrorMessage; var resultDesc = modelState.IsValid ? "格式正确" : "数据格式不正确"; + var logLevel = modelState.IsValid ? LogLevel.Information : LogLevel.Warning; - logger.Log(logLevel, $"{action}{resultDesc}:{userName}:{errorMessage}"); + logger.Log(logLevel, $"{action}{resultDesc}:{{@Context}}", new {UserId = userId, UserName = userName, Result = errorMessage}); } - public static void LogIdentityResult(this ILogger logger, string action, IdentityResult result, string userName = null) + public static void LogIdentityResult(this ILogger logger, string action, IdentityResult result, int? userId = null, string userName = null) { var resultDesc = result.Succeeded ? "成功" : "失败"; var message = string.Join(";", result.Errors.Select(err => err.Description)); + var logLevel = result.Succeeded ? LogLevel.Information : LogLevel.Warning; - logger.Log(logLevel, $"{action}{resultDesc}:{userName}:{message}"); + logger.Log(logLevel, $"{action}{resultDesc}:{{@Context}}", new { UserId = userId, UserName = userName, Result = message}); } } } \ No newline at end of file diff --git a/src/Discussion.Web/Controllers/AccountController.cs b/src/Discussion.Web/Controllers/AccountController.cs index 0fbd54d5..27f94901 100644 --- a/src/Discussion.Web/Controllers/AccountController.cs +++ b/src/Discussion.Web/Controllers/AccountController.cs @@ -76,11 +76,11 @@ public async Task DoSignin( var logLevel = result.Succeeded ? LogLevel.Information : LogLevel.Warning; var resultDesc = result.Succeeded ? "成功" : "失败"; - _logger.Log(logLevel, $"用户登录{resultDesc}:用户名 {viewModel.UserName}:{result}"); + _logger.Log(logLevel, $"用户登录{resultDesc}:{{@LoginAttempt}}", new {viewModel.UserName, Result = result.ToString()} ); } else { - _logger.LogWarning($"用户登录失败:用户名 {viewModel.UserName}:数据格式不正确。"); + _logger.LogWarning("用户登录失败:{@LoginAttempt}", new {viewModel.UserName, Result = "数据格式不正确"}); } if (!result.Succeeded) @@ -122,14 +122,14 @@ public async Task DoRegister(UserViewModel registerModel) { if (!ModelState.IsValid) { - _logger.LogInformation($"用户注册失败:用户名 {registerModel.UserName}:数据格式不正确。"); + _logger.LogInformation("用户注册失败:{@RegisterAttempt}", new {registerModel.UserName, Result = "数据格式不正确"}); return View("Register"); } if (!_settings.CanRegisterNewUsers()) { const string errorMessage = "已关闭用户注册"; - _logger.LogWarning($"用户注册失败:用户名 {registerModel.UserName}:{errorMessage}"); + _logger.LogWarning("用户注册失败:{@RegisterAttempt}", new {registerModel.UserName, Result = errorMessage}); ModelState.AddModelError("UserName", errorMessage); return View("Register"); } @@ -146,11 +146,11 @@ public async Task DoRegister(UserViewModel registerModel) { var errorMessage = string.Join(";", result.Errors.Select(err => err.Description)); ModelState.AddModelError("UserName", errorMessage); - _logger.LogWarning($"用户注册失败:用户名 {registerModel.UserName}:{errorMessage}"); + _logger.LogWarning("用户注册失败:{@RegisterAttempt}", new {registerModel.UserName, Result = errorMessage}); return View("Register"); } - _logger.LogInformation($"用户注册成功:(UserId: {newUser.Id}, UserName: {newUser.UserName})"); + _logger.LogInformation("用户注册成功:{@RegisterAttempt}", new {registerModel.UserName, UserId = newUser.Id}); await _signInManager.PasswordSignInAsync( registerModel.UserName, registerModel.Password, @@ -176,7 +176,7 @@ public async Task DoForgotPassword(ForgotPasswordModel model) { if (!ModelState.IsValid) { - _logger.LogWarning($"找回密码失败:用户名或邮箱 {model.UsernameOrEmail} 数据格式不正确。"); + _logger.LogWarning("发送重置密码邮件失败:{@ForgotPasswordAttempt}", new {model.UsernameOrEmail, Result = "数据格式不正确"}); return ApiResponse.Error(ModelState); } @@ -184,12 +184,12 @@ public async Task DoForgotPassword(ForgotPasswordModel model) { var user = GetUserBy(model); await _userService.SendEmailRetrievePasswordAsync(user, Request.Scheme); - _logger.LogInformation($"发送重置密码邮件成功:{user.ConfirmedEmail}"); + _logger.LogInformation("发送重置密码邮件成功:{ConfirmedEmail}", user.ConfirmedEmail); return ApiResponse.NoContent(); } catch (RetrievePasswordVerificationException e) { - _logger.LogWarning($"找回密码失败:{model.UsernameOrEmail} {e.Message}"); + _logger.LogWarning("发送重置密码邮件失败:{@ForgotPasswordAttempt}", new {model.UsernameOrEmail, Result = e.Message}); return ApiResponse.Error(e.Message); } } @@ -200,17 +200,18 @@ public IActionResult ResetPassword(ResetPasswordModel model) { ModelState.Clear(); + bool ret; var userEmailToken = UserEmailToken.ExtractFromQueryString(model.Token); if (userEmailToken == null) { - ModelState.AddModelError(nameof(model.Token), "Token无法识别"); - _logger.LogWarning($"重置密码失败:Token无法识别 {model.Token}"); - return View(model); + var errorMessage = "无法识别的凭证"; + ModelState.AddModelError(nameof(model.Token), errorMessage); + _logger.LogWarning("重置密码失败:{@ResetPasswordAttempt}", new {model.Token, model.UserId, Result = errorMessage}); + return View("ResetPassword", model); } - + model.Token = userEmailToken.Token; model.UserId = userEmailToken.UserId; - return View(model); } @@ -218,24 +219,33 @@ public IActionResult ResetPassword(ResetPasswordModel model) [Route("/reset-password")] public async Task DoResetPassword(ResetPasswordModel model) { - if (!ModelState.IsValid) return View(model); + if (!ModelState.IsValid) + { + return View(model); + } var user = await _userManager.FindByIdAsync(model.UserId.ToString()); if (user == null) { - ModelState.AddModelError(nameof(model.UserId), "该用户不存在"); + var errorMessage = "用户不存在"; + ModelState.AddModelError(nameof(model.UserId), errorMessage); + _logger.LogWarning("重置密码失败:{@ResetPasswordAttempt}", new { model.Token, model.UserId, Result = errorMessage}); return View(model); } var result = await _userManager.ResetPasswordAsync(user, model.Token, model.Password); - if (result.Errors.Any()) - result.Errors.ToList() - .ForEach(e => ModelState.AddModelError(e.Code, e.Description)); - - _logger.LogInformation($"重置密码成功:{user.UserName}"); - - model.Succeeded = true; + { + var msg = string.Join(";", result.Errors.Select(e => e.Description)); + ModelState.AddModelError(nameof(model.Token), msg); + _logger.LogWarning("重置密码失败:{@ResetPasswordAttempt}", new { model.Token, model.UserId, Result = msg}); + model.Succeeded = false; + } + else + { + _logger.LogInformation("重置密码成功:{UserName}", user.UserName); + model.Succeeded = true; + } return View(model); } diff --git a/src/Discussion.Web/Controllers/CommonController.cs b/src/Discussion.Web/Controllers/CommonController.cs index 94b02acd..d78e09e1 100644 --- a/src/Discussion.Web/Controllers/CommonController.cs +++ b/src/Discussion.Web/Controllers/CommonController.cs @@ -92,7 +92,7 @@ public async Task UploadFile(IFormFile file, string category) ? await storageFile.GetPublicUrlAsync(TimeSpan.MaxValue) : Url.Action("DownloadFile", "Common", new { slug = fileRecord.Slug }, Request.Scheme); - _logger.LogInformation($"上传文件成功:{fileRecord.OriginalName}, {fileRecord.Size} bytes, {fileRecord.StoragePath}, (id: {fileRecord.Id})"); + _logger.LogInformation("上传文件成功:{@UploadedFile}", new {fileRecord.OriginalName, fileRecord.Size, fileRecord.StoragePath, fileRecord.Id}); return ApiResponse.ActionResult(new { FileId = fileRecord.Id, diff --git a/src/Discussion.Web/Controllers/ReplyController.cs b/src/Discussion.Web/Controllers/ReplyController.cs index d31af961..50ff41e9 100644 --- a/src/Discussion.Web/Controllers/ReplyController.cs +++ b/src/Discussion.Web/Controllers/ReplyController.cs @@ -39,27 +39,27 @@ public IActionResult Reply(int topicId, ReplyCreationModel replyCreationModel) if (!_siteSettings.CanAddNewReplies()) { - var ex = new FeatureDisabledException(); - _logger.LogWarning($"添加回复失败:{currentUser.UserName}:{ex.Message}"); + _logger.LogWarning("添加回复失败:{@ReplyAttempt}", new {currentUser.UserName, Result= new FeatureDisabledException().Message}); return BadRequest(); } if (_siteSettings.RequireUserPhoneNumberVerified && !currentUser.PhoneNumberId.HasValue) { - var ex = new UserVerificationRequiredException(); - _logger.LogWarning($"添加回复失败:{currentUser.UserName}:{ex.Message}"); + _logger.LogWarning("添加回复失败:{@ReplyAttempt}", new {currentUser.UserName, Result = new UserVerificationRequiredException().Message}); return BadRequest(); } var topic = _topicRepo.Get(topicId); if (topic == null) { - ModelState.AddModelError("TopicId", "话题不存在"); + var errorMessage = "话题不存在"; + _logger.LogWarning("添加回复失败:{@ReplyAttempt}", new {currentUser.UserName, Result = errorMessage}); + ModelState.AddModelError("TopicId", errorMessage); } if (!ModelState.IsValid) { - _logger.LogModelState("添加回复", ModelState, currentUser.UserName); + _logger.LogModelState("添加回复", ModelState, currentUser.Id, currentUser.UserName); return BadRequest(ModelState); } @@ -77,7 +77,7 @@ public IActionResult Reply(int topicId, ReplyCreationModel replyCreationModel) topic.ReplyCount += 1; _topicRepo.Update(topic); - _logger.LogInformation($"添加回复成功:(TopicId: {topic.Id} ReplyId: {reply.Id} UserId: {currentUser.Id}, UserName: {currentUser.UserName})"); + _logger.LogInformation("添加回复成功:{@ReplyAttempt}", new {TopicId = topic.Id, topic.ReplyCount, ReplyId = reply.Id, UserId = currentUser.Id, currentUser.UserName}); return NoContent(); } } diff --git a/src/Discussion.Web/Controllers/TopicController.cs b/src/Discussion.Web/Controllers/TopicController.cs index 33eb3e1f..94bedad9 100644 --- a/src/Discussion.Web/Controllers/TopicController.cs +++ b/src/Discussion.Web/Controllers/TopicController.cs @@ -1,14 +1,9 @@ using System; -using System.Collections.Generic; -using System.IO; using Microsoft.AspNetCore.Mvc; using Discussion.Web.ViewModels; using Microsoft.AspNetCore.Authorization; using System.Linq; using System.Net; -using System.Net.Http.Headers; -using System.Text; -using System.Threading; using System.Threading.Tasks; using Discussion.Core.Data; using Discussion.Core.Logging; @@ -19,7 +14,6 @@ using Discussion.Web.Services.TopicManagement; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -using Newtonsoft.Json; namespace Discussion.Web.Controllers { @@ -99,20 +93,20 @@ public ActionResult CreateTopic(TopicCreationModel model) var userName = user.UserName; if (!ModelState.IsValid) { - _logger.LogModelState("创建话题", ModelState, userName); + _logger.LogModelState("创建话题", ModelState, user.Id, userName); return BadRequest(); } try { var topic = _topicService.CreateTopic(model); - _logger.LogInformation($"创建话题成功:{topic.Title} (TopicId: {topic.Id}, UserId: {user.Id}, UserName: {user.UserName})"); + _logger.LogInformation("创建话题成功:{@NewTopicAttempt}", new {topic.Title, topic.Id, UserId = user.Id, user.UserName }); // ReSharper disable once Mvc.ActionNotResolved return RedirectToAction("Index", new { topic.Id }); } catch (InvalidOperationException ex) { - _logger.LogWarning($"创建话题失败:(UserId: {user.Id}, UserName: {user.UserName}):{ex.Message}"); + _logger.LogWarning("创建话题失败:{@NewTopicAttempt}", new { UserId = user.Id, user.UserName, Result = ex.Message }); return BadRequest(); } } @@ -126,7 +120,7 @@ public async Task ImportFromWeChat(ChatHistoryImportingModel model var weChatAccount = _wechatAccountRepo.All().FirstOrDefault(wxa => wxa.UserId == user.Id); if (weChatAccount == null) { - _logger.LogWarning($"无法导入对话,因为当前用户 (UserId: {user.Id}, UserName: {user.UserName}) 未绑定微信号"); + _logger.LogWarning("导入对话失败:{@ImportAttempt}", new { UserId = user.Id, user.UserName, Result = "未绑定微信号" }); return BadRequest(); } @@ -156,7 +150,7 @@ public async Task ImportFromWeChat(ChatHistoryImportingModel model topic.LastRepliedAt = replies.Last().CreatedAtUtc; _topicRepo.Update(topic); - _logger.LogInformation($"导入对话成功:(TopicId: {topic.Id}, ChatId: {model.ChatId}, ReplyCount: {topic.ReplyCount}, UserId: {user.Id}, UserName: {user.UserName})"); + _logger.LogInformation("导入对话成功:{@ImportAttempt}", new {TopicId = topic.Id, model.ChatId, topic.ReplyCount, UserId = user.Id, user.UserName}); return redirectResult; } @@ -168,7 +162,7 @@ public async Task GetWeChatSessionList() var weChatAccount = _wechatAccountRepo.All().FirstOrDefault(wxa => wxa.UserId == user.Id); if (weChatAccount == null) { - _logger.LogWarning($"无法加载对话列表,因为当前用户 (UserId: {user.Id}, UserName: {user.UserName}) 未绑定微信号"); + _logger.LogWarning("加载对话列表失败:{@ImportAttempt}", new { UserId = user.Id, user.UserName, Result = "未绑定微信号" }); return ApiResponse.NoContent(HttpStatusCode.BadRequest); } diff --git a/src/Discussion.Web/Controllers/UserController.cs b/src/Discussion.Web/Controllers/UserController.cs index ce86f15c..a63aa8dd 100644 --- a/src/Discussion.Web/Controllers/UserController.cs +++ b/src/Discussion.Web/Controllers/UserController.cs @@ -58,21 +58,21 @@ public async Task DoSettings(UserSettingsViewModel userSettingsVi var user = HttpContext.DiscussionUser(); if (!ModelState.IsValid) { - _logger.LogModelState(action, ModelState, user.UserName); + _logger.LogModelState(action, ModelState, user.Id, user.UserName); return View("Settings", user); } var identityResult = await _userService.UpdateUserInfoAsync(user, userSettingsViewModel); if (identityResult.Succeeded) { - _logger.LogIdentityResult(action, identityResult, user.UserName); + _logger.LogIdentityResult(action, identityResult, user.Id, user.UserName); // ReSharper disable once Mvc.ActionNotResolved return RedirectToAction("Settings"); } var msg = string.Join(";", identityResult.Errors.Select(e => e.Description)); ModelState.AddModelError(string.Empty, msg); - _logger.LogIdentityResult(action, identityResult, user.UserName); + _logger.LogIdentityResult(action, identityResult, user.Id, user.UserName); return View("Settings", user); } @@ -80,16 +80,16 @@ public async Task DoSettings(UserSettingsViewModel userSettingsVi [Route("send-confirmation-mail")] public async Task SendEmailConfirmation() { + var user = HttpContext.DiscussionUser(); try { - var user = HttpContext.DiscussionUser(); await _userService.SendEmailConfirmationMailAsync(user, Request.Scheme); - _logger.LogInformation($"发送确认邮件成功:{user.UserName}"); + _logger.LogInformation("发送确认邮件成功:{@EmailConfirmation}", new {user.EmailAddress, user.UserName }); return ApiResponse.NoContent(); } catch (UserEmailAlreadyConfirmedException ex) { - _logger.LogWarning($"发送确认邮件失败:{ex.UserName}:{ex.Message}"); + _logger.LogWarning("发送确认邮件失败:{@EmailConfirmation}", new {user.EmailAddress, user.UserName, Result = ex.Message}); return ApiResponse.Error(ex.Message); } } @@ -102,12 +102,12 @@ public async Task ConfirmEmail(string token) var tokenInEmail = UserEmailToken.ExtractFromQueryString(token); if (tokenInEmail == null) { - _logger.LogWarning("确认邮件地址失败:无法识别提供的 token"); + _logger.LogWarning("确认邮件地址失败:{@EmailConfirmation}", new {Token = token, Result = "无法识别提供的 token"}); return View(false); } var result = await _userService.ConfirmEmailAsync(tokenInEmail); - _logger.LogIdentityResult("确认邮件地址", result); + _logger.LogIdentityResult("确认邮件地址", result, tokenInEmail.UserId); return View(result.Succeeded); } @@ -125,7 +125,7 @@ public async Task DoChangePassword(ChangePasswordViewModel viewMo var user = HttpContext.DiscussionUser(); if (!ModelState.IsValid) { - _logger.LogModelState("修改密码", ModelState, user.UserName); + _logger.LogModelState("修改密码", ModelState, user.Id, user.UserName); return View(getActionName, viewModel); } @@ -137,11 +137,11 @@ public async Task DoChangePassword(ChangePasswordViewModel viewMo { ModelState.AddModelError(err.Code, err.Description); }); - _logger.LogIdentityResult("修改密码", changeResult, user.UserName); + _logger.LogIdentityResult("修改密码", changeResult, user.Id, user.UserName); return View(getActionName, viewModel); } - _logger.LogIdentityResult("修改密码", changeResult, user.UserName); + _logger.LogIdentityResult("修改密码", changeResult, user.Id, user.UserName); return RedirectToAction(getActionName); } @@ -159,18 +159,18 @@ public async Task SendPhoneNumberVerificationCode([FromForm] string var badRequestResponse = ApiResponse.NoContent(HttpStatusCode.BadRequest); if (string.IsNullOrEmpty(phoneNumber) || !Regex.IsMatch(phoneNumber, "\\d{11}")) { - _logger.LogWarning($"发送手机验证短信失败:{user.UserName}:号码 {phoneNumber} 不正确"); + _logger.LogWarning("发送手机验证短信失败:{@PhoneNumberVerification}", new { user.UserName, UserId = user.Id, PhoneNumber = phoneNumber, Result = "号码不正确" }); return badRequestResponse; } try { await _userService.SendPhoneNumberVerificationCodeAsync(user, phoneNumber); - _logger.LogInformation($"发送手机验证短信成功:{user.UserName}"); + _logger.LogInformation("发送手机验证短信成功:{@PhoneNumberVerification}", new { user.UserName, UserId = user.Id, PhoneNumber = phoneNumber,}); } catch(PhoneNumberVerificationFrequencyExceededException) { - _logger.LogWarning($"发送手机验证短信失败:{user.UserName}:超出调用限制"); + _logger.LogWarning("发送手机验证短信失败:{@PhoneNumberVerification}", new { user.UserName, UserId = user.Id, PhoneNumber = phoneNumber, Result = "超出调用限制" }); return badRequestResponse; } @@ -186,12 +186,13 @@ public ApiResponse DoVerifyPhoneNumber([FromForm] string code) try { _userService.VerifyPhoneNumberByCode(user, code); - _logger.LogInformation($"验证手机号码成功:{user.UserName}"); + _logger.LogInformation("验证手机号码成功:{@PhoneNumberVerification}", new { user.UserName, UserId = user.Id, user.VerifiedPhoneNumber.PhoneNumber, Code = code }); } catch (PhoneNumberVerificationCodeInvalidException) { - _logger.LogWarning($"验证手机号码失败:{user.UserName}:验证码不正确或已过期"); - return ApiResponse.Error("code", "验证码不正确或已过期"); + const string errorMessage = "验证码不正确或已过期"; + _logger.LogWarning("验证手机号码失败:{@PhoneNumberVerification}", new { user.UserName, UserId = user.Id, Result = errorMessage, Code = code}); + return ApiResponse.Error("code", errorMessage); } return ApiResponse.NoContent(); @@ -225,27 +226,28 @@ public async Task VerifyWeChatAccountByCode([FromForm] string code) return ApiResponse.NoContent(HttpStatusCode.InternalServerError); } - var userId = HttpContext.DiscussionUser().Id; + var user = HttpContext.DiscussionUser(); if (verifyResult.Id == null) { - _logger.LogWarning($"验证微信账号时,验证码错误。用户 Id: {userId}"); + _logger.LogWarning("验证微信账号失败:{@WeChatAccountVerification}", new { user.UserName, UserId = user.Id, Code = code, Result = "验证码不正确或已过期" }); return ApiResponse.Error("验证失败"); } + _logger.LogInformation("验证微信账号成功:{@WeChatAccountVerification}", new { user.UserName, UserId = user.Id, Code = code }); var weChatAccount = _wechatAccountRepo.All().FirstOrDefault(wxa => wxa.WxId == verifyResult.Id && wxa.UserId == 0); if (weChatAccount == null) { weChatAccount = new WeChatAccount() { WxId = verifyResult.Id, - UserId = userId, + UserId = user.Id, WxAccount = verifyResult.Weixin }; _wechatAccountRepo.Save(weChatAccount); } else { - weChatAccount.UserId = userId; + weChatAccount.UserId = user.Id; weChatAccount.WxAccount = verifyResult.Weixin; _wechatAccountRepo.Save(weChatAccount); } diff --git a/src/Discussion.Web/Discussion.Web.csproj b/src/Discussion.Web/Discussion.Web.csproj index f1688107..18402b87 100755 --- a/src/Discussion.Web/Discussion.Web.csproj +++ b/src/Discussion.Web/Discussion.Web.csproj @@ -14,7 +14,7 @@ false false Discussion.Web.Startup - publish\**;logs\**;dotnetclub.db;uploaded\**;appsettings.Development.json + publish\**;logs\**;dotnetclub.db;uploaded\**;appsettings.Development.json;appsettings.Production.json; true diff --git a/src/Discussion.Web/appsettings.Production.json b/src/Discussion.Web/appsettings.Production.json index d782f5b9..a3902372 100644 --- a/src/Discussion.Web/appsettings.Production.json +++ b/src/Discussion.Web/appsettings.Production.json @@ -1,21 +1,25 @@ { "sqliteConnectionString": "Data Source=dotnetclub.db", "Logging": { - "LogLevel": { - "Discussion": "Information", - "Default": "Warning" - }, "File":{ "PathFormat": "logs/log-{Date}.log", "FileSizeLimitBytes": 20971520, "Json": false, "LogLevel": { - "Discussion.Core.Middleware.TraceIdMiddleware": "Warning" + "Discussion.Core.Middleware.TraceIdMiddleware": "Warning", + "LogLevel": { + "Discussion": "Information", + "Default": "Warning" + } } }, "Console": { "Json": true, - "ElasticSearchJson": true + "ElasticSearchJson": true, + "LogLevel": { + "Discussion": "Information", + "Default": "Warning" + } } } } \ No newline at end of file diff --git a/test/Discussion.Web.Tests/Specs/Controllers/AccountControllerSpecs.cs b/test/Discussion.Web.Tests/Specs/Controllers/AccountControllerSpecs.cs index 3613195f..330ec712 100644 --- a/test/Discussion.Web.Tests/Specs/Controllers/AccountControllerSpecs.cs +++ b/test/Discussion.Web.Tests/Specs/Controllers/AccountControllerSpecs.cs @@ -192,8 +192,8 @@ async Task should_register_new_user() var newUserLog = _app.GetLogs().FirstOrDefault(log => log.Message.Contains("用户注册成功")); Assert.NotNull(newUserLog); - Assert.Contains($"UserId: {registeredUser.Id}", newUserLog.Message); - Assert.Contains($"UserName: {registeredUser.UserName}", newUserLog.Message); + Assert.Contains($"UserId = {registeredUser.Id}", newUserLog.Message); + Assert.Contains($"UserName = {registeredUser.UserName}", newUserLog.Message); } [Fact] @@ -374,11 +374,11 @@ void should_return_error_when_goto_reset_password_page_with_invalid_token() var model = new ResetPasswordModel {Token = "hello"}; var controller = _app.CreateController(); - var result = controller.ResetPassword(model); + controller.ResetPassword(model); controller.ModelState.IsValid.ShouldBeFalse(); controller.ModelState[nameof(model.Token)].Errors.First() - .ErrorMessage.ShouldEqual("Token无法识别"); + .ErrorMessage.ShouldEqual("无法识别的凭证"); } [Fact] @@ -396,7 +396,7 @@ async void should_not_reset_password_when_token_invalid() var result = await controller.DoResetPassword(model) as ViewResult; controller.ModelState.IsValid.ShouldBeFalse(); - controller.ModelState["InvalidToken"].Errors.First() + controller.ModelState["Token"].Errors.First() .ErrorMessage.ShouldEqual("验证令牌不正确"); } diff --git a/test/Discussion.Web.Tests/Specs/Controllers/ReplyControllerSpecs.cs b/test/Discussion.Web.Tests/Specs/Controllers/ReplyControllerSpecs.cs index 7e3a5af4..3f6f8f88 100644 --- a/test/Discussion.Web.Tests/Specs/Controllers/ReplyControllerSpecs.cs +++ b/test/Discussion.Web.Tests/Specs/Controllers/ReplyControllerSpecs.cs @@ -65,9 +65,9 @@ public void should_add_reply() var replyCreatedLog = _app.GetLogs().FirstOrDefault(log => log.Message.Contains("添加回复成功")); Assert.NotNull(replyCreatedLog); - Assert.Contains($"UserId: {user.Id}", replyCreatedLog.Message); - Assert.Contains($"TopicId: {topic.Id}", replyCreatedLog.Message); - Assert.Contains($"ReplyId: {replies[0].Id}", replyCreatedLog.Message); + Assert.Contains($"UserId = {user.Id}", replyCreatedLog.Message); + Assert.Contains($"TopicId = {topic.Id}", replyCreatedLog.Message); + Assert.Contains($"ReplyId = {replies[0].Id}", replyCreatedLog.Message); } [Fact] diff --git a/test/Discussion.Web.Tests/Specs/Controllers/TopicControllerSpecs.cs b/test/Discussion.Web.Tests/Specs/Controllers/TopicControllerSpecs.cs index e5051571..7cf8f5d7 100644 --- a/test/Discussion.Web.Tests/Specs/Controllers/TopicControllerSpecs.cs +++ b/test/Discussion.Web.Tests/Specs/Controllers/TopicControllerSpecs.cs @@ -125,8 +125,8 @@ public void should_create_topic() var topicCreatedLog = _app.GetLogs().FirstOrDefault(log => log.Message.Contains("创建话题成功")); Assert.NotNull(topicCreatedLog); - Assert.Contains($"UserId: {user.Id}", topicCreatedLog.Message); - Assert.Contains($"TopicId: {topicCreated.Id}", topicCreatedLog.Message); + Assert.Contains($"UserId = {user.Id}", topicCreatedLog.Message); + Assert.Contains($"Id = {topicCreated.Id}", topicCreatedLog.Message); Assert.Contains(topicCreated.Title, topicCreatedLog.Message); } @@ -201,9 +201,9 @@ public async Task should_create_topic_and_import_chat_session() var importedLog = _app.GetLogs().FirstOrDefault(log => log.Message.Contains("导入对话成功")); Assert.NotNull(importedLog); - Assert.Contains($"ChatId: {chatId}", importedLog.Message); - Assert.Contains($"TopicId: {topicCreated.Id}", importedLog.Message); - Assert.Contains($"ReplyCount: {importedReply.Count}", importedLog.Message); + Assert.Contains($"ChatId = {chatId}", importedLog.Message); + Assert.Contains($"TopicId = {topicCreated.Id}", importedLog.Message); + Assert.Contains($"ReplyCount = {importedReply.Count}", importedLog.Message); } private Topic VerifyTopicCreated(ActionResult actionResult, TopicCreationModel model)