Пример #1
0
        public async Task RegexTest()
        {
            var logGroupName  = "RegexTest";
            var logStreamName = "TestMessage";

            Regex invalid_sequence_token_regex = new
                                                 Regex(@"The given sequenceToken is invalid. The next expected sequenceToken is: (\d+)");

            client = new AmazonCloudWatchLogsClient(RegionEndpoint.USWest2);
            await client.CreateLogGroupAsync(new CreateLogGroupRequest
            {
                LogGroupName = logGroupName
            });

            _testFixure.LogGroupNameList.Add(logGroupName);

            await client.CreateLogStreamAsync(new CreateLogStreamRequest
            {
                LogGroupName  = logGroupName,
                LogStreamName = logStreamName
            });

            var putlogEventsRequest = new PutLogEventsRequest
            {
                LogGroupName  = logGroupName,
                LogStreamName = logStreamName,
                LogEvents     = new List <InputLogEvent>
                {
                    new InputLogEvent
                    {
                        Timestamp = DateTime.Now,
                        Message   = "Message1"
                    }
                }
            };
            var response = await client.PutLogEventsAsync(putlogEventsRequest);

            try
            {
                putlogEventsRequest.LogEvents = new List <InputLogEvent>
                {
                    new InputLogEvent
                    {
                        Timestamp = DateTime.Now,
                        Message   = "Message2"
                    }
                };

                await client.PutLogEventsAsync(putlogEventsRequest);
            }
            catch (InvalidSequenceTokenException ex)
            {
                var regexResult = invalid_sequence_token_regex.Match(ex.Message);

                if (regexResult.Success)
                {
                    Assert.Equal(regexResult.Groups[1].Value, response.NextSequenceToken);
                }
            }
        }
Пример #2
0
        private async void PutLog(string groupName, string streamName, string msg)
        {
            try
            {
                var req = new DescribeLogStreamsRequest(groupName)
                {
                    LogStreamNamePrefix = streamName
                };
                var resp = await _logsClient.DescribeLogStreamsAsync(req);

                var token = resp.LogStreams.FirstOrDefault(s => s.LogStreamName == streamName)?.UploadSequenceToken;
                var ie    = new InputLogEvent
                {
                    Message   = msg,
                    Timestamp = DateTime.UtcNow
                };
                var request = new PutLogEventsRequest(groupName, streamName, new List <InputLogEvent> {
                    ie
                });
                if (!string.IsNullOrEmpty(token))
                {
                    request.SequenceToken = token;
                }
                await _logsClient.PutLogEventsAsync(request);
            }
            catch (Exception e)
            {
                // ignored
            }
        }
        /// <summary>
        /// Saves log messages from the cache.
        /// </summary>
        /// <param name="messages">a list with log messages</param>
        protected override void Save(List <LogMessage> messages)
        {
            if (messages == null || messages.Count == 0)
            {
                return;
            }

            if (_client == null)
            {
                throw new InvalidStateException(
                          "cloudwatch_logger", "NOT_OPENED", "CloudWatchLogger is not opened"
                          );
            }

            lock (_lock)
            {
                var events = new List <InputLogEvent>();
                foreach (var message in messages)
                {
                    events.Add(new InputLogEvent
                    {
                        Timestamp = message.Time,
                        Message   = FormatMessageText(message)
                    });
                }

                try
                {
                    var result = _client.PutLogEventsAsync(new PutLogEventsRequest
                    {
                        LogGroupName  = _group,
                        LogStreamName = _stream,
                        SequenceToken = _lastToken,
                        LogEvents     = events
                    }
                                                           ).Result;

                    _lastToken = result.NextSequenceToken;
                }
                catch
                {
                    // Do nothing if elastic search client was not enable to process bulk of messages
                }
            }
        }
Пример #4
0
        private async Task Worker(CancellationToken cancellationToken)
        {
            string sequenceToken = await GetSequenceToken(LogGroupName, LogStreamName);

            while (!cancellationToken.IsCancellationRequested)
            {
                try
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    LogEvent logEvent = await _queue.DequeueAsync(cancellationToken);

                    var request = new PutLogEventsRequest(LogGroupName, LogStreamName, new List <InputLogEvent>
                    {
                        new InputLogEvent
                        {
                            Message   = logEvent.RenderMessage(),
                            Timestamp = logEvent.Timestamp.UtcDateTime,
                        }
                    });
                    request.SequenceToken = sequenceToken;

                    var resp = await _client.PutLogEventsAsync(request, cancellationToken);

                    sequenceToken = resp.NextSequenceToken;
                }
                catch (OperationCanceledException e)
                {
                    Console.Error.WriteLine($"Worker canceled: {e}.");
                    throw;
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine($"Worker exception occured: {e}.");
                }
            }

            Console.Error.WriteLine("Worker ended.");
        }
