/// <summary>
        /// Create a new Asavie API logger using the default logging delegates.
        /// </summary>
        /// <param name="AsavieAPIClient">An Asavie API client.</param>
        /// <param name="Context">A context of this API.</param>
        /// <param name="LogFileCreator">A delegate to create a log file from the given context and log file name.</param>
        public AsavieAPIClientLogger(AsavieAPIClient AsavieAPIClient,
                                     String Context = DefaultContext,
                                     LogfileCreatorDelegate LogFileCreator = null)

            : this(AsavieAPIClient,
                   Context.IsNotNullOrEmpty() ? Context : DefaultContext,
                   null,
                   null,
                   null,
                   null,

                   LogFileCreator : LogFileCreator)

        {
        }
        /// <summary>
        /// Create a Asavie API HTTP logger using the given logging delegates.
        /// </summary>
        /// <param name="AsavieAPIClient">An Asavie API client.</param>
        /// <param name="Context">A context of this API.</param>
        ///
        /// <param name="LogHTTPRequest_toConsole">A delegate to log incoming HTTP requests to console.</param>
        /// <param name="LogHTTPResponse_toConsole">A delegate to log HTTP requests/responses to console.</param>
        /// <param name="LogHTTPRequest_toDisc">A delegate to log incoming HTTP requests to disc.</param>
        /// <param name="LogHTTPResponse_toDisc">A delegate to log HTTP requests/responses to disc.</param>
        ///
        /// <param name="LogHTTPRequest_toNetwork">A delegate to log incoming HTTP requests to a network target.</param>
        /// <param name="LogHTTPResponse_toNetwork">A delegate to log HTTP requests/responses to a network target.</param>
        /// <param name="LogHTTPRequest_toHTTPSSE">A delegate to log incoming HTTP requests to a HTTP client sent events source.</param>
        /// <param name="LogHTTPResponse_toHTTPSSE">A delegate to log HTTP requests/responses to a HTTP client sent events source.</param>
        ///
        /// <param name="LogHTTPError_toConsole">A delegate to log HTTP errors to console.</param>
        /// <param name="LogHTTPError_toDisc">A delegate to log HTTP errors to disc.</param>
        /// <param name="LogHTTPError_toNetwork">A delegate to log HTTP errors to a network target.</param>
        /// <param name="LogHTTPError_toHTTPSSE">A delegate to log HTTP errors to a HTTP client sent events source.</param>
        ///
        /// <param name="LogFileCreator">A delegate to create a log file from the given context and log file name.</param>
        public AsavieAPIClientLogger(AsavieAPIClient AsavieAPIClient,
                                     String Context,

                                     HTTPRequestLoggerDelegate LogHTTPRequest_toConsole,
                                     HTTPResponseLoggerDelegate LogHTTPResponse_toConsole,
                                     HTTPRequestLoggerDelegate LogHTTPRequest_toDisc,
                                     HTTPResponseLoggerDelegate LogHTTPResponse_toDisc,

                                     HTTPRequestLoggerDelegate LogHTTPRequest_toNetwork   = null,
                                     HTTPResponseLoggerDelegate LogHTTPResponse_toNetwork = null,
                                     HTTPRequestLoggerDelegate LogHTTPRequest_toHTTPSSE   = null,
                                     HTTPResponseLoggerDelegate LogHTTPResponse_toHTTPSSE = null,

                                     HTTPResponseLoggerDelegate LogHTTPError_toConsole = null,
                                     HTTPResponseLoggerDelegate LogHTTPError_toDisc    = null,
                                     HTTPResponseLoggerDelegate LogHTTPError_toNetwork = null,
                                     HTTPResponseLoggerDelegate LogHTTPError_toHTTPSSE = null,

                                     LogfileCreatorDelegate LogFileCreator = null)

            : base(AsavieAPIClient,
                   Context.IsNotNullOrEmpty() ? Context : DefaultContext,

                   LogHTTPRequest_toConsole,
                   LogHTTPResponse_toConsole,
                   LogHTTPRequest_toDisc,
                   LogHTTPResponse_toDisc,

                   LogHTTPRequest_toNetwork,
                   LogHTTPResponse_toNetwork,
                   LogHTTPRequest_toHTTPSSE,
                   LogHTTPResponse_toHTTPSSE,

                   LogHTTPError_toConsole,
                   LogHTTPError_toDisc,
                   LogHTTPError_toNetwork,
                   LogHTTPError_toHTTPSSE,

                   LogFileCreator)

        {
            #region Initial checks

            this.AsavieAPIClient = AsavieAPIClient ?? throw new ArgumentNullException(nameof(AsavieAPIClient), "The given Asavie API client must not be null!");

            #endregion


            #region NewAuthToken

            RegisterEvent("NewAuthTokenRequest",
                          handler => AsavieAPIClient.OnNewAuthTokenRequest += handler,
                          handler => AsavieAPIClient.OnNewAuthTokenRequest -= handler,
                          "NewAuthToken", "Requests", "All").
            RegisterDefaultConsoleLogTarget(this).
            RegisterDefaultDiscLogTarget(this);

            RegisterEvent("NewAuthTokenResponse",
                          handler => AsavieAPIClient.OnNewAuthTokenResponse += handler,
                          handler => AsavieAPIClient.OnNewAuthTokenResponse -= handler,
                          "NewAuthToken", "Responses", "All").
            RegisterDefaultConsoleLogTarget(this).
            RegisterDefaultDiscLogTarget(this);

            #endregion

            #region SIMHardware

            RegisterEvent("SetSIMHardwareStateRequest",
                          handler => AsavieAPIClient.OnSetSIMHardwareStateRequest += handler,
                          handler => AsavieAPIClient.OnSetSIMHardwareStateRequest -= handler,
                          "SetSIMHardwareState", "SIMHardware", "Requests", "All").
            RegisterDefaultConsoleLogTarget(this).
            RegisterDefaultDiscLogTarget(this);

            RegisterEvent("SetSIMHardwareStateResponse",
                          handler => AsavieAPIClient.OnSetSIMHardwareStateResponse += handler,
                          handler => AsavieAPIClient.OnSetSIMHardwareStateResponse -= handler,
                          "SetSIMHardwareState", "SIMHardware", "Responses", "All").
            RegisterDefaultConsoleLogTarget(this).
            RegisterDefaultDiscLogTarget(this);

            #endregion
        }