第一次警告,对于 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 并导致仅生成一个日志文件