Skip to content

Commit b0a954c

Browse files
committed
Move request logging
1 parent 207ef61 commit b0a954c

File tree

4 files changed

+39
-43
lines changed

4 files changed

+39
-43
lines changed

core/src/main/scala/sttp/client4/RequestOptions.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ package sttp.client4
22

33
import scala.concurrent.duration.Duration
44
import sttp.model.HttpVersion
5+
import sttp.client4.logging.LoggingOptions
56

67
case class RequestOptions(
78
followRedirects: Boolean,
89
readTimeout: Duration, // TODO: Use FiniteDuration while migrating to sttp-4
910
maxRedirects: Int,
1011
redirectToGet: Boolean,
1112
disableAutoDecompression: Boolean,
12-
httpVersion: Option[HttpVersion]
13+
httpVersion: Option[HttpVersion],
14+
loggingOptions: LoggingOptions
1315
)

core/src/main/scala/sttp/client4/SttpApi.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import scala.concurrent.duration._
1010
import sttp.capabilities.Streams
1111
import sttp.capabilities.Effect
1212
import sttp.client4.wrappers.FollowRedirectsBackend
13+
import sttp.client4.logging.LoggingOptions
1314

1415
trait SttpApi extends SttpExtensions with UriInterpolator {
1516
val DefaultReadTimeout: Duration = 1.minute
@@ -30,7 +31,8 @@ trait SttpApi extends SttpExtensions with UriInterpolator {
3031
FollowRedirectsBackend.MaxRedirects,
3132
redirectToGet = false,
3233
disableAutoDecompression = false,
33-
httpVersion = None
34+
httpVersion = None,
35+
loggingOptions = LoggingOptions()
3436
),
3537
Map()
3638
)

core/src/main/scala/sttp/client4/logging/Log.scala

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,11 @@ class DefaultLog[F[_]](
5757
) extends Log[F] {
5858

5959
def beforeRequestSend(request: GenericRequest[_, _]): F[Unit] =
60-
request.loggingOptions match {
61-
case Some(options) =>
62-
before(
63-
request,
64-
options.logRequestBody.getOrElse(logRequestBody),
65-
options.logRequestHeaders.getOrElse(logRequestHeaders)
66-
)
67-
case None => before(request, logRequestBody, logRequestHeaders)
68-
}
60+
before(
61+
request,
62+
request.loggingOptions.logRequestBody.getOrElse(logRequestBody),
63+
request.loggingOptions.logRequestHeaders.getOrElse(logRequestHeaders)
64+
)
6965

7066
private def before(request: GenericRequest[_, _], _logRequestBody: Boolean, _logRequestHeaders: Boolean): F[Unit] =
7167
logger(
@@ -82,19 +78,14 @@ class DefaultLog[F[_]](
8278
response: Response[_],
8379
responseBody: Option[String],
8480
elapsed: Option[Duration]
85-
): F[Unit] = request.loggingOptions match {
86-
case Some(options) =>
87-
handleResponse(
88-
request.showBasic,
89-
response,
90-
responseBody,
91-
options.logResponseBody.getOrElse(responseBody.isDefined),
92-
options.logResponseHeaders.getOrElse(logResponseHeaders),
93-
elapsed
94-
)
95-
case None =>
96-
handleResponse(request.showBasic, response, responseBody, responseBody.isDefined, logResponseHeaders, elapsed)
97-
}
81+
): F[Unit] = handleResponse(
82+
request.showBasic,
83+
response,
84+
responseBody,
85+
request.loggingOptions.logResponseBody.getOrElse(responseBody.isDefined),
86+
request.loggingOptions.logResponseHeaders.getOrElse(logResponseHeaders),
87+
elapsed
88+
)
9889

9990
private def handleResponse(
10091
showBasic: String,

core/src/main/scala/sttp/client4/requestBuilder.scala

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,6 @@ trait PartialRequestBuilder[+PR <: PartialRequestBuilder[PR, R], +R]
302302
*/
303303
def autoDecompressionDisabled: Boolean = options.disableAutoDecompression
304304

305-
// TODO: add similar functionality to Response
306-
307305
/** Set the HTTP version with which this request should be sent. Supported only in a few backends. */
308306
def httpVersion(version: HttpVersion): PR = withOptions(options.copy(httpVersion = Some(version)))
309307

@@ -315,30 +313,33 @@ trait PartialRequestBuilder[+PR <: PartialRequestBuilder[PR, R], +R]
315313
*/
316314
def httpVersion: Option[HttpVersion] = options.httpVersion
317315

318-
private val loggingOptionsTagKey = "loggingOptions"
319-
320-
/** Will only have effect when using the `LoggingBackend` */
321-
def logSettings(
316+
/** Sets per-request logging options. Will only have effect when using the [[sttp.client4.logging.LoggingBackend]]
317+
* wrapper.
318+
*/
319+
def loggingOptions(
322320
logRequestBody: Option[Boolean] = None,
323321
logResponseBody: Option[Boolean] = None,
324322
logRequestHeaders: Option[Boolean] = None,
325323
logResponseHeaders: Option[Boolean] = None
326-
): PR = {
327-
val loggingOptions = LoggingOptions(
328-
logRequestBody = logRequestBody,
329-
logResponseBody = logResponseBody,
330-
logRequestHeaders = logRequestHeaders,
331-
logResponseHeaders = logResponseHeaders
324+
): PR = withOptions(
325+
options.copy(loggingOptions =
326+
LoggingOptions(
327+
logRequestBody = logRequestBody,
328+
logResponseBody = logResponseBody,
329+
logRequestHeaders = logRequestHeaders,
330+
logResponseHeaders = logResponseHeaders
331+
)
332332
)
333-
this.tag(loggingOptionsTagKey, loggingOptions)
334-
}
333+
)
335334

336-
def logSettings(
337-
loggingOptions: Option[LoggingOptions]
338-
): PR =
339-
this.tag(loggingOptionsTagKey, loggingOptions)
335+
/** Sets per-request logging options. Will only have effect when using the [[sttp.client4.logging.LoggingBackend]]
336+
* wrapper.
337+
*/
338+
def loggingOptions(loggingOptions: LoggingOptions): PR = withOptions(options.copy(loggingOptions = loggingOptions))
340339

341-
def loggingOptions: Option[LoggingOptions] = tag(loggingOptionsTagKey).asInstanceOf[Option[LoggingOptions]]
340+
/** The per-request logging options, which have effect when using the [[sttp.client4.logging.LoggingBackend]] wrapper.
341+
*/
342+
def loggingOptions: LoggingOptions = options.loggingOptions
342343

343344
def show(
344345
includeBody: Boolean = true,

0 commit comments

Comments
 (0)