1717package org .typelevel .log4cats
1818
1919import cats ._
20- import cats .implicits ._
20+ import cats .effect .std .UUIDGen
21+ import cats .syntax .all ._
2122
2223import java .io .{PrintWriter , StringWriter }
2324import java .util .UUID
@@ -52,19 +53,35 @@ object PagingSelfAwareStructuredLogger {
5253 * @return
5354 * SelfAwareStructuredLogger with pagination.
5455 */
56+ def paged [F [_]: Monad : UUIDGen ](pageSizeK : Int = 64 , maxPageNeeded : Int = 999 )(
57+ logger : SelfAwareStructuredLogger [F ]
58+ ): SelfAwareStructuredLogger [F ] =
59+ new PagingSelfAwareStructuredLogger [F ](pageSizeK, maxPageNeeded, UUIDGen .randomUUID)(logger)
60+
61+ @ deprecated(" Use paged" , " 2.5.0" )
5562 def withPaging [F [_]: Monad ](pageSizeK : Int = 64 , maxPageNeeded : Int = 999 )(
5663 logger : SelfAwareStructuredLogger [F ]
5764 ): SelfAwareStructuredLogger [F ] =
5865 new PagingSelfAwareStructuredLogger [F ](pageSizeK, maxPageNeeded)(logger)
5966
60- private class PagingSelfAwareStructuredLogger [F [_]: Monad ](pageSizeK : Int , maxPageNeeded : Int )(
67+ private class PagingSelfAwareStructuredLogger [F [_]: Monad ](
68+ pageSizeK : Int ,
69+ maxPageNeeded : Int ,
70+ randomUUID : F [UUID ]
71+ )(
6172 sl : SelfAwareStructuredLogger [F ]
6273 ) extends SelfAwareStructuredLogger [F ] {
6374 if (pageSizeK <= 0 || maxPageNeeded <= 0 )
6475 throw new IllegalArgumentException (
6576 s " pageSizeK(= $pageSizeK) and maxPageNeeded(= $maxPageNeeded) must be positive numbers. "
6677 )
6778
79+ @ deprecated(" Use constructor with randomUUID" , " 2.5.0" )
80+ def this (pageSizeK : Int , maxPageNeeded : Int )(
81+ sl : SelfAwareStructuredLogger [F ]
82+ ) =
83+ this (pageSizeK, maxPageNeeded, Monad [F ].unit.map(_ => UUID .randomUUID()))(sl)
84+
6885 private val pageIndices = (1 to maxPageNeeded).toList
6986 private val logSplitIdN = " log_split_id"
7087 private val pageSize = pageSizeK * 1024
@@ -100,16 +117,17 @@ object PagingSelfAwareStructuredLogger {
100117 private def addCtx (
101118 msg : => String ,
102119 ctx : Map [String , String ]
103- ): (String , Map [String , String ]) = {
104- val logSplitId = UUID .randomUUID().show
105- (
106- logSplitId,
107- ctx
108- .updated(logSplitIdN, logSplitId)
109- .updated(" page_size" , s " ${pageSizeK.show} Kib " )
110- .updated(" log_size" , s " ${msg.length.show} Byte " )
111- )
112- }
120+ ): F [(String , Map [String , String ])] =
121+ randomUUID.map { uuid =>
122+ val logSplitId = uuid.show
123+ (
124+ logSplitId,
125+ ctx
126+ .updated(logSplitIdN, logSplitId)
127+ .updated(" page_size" , s " ${pageSizeK.show} Kib " )
128+ .updated(" log_size" , s " ${msg.length.show} Byte " )
129+ )
130+ }
113131
114132 private def doLogging (
115133 loggingLevelChk : => F [Boolean ],
@@ -118,8 +136,7 @@ object PagingSelfAwareStructuredLogger {
118136 ctx : Map [String , String ] = Map ()
119137 ): F [Unit ] = {
120138 loggingLevelChk.ifM(
121- {
122- val (logSplitId, newCtx) = addCtx(msg, ctx)
139+ addCtx(msg, ctx).flatMap { case (logSplitId, newCtx) =>
123140 pagedLogging(logOpWithCtx(newCtx), logSplitId, msg)
124141 },
125142 Applicative [F ].unit
0 commit comments