public async Task ChangeLogLevelToHigherOrdinalAsync() { string ruleName = "logging3"; // Currently 'trace'. string logLevel = "info"; using (NodeBuilder builder = NodeBuilder.Create(this)) { // Arrange. CoreNode node = builder.CreateStratisPosNode(this.network).Start(); this.ConfigLogManager(); // Act. var request = new LogRulesRequest { LogRules = new List <LogRuleRequest> { new LogRuleRequest { RuleName = ruleName, LogLevel = logLevel } } }; HttpResponseMessage result = await $"http://localhost:{node.ApiPort}/api" .AppendPathSegment("node/loglevels") .PutJsonAsync(request); // Assert. result.StatusCode.Should().Be(HttpStatusCode.OK); this.rules = LogManager.Configuration.LoggingRules; this.rules.Single(r => r.LoggerNamePattern == ruleName).Levels.Should().ContainInOrder(new[] { LogLevel.Info, LogLevel.Warn, LogLevel.Error, LogLevel.Fatal }); } }
/// <summary> /// Changes the log levels for the specified loggers. /// </summary> /// <param name="request">The request containing the loggers to modify.</param> /// <returns></returns> public void UpdateLogLevel(LogRulesRequest request) { var path = "/api/Node/loglevels"; path = path.Replace("{format}", "json"); var queryParams = new Dictionary <String, String>(); var headerParams = new Dictionary <String, String>(); var formParams = new Dictionary <String, String>(); var fileParams = new Dictionary <String, FileParameter>(); String postBody = null; postBody = ApiClient.Serialize(request); // http body (model) parameter // authentication setting, if any String[] authSettings = new String[] { }; // make the HTTP request IRestResponse response = (IRestResponse)ApiClient.CallApi(path, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, authSettings); if (((int)response.StatusCode) >= 400) { throw new ApiException((int)response.StatusCode, "Error calling UpdateLogLevel: " + response.Content, response.Content); } else if (((int)response.StatusCode) == 0) { throw new ApiException((int)response.StatusCode, "Error calling UpdateLogLevel: " + response.ErrorMessage, response.ErrorMessage); } return; }
public IActionResult UpdateLogLevel([FromBody] LogRulesRequest request) { Guard.NotNull(request, nameof(request)); // Checks the request is valid. if (!this.ModelState.IsValid) { return(ModelStateErrors.BuildErrorResponse(this.ModelState)); } try { foreach (var logRuleRequest in request.LogRules) { var nLogLevel = logRuleRequest.LogLevel.ToNLogLevel(); var rule = LogManager.Configuration.LoggingRules.SingleOrDefault(r => r.LoggerNamePattern == logRuleRequest.RuleName); if (rule == null) { throw new Exception($"Logger name `{logRuleRequest.RuleName}` doesn't exist."); } // Log level ordinals go from 1 to 6 (trace to fatal). // When we set a log level, we enable every log level above and disable all the ones below. foreach (var level in LogLevel.AllLoggingLevels) { if (level.Ordinal >= nLogLevel.Ordinal) { rule.EnableLoggingForLevel(level); } else { rule.DisableLoggingForLevel(level); } } } // Only update the loggers if the setting was successful. LogManager.ReconfigExistingLoggers(); return(Ok()); } catch (Exception e) { this.logger.LogError("Exception occurred: {0}", e.ToString()); return(ErrorHelpers.BuildErrorResponse(HttpStatusCode.BadRequest, e.Message, e.ToString())); } }
public async Task ChangeLogLevelOfMultipleRulesAsync() { string ruleName1 = "logging1"; string ruleName2 = "logging2"; string ruleName3 = "logging3"; string logLevel = "Error"; using (NodeBuilder builder = NodeBuilder.Create(this)) { // Arrange. CoreNode node1 = builder.CreateStratisPosNode(this.network).Start(); CoreNode node2 = builder.CreateStratisPosNode(this.network).Start(); TestHelper.Connect(node1, node2); this.ConfigLogManager(); // Act. var request = new LogRulesRequest { LogRules = new List <LogRuleRequest> { new LogRuleRequest { RuleName = ruleName1, LogLevel = logLevel }, new LogRuleRequest { RuleName = ruleName2, LogLevel = logLevel }, new LogRuleRequest { RuleName = ruleName3, LogLevel = logLevel } } }; HttpResponseMessage result = await $"http://localhost:{node1.ApiPort}/api" .AppendPathSegment("node/loglevels") .PutJsonAsync(request); // Assert. result.StatusCode.Should().Be(HttpStatusCode.OK); this.rules = LogManager.Configuration.LoggingRules; this.rules.Single(r => r.LoggerNamePattern == ruleName1).Levels.Should().ContainInOrder(new[] { LogLevel.Error, LogLevel.Fatal }); this.rules.Single(r => r.LoggerNamePattern == ruleName2).Levels.Should().ContainInOrder(new[] { LogLevel.Error, LogLevel.Fatal }); this.rules.Single(r => r.LoggerNamePattern == ruleName3).Levels.Should().ContainInOrder(new[] { LogLevel.Error, LogLevel.Fatal }); } }
public async Task ChangeLogLevelWithNonExistantLoggerAsync() { string ruleName = "non-existant-rule"; string logLevel = "debug"; using (NodeBuilder builder = NodeBuilder.Create(this)) { // Arrange. CoreNode node = builder.CreateStratisPosNode(this.network).Start(); this.ConfigLogManager(); // Act. var request = new LogRulesRequest { LogRules = new List <LogRuleRequest> { new LogRuleRequest { RuleName = ruleName, LogLevel = logLevel } } }; Func <Task> act = async() => await $"http://localhost:{node.ApiPort}/api" .AppendPathSegment("node/loglevels") .PutJsonAsync(request) .ReceiveJson <string>(); // Assert. var exception = act.Should().Throw <FlurlHttpException>().Which; var response = exception.Call.Response; ErrorResponse errorResponse = JsonConvert.DeserializeObject <ErrorResponse>(await response.Content.ReadAsStringAsync()); List <ErrorModel> errors = errorResponse.Errors; response.StatusCode.Should().Be(HttpStatusCode.BadRequest); errors.Should().ContainSingle(); errors.First().Message.Should().Be($"Logger name `{ruleName}` doesn't exist."); } }