コード例 #1
0
        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 });
            }
        }
コード例 #2
0
        /// <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;
        }
コード例 #3
0
        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()));
            }
        }
コード例 #4
0
        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 });
            }
        }
コード例 #5
0
        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.");
            }
        }