using Infrastructure.Logging; using Microsoft.AspNetCore.Mvc; using Serilog.Events; namespace Executable.Controllers; [ApiController] [Route("api/[controller]")] public class LoggingController : ControllerBase { private readonly LoggingConfigManager _loggingConfigManager; private readonly ILogger _logger; public LoggingController(LoggingConfigManager loggingConfigManager, ILogger logger) { _loggingConfigManager = loggingConfigManager; _logger = logger; } /// /// Gets the current global log level /// /// Current log level [HttpGet("level")] public IActionResult GetLogLevel() { return Ok(new { level = _loggingConfigManager.GetLogLevel().ToString() }); } /// /// Sets the global log level /// /// Log level request containing the new level /// Result with the new log level [HttpPut("level")] public async Task SetLogLevel([FromBody] LogLevelRequest request) { if (!Enum.TryParse(request.Level, true, out var logLevel)) { return BadRequest(new { error = "Invalid log level", validLevels = Enum.GetNames() }); } await _loggingConfigManager.SetLogLevel(logLevel); // Log at the new level to confirm it's working _logger.WithCategory(LoggingCategoryConstants.System) .LogInformation("Log level changed to {Level}", logLevel); return Ok(new { level = logLevel.ToString() }); } /// /// Get a list of valid log levels /// /// All valid log level values [HttpGet("levels")] public IActionResult GetValidLogLevels() { return Ok(new { levels = Enum.GetNames() }); } } /// /// Request model for changing log level /// public class LogLevelRequest { public string Level { get; set; } }