Пример #5
0
        /// <summary>
        ///
        /// <para>WriteLogs:</para>
        ///
        /// <para>Writes logs to the logging service</para>
        ///
        /// <para>Check <seealso cref="IBLoggingServiceInterface.WriteLogs"/> for detailed documentation</para>
        ///
        /// </summary>
        public bool WriteLogs(
            List <BLoggingParametersStruct> _Messages,
            string _LogGroupName,
            string _LogStreamName,
            bool _bAsync = true,
            Action <string> _ErrorMessageAction = null)
        {
            if (_Messages == null || _Messages.Count == 0)
            {
                return(false);
            }

            if (_bAsync)
            {
                BTaskWrapper.Run(() =>
                {
                    WriteLogs(_Messages, _LogGroupName, _LogStreamName, false, _ErrorMessageAction);
                });
                return(true);
            }
            else
            {
                _LogGroupName  = BUtility.EncodeStringForTagging(_LogGroupName);
                _LogStreamName = BUtility.EncodeStringForTagging(_LogStreamName);

                string SequenceToken = null;

                bool bLogStreamAndGroupExists = false;
                try
                {
                    var DescribeStreamRequest = new DescribeLogStreamsRequest(_LogGroupName);
                    using (var CreatedDescribeTask = CloudWatchLogsClient.DescribeLogStreamsAsync(DescribeStreamRequest))
                    {
                        CreatedDescribeTask.Wait();
                        if (CreatedDescribeTask.Result != null && CreatedDescribeTask.Result.LogStreams != null && CreatedDescribeTask.Result.LogStreams.Count > 0)
                        {
                            foreach (var Current in CreatedDescribeTask.Result.LogStreams)
                            {
                                if (Current != null && Current.LogStreamName == _LogStreamName)
                                {
                                    SequenceToken            = Current.UploadSequenceToken;
                                    bLogStreamAndGroupExists = true;
                                    break;
                                }
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    bLogStreamAndGroupExists = false;
                }

                if (!bLogStreamAndGroupExists)
                {
                    try
                    {
                        var CreateGroupRequest = new CreateLogGroupRequest(_LogGroupName);
                        using (var CreatedGroupTask = CloudWatchLogsClient.CreateLogGroupAsync(CreateGroupRequest))
                        {
                            CreatedGroupTask.Wait();
                        }
                    }
                    catch (Exception e)
                    {
                        if (!(e is ResourceAlreadyExistsException))
                        {
                            _ErrorMessageAction?.Invoke("BLoggingServiceAWS->WriteLogs: " + e.Message + ", Trace: " + e.StackTrace);
                            return(false);
                        }
                    }

                    try
                    {
                        var CreateStreamRequest = new CreateLogStreamRequest(_LogGroupName, _LogStreamName);
                        using (var CreatedStreamTask = CloudWatchLogsClient.CreateLogStreamAsync(CreateStreamRequest))
                        {
                            CreatedStreamTask.Wait();
                        }
                    }
                    catch (Exception e)
                    {
                        if (!(e is ResourceAlreadyExistsException))
                        {
                            _ErrorMessageAction?.Invoke("BLoggingServiceAWS->WriteLogs: " + e.Message + ", Trace: " + e.StackTrace);
                            return(false);
                        }
                    }
                }

                var LogEvents = new List <InputLogEvent>();
                foreach (var Message in _Messages)
                {
                    var LogEvent = new InputLogEvent()
                    {
                        Message   = Message.Message,
                        Timestamp = DateTime.UtcNow
                    };

                    switch (Message.LogType)
                    {
                    case EBLoggingServiceLogType.Debug:
                        LogEvent.Message = "Debug-> " + LogEvent.Message;
                        break;

                    case EBLoggingServiceLogType.Info:
                        LogEvent.Message = "Info-> " + LogEvent.Message;
                        break;

                    case EBLoggingServiceLogType.Warning:
                        LogEvent.Message = "Warning-> " + LogEvent.Message;
                        break;

                    case EBLoggingServiceLogType.Error:
                        LogEvent.Message = "Error-> " + LogEvent.Message;
                        break;

                    case EBLoggingServiceLogType.Critical:
                        LogEvent.Message = "Critical-> " + LogEvent.Message;
                        break;
                    }

                    LogEvents.Add(LogEvent);
                }

                try
                {
                    var PutRequest = new PutLogEventsRequest(_LogGroupName, _LogStreamName, LogEvents)
                    {
                        SequenceToken = SequenceToken
                    };
                    using (var CreatedPutTask = CloudWatchLogsClient.PutLogEventsAsync(PutRequest))
                    {
                        CreatedPutTask.Wait();
                    }
                }
                catch (Exception e)
                {
                    _ErrorMessageAction?.Invoke("BLoggingServiceAWS->WriteLogs: " + e.Message + ", Trace: " + e.StackTrace);
                    return(false);
                }
                return(true);
            }
        }