【问题标题】:Display user email in SeriLog ASP.NET在 SeriLog ASP.NET 中显示用户电子邮件
【发布时间】:2018-01-12 22:50:01
【问题描述】:

我正在使用 .Net Cli 将数据记录到 SeriLog。显示用户的电子邮件时出现问题。这就是我得到的:System.Collections.Generic.List`1[Net3.Models.AccountViewModels.UserListingVM],虽然我正在尝试获取:someonesname@email.com。我不确定为什么我没有得到我想要的结果,但这里是来自控制器和存储库的以下代码: 附言我对此很陌生。提前谢谢你。

*****UserController.cs*****

           using System;
           using System.Collections.Generic;
           using System.Linq;
           using System.Threading.Tasks;
           using Microsoft.AspNetCore.Http;
           using Microsoft.AspNetCore.Mvc;
           using Net3.Data;
           using Net3.Repository;
           using Microsoft.AspNetCore.Authorization;
           using Serilog;
           using Net3.Models.AccountViewModels;

           namespace Net3.Controllers
 {
    [Authorize]
    public class UserController : Controller
{
        ApplicationDbContext _context;

        public UserController(ApplicationDbContext context)
        {
            _context = context;
        }

    public ActionResult Index()
    {
        UserRepository userRepository = new UserRepository(_context);

        UserListingVM usersListing = new UserListingVM();

         var userInfo = _context.Users.Select(u => new UserListingVM()
        {
            Id = u.Id,
            Email = u.Email
        });

         Log.Debug(userInfo.ToList().ToString());

        return View(userRepository.GetAll());
    }
}

}

***UserRepository***

 using Net3.Data;
 using Net3.Models.AccountViewModels;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;

 namespace Net3.Repository
 {
    public class UserRepository
  {
    ApplicationDbContext _context;

    public UserRepository(ApplicationDbContext context)
    {
        this._context = context;
    }


    public IEnumerable<UserListingVM> GetAll()
    {
        var usersListing = _context.Users.Select(u => new UserListingVM()
        {
            Id = u.Id,
            Email = u.Email
        });
        return usersListing;
    }
}
}

【问题讨论】:

  • 因为 Object.ToString() 的默认实现是返回对象的数据类型。你想使用String.Join()
  • @SamAxe 不,string.Join 在使用 Serilog 时并不是一个好主意。 Serilog 的重点是进行结构化日志记录。例如,请参阅我的答案。

标签: c# asp.net .net visual-studio serilog


【解决方案1】:

这是使用 Serilog 的错误方法。您的消息模板字符串应该是一个常量。它不应该改变。阅读the documentation了解更多详情。

您应该做的是将用户转换为列表(因为我们不想从数据库中多次提取它)。然后使用常量格式字符串并将电子邮件列表作为参数传递。不要按照 cmets 中的建议使用 string.Join。 Serilog 用于记录structured data,您应该利用它。这意味着您可以记录一个字符串数组(或任何其他类型的对象!)并让 Serilog 在大多数情况下正确处理它。

List<UserListingVM> userInfo = _context.Users.Select(u => new UserListingVM()
    {
        Id = u.Id,
        Email = u.Email
    }).ToList();

 List<string> userEmails = userInfo.Select(u => u.Email).ToList();

Log.Debug("Displaying Users {@Users}", userEmails);

使用 Serilog.Sinks.Console 接收器,我得到了一些测试用户的输出:

[22:01:24 DBG] Displaying Users ["test@gmail.com", "johndoe@gmail.com", "larryjoe@gmail.com"]

这是一个您可以执行的控制台应用程序,它显示了它完全正常工作:

using Serilog;
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .CreateLogger();

        var users = new List<UserListingVM>
            {
                new UserListingVM
                {
                    Id = 1,
                    Email = "test@gmail.com"
                },
                new UserListingVM
                {
                    Id = 2,
                    Email = "johndoe@gmail.com"
                },
                new UserListingVM
                {
                    Id = 3,
                    Email = "larryjoe@gmail.com"
                },
            };

        var userEmails = users.Select(u => u.Email).ToList();
        Log.Debug("Displaying Users {@Users}", userEmails);
        Console.WriteLine("press any key to exit");
        Console.ReadKey();
    }
}

class UserListingVM
{
    public int Id { get; set; }
    public string Email { get; set; }
}

【讨论】:

  • 那是梦幻般的梅森!非常感谢您的帮助。它帮助了我。
猜你喜欢
  • 1970-01-01
  • 2013-11-18
  • 2018-07-04
  • 2023-03-28
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
相关资源
最近更新 更多