Example #1
0
        private void AddToBuffer(TraceWrapper trace)
        {
            // le lock va empiler les appelants (mais c'est ce que l'on souhaite)
            lock (_key)
            {
                if (_buffer.IsAddingCompleted || _buffer.TryAdd(trace))
                {
                    return;
                }
            }

            // l'appel temporisé n'est pas locké et gère donc le catch des ajout alors que la collection a été marquée comme terminée (CompleteAdding = true)
            // ReSharper disable InconsistentlySynchronizedField => pas de lock pour ce cas car on ne souhaite pas bloquer le completeAdding aussi.
            try
            {
                // sinon, on envoie un évènement pour signaler que l'ajout n'a pu être fait immédiatement et on retente avec un temps d'attente
                RaiseSentTraces(ListenerHelpers.GetExceptionArray($"impossible d'ajouter immédiatement le message {trace.Message}: buffer plein : {_buffer.Count}"));
                if (!_buffer.TryAdd(trace, _maxTimeoutForFullBuffer))
                {
                    // Dans le cas où l'on ne peut pas insérer une trace à la fin du timeout, on lance une exception
                    throw new ArgumentException(
                              $@"ERROR: Max timeout for trace insertion in buffer reached ({_maxTimeoutForFullBuffer.TotalMilliseconds} ms)");
                }
            }
            catch (InvalidOperationException e)
            {
                RaiseSentTraces(ListenerHelpers.GetExceptionArray($"InvalidOperationException (cas du buffer où CompleteAdding = true par exemple) dans les traces. {e}"));
            }
            // ReSharper restore InconsistentlySynchronizedField
        }
Example #2
0
 /// <summary>
 /// En cas d'exception, on trace un message vers l'extérieur pour signaler le problème
 /// </summary>
 /// <param name="e">l'exception</param>
 private void RaiseException(Exception e)
 {
     RaiseSentTraces(ListenerHelpers.GetExceptionArray($"EXCEPTION IN TRACER: UNABLE TO FORMAT {e}"));
 }