/// <summary> /// Initializes a new instance of the <see cref="RollbarLogger" /> class. /// </summary> /// <param name="rollbarConfig">The rollbar configuration.</param> internal RollbarLogger(IRollbarLoggerConfig?rollbarConfig) { Assumption.AssertTrue(RollbarInfrastructure.Instance.IsInitialized, nameof(RollbarInfrastructure.Instance.IsInitialized)); if (RollbarTelemetryCollector.Instance != null && !RollbarTelemetryCollector.Instance.IsAutocollecting ) { RollbarTelemetryCollector.Instance.StartAutocollection(); } if (rollbarConfig != null) { ValidateConfiguration(rollbarConfig); this._config = new RollbarLoggerConfig(this).Reconfigure(rollbarConfig); } else { this._config = new RollbarLoggerConfig(this); } // let's init proper Rollbar client: var rollbarClient = new RollbarClient(this); // let's init the corresponding queue and register it: this._payloadQueue = new PayloadQueue(this, rollbarClient); RollbarQueueController.Instance?.Register(this._payloadQueue); }
/// <summary> /// Initializes a new instance of the <see cref="PayloadQueue"/> class. /// </summary> /// <param name="logger">The logger.</param> /// <param name="client">The client.</param> public PayloadQueue(RollbarLogger logger, RollbarClient client) { Assumption.AssertNotNull(logger, nameof(logger)); Assumption.AssertNotNull(client, nameof(client)); Assumption.AssertTrue(object.ReferenceEquals(logger.Config, client.Config), nameof(client.Config)); this._syncLock = new object(); this._queue = new Queue <PayloadBundle>(); this._logger = logger; this._client = client; this._isReleased = false; }
/// <summary> /// Updates the client. /// </summary> /// <param name="client">The client.</param> public void UpdateClient(RollbarClient client) { if (this._client == client) { return; } lock (this._syncLock) { this._client = client; } }
/// <summary> /// Tries the posting. /// </summary> /// <param name="payloadRecord">The payload record.</param> /// <returns>RollbarResponse.</returns> private RollbarResponse?TryPosting(IPayloadRecord payloadRecord) { if (payloadRecord.ConfigJson == null) { return(null); } IRollbarLoggerConfig?config = JsonConvert.DeserializeObject <RollbarLoggerConfig>(payloadRecord.ConfigJson); if (config == null) { return(null); } RollbarClient rollbarClient = new RollbarClient(config); try { RollbarResponse?response = rollbarClient.PostAsJson(config.RollbarDestinationOptions.AccessToken, payloadRecord.PayloadJson); return(response); } catch (System.Exception ex) { this.OnRollbarEvent( new CommunicationErrorEventArgs(null, payloadRecord.PayloadJson, ex, 0) ); RollbarErrorUtility.Report( null, payloadRecord, InternalRollbarError.PersistentPayloadRecordRepostError, "While trying to report a stored payload...", ex, null ); return(null); } }