SeriLog 在控制器和类模型上的使用

问题描述 投票:0回答:0

第一次警告,对于 C# 和 serilog 来说都是新的,所以请原谅任何不好的措辞或结构,在这里学习。

我正在开发一个 REST API,它将公开一些想要使用比仅仅写入文件更好的日志的方法,因此在阅读了一些内容之后,决定尝试一下 serilog。

我可以让它工作并毫无问题地编写简单的日志文件,但没有找到从控制器和类模型写入相同日志文件的方法。

我可以定义 2 个日志并写入其中一个,但希望使其更简单,只需一个日志。

//Program.cs
//SeriLog Init
var logger = new LoggerConfiguration()
        .ReadFrom.Configuration(builder.Configuration)
        .Enrich.FromLogContext()
        .CreateLogger();

Log.Logger = new LoggerConfiguration()
    //.ReadFrom.Configuration(builder.Configuration)
    .WriteTo.File("../logs/all-.logs", rollingInterval: RollingInterval.Day)
    .MinimumLevel.Debug()
    .CreateLogger();

builder.Logging.ClearProviders();
builder.Logging.AddSerilog(logger);
//Controler
    [Route("[controller]")]
    [ApiController]
    public class WorkspaceController : ControllerBase
    {
        // logger instance injected to the Controller’s constructor
        private readonly ILogger<WorkspaceController> _logger;
        private readonly IConfiguration _config;
        public WorkspaceController(ILogger<WorkspaceController> logger, IConfiguration configuration)
        {
            _logger = logger;
            _config = configuration;
        }

        List<workspace> workspaces = new List<workspace> { };

        // GET: <WorkspaceController>
        [HttpGet()]
        public List<workspace> Get(string Custom1, string Custom2)
        {
            _logger.LogDebug("Inside GetWorkspace endpoint")
}
namespace WorkspaceCreatorAPI.Models
{
    public interface IAuthenticate
    {
        Session PasswordGrant(string serverUrl, string userName, string password, string clientId, string clientSecret, Enums.AuthenticationScope scope);
    }
    public class AuthenticationResponse
    {
        [JsonPropertyName("access_token")]
        public string? XAuthToken { get; set; }
        [JsonPropertyName("token_type")]
        public string? TokenType { get; set; }
        [JsonPropertyName("scope")]
        public string? Scope { get; set; }
        [JsonPropertyName("refresh_token")]
        public string? RefreshToken { get; set; }
        [JsonPropertyName("expires_in")]
        public int ExpiresIn { get; set; }

    }
    public class Authenticate : IAuthenticate
    {
         public Session PasswordGrant(string serverUrl, string userName, string password, string clientId, string clientSecret, Enums.AuthenticationScope scope)
        {
            var session = new Session(serverUrl);
            AuthenticationResponse? authToken;
            var client = new RestClient(serverUrl);
            var request = new RestRequest(Endpoints.OAuthToken(serverUrl), Method.Post);
            request.AddHeader("Accept", "*/*");
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddParameter("application/x-www-form-urlencoded", $"username={userName}&password={password}&grant_type=password&" +
                                $"client_id={clientId}&client_secret={clientSecret}&scope={scope.ToString().ToLower()}", ParameterType.RequestBody);
            RestResponse response = client.Execute(request);
            if (response.StatusCode == HttpStatusCode.OK)
            {
                authToken = System.Text.Json.JsonSerializer.Deserialize<AuthenticationResponse>(response.Content);
                session.Authenticated = true;
                session.AuthToken = authToken.XAuthToken;
                session.RefreshToken = authToken.RefreshToken;
                request = new RestRequest(Endpoints.ApiInfo(session), Method.Get);
                request.AddHeader("Cache-Control", "no-cache");
                request.AddHeader("Content-Type", "application/json");
                request.AddHeader("X-Auth-Token", session.AuthToken);
                response = client.Execute(request);
                var apiInfoResponse = System.Text.Json.JsonSerializer.Deserialize<APIResponse>(response.Content);
                session.CustomerId = apiInfoResponse.data.user.customer_id;
                session.BaseUrl = apiInfoResponse.data.versions[0].url;
                Log.Information("Authentication Succeeded");

这是可能的还是两个日志文件方法是正确的?

谢谢 再次对任何不当行为表示歉意...我要开始了。

佩德罗

尝试仅对一个对象使用 serilog 并导致仅生成一个日志文件

serilog
© www.soinside.com 2019 - 2024. All rights reserved.