From 2b01c128549b835689df3894757df2c5eafcc2a8 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Wed, 22 Apr 2026 11:59:54 +0200 Subject: [PATCH 1/7] CIRC-2258 Remove PII from logs --- .../org/folio/circulation/domain/Loan.java | 2 +- .../domain/OverdueFineService.java | 2 -- .../circulation/domain/PrintEventRequest.java | 24 +++++++------- .../org/folio/circulation/domain/Request.java | 4 +-- .../domain/RequestServiceUtility.java | 2 +- .../org/folio/circulation/domain/User.java | 4 +-- .../circulation/domain/notes/NoteCreator.java | 6 ++-- .../session/PatronActionSessionService.java | 20 ++++++------ .../AutomatedPatronBlocksValidator.java | 2 -- .../validation/InactiveUserValidator.java | 4 --- .../ProxyRelationshipValidator.java | 3 -- .../validation/UserManualBlocksValidator.java | 6 ---- .../storage/CheckOutLockRepository.java | 21 +++++++------ .../storage/CirculationPolicyRepository.java | 2 +- .../storage/loans/LoanRepository.java | 14 +++------ .../storage/requests/RequestRepository.java | 1 - .../storage/users/UserRepository.java | 3 -- .../resources/ChangeDueDateResource.java | 2 +- .../resources/CheckOutByBarcodeResource.java | 4 --- .../EndPatronActionSessionResource.java | 3 +- .../resources/RequestNoticeSender.java | 2 +- .../HoldByBarcodeResource.java | 31 ++++++++++--------- .../renewal/RenewByBarcodeResource.java | 5 ++- .../circulation/services/EventPublisher.java | 17 +++++++--- .../services/PubSubPublishingService.java | 8 ++--- .../ActualCostRecordService.java | 7 ++--- ...gleOpenLoanByUserAndItemBarcodeFinder.java | 2 +- 27 files changed, 88 insertions(+), 113 deletions(-) diff --git a/src/main/java/org/folio/circulation/domain/Loan.java b/src/main/java/org/folio/circulation/domain/Loan.java index a8e57f88ea..bd83959fe0 100644 --- a/src/main/java/org/folio/circulation/domain/Loan.java +++ b/src/main/java/org/folio/circulation/domain/Loan.java @@ -95,7 +95,6 @@ @ToString(onlyExplicitlyIncluded = true) public class Loan implements ItemRelatedRecord, UserRelatedRecord { private static final Logger log = LogManager.getLogger(MethodHandles.lookup().lookupClass()); - @ToString.Include private final JsonObject representation; @Getter private final Item item; @@ -330,6 +329,7 @@ private String getStatusName() { return getNestedStringProperty(representation, STATUS, "name"); } + @ToString.Include(name = "id") public String getId() { return getProperty(representation, "id"); } diff --git a/src/main/java/org/folio/circulation/domain/OverdueFineService.java b/src/main/java/org/folio/circulation/domain/OverdueFineService.java index cd7ea777d6..b63221850b 100644 --- a/src/main/java/org/folio/circulation/domain/OverdueFineService.java +++ b/src/main/java/org/folio/circulation/domain/OverdueFineService.java @@ -84,8 +84,6 @@ private boolean shouldChargeOverdueFineOnRenewal(RenewalContext renewalContext) public CompletableFuture> createOverdueFineIfNecessary( CheckInContext context, String userId) { - log.debug("createOverdueFineIfNecessary:: parameters context: {}, userId: {}", - () -> context, () -> userId); if (!shouldChargeOverdueFineOnCheckIn(context)) { log.info("createOverdueFineIfNecessary:: loan on check in should not be charged"); return completedFuture(succeeded(null)); diff --git a/src/main/java/org/folio/circulation/domain/PrintEventRequest.java b/src/main/java/org/folio/circulation/domain/PrintEventRequest.java index 0145f4256b..2c1a4a6d13 100644 --- a/src/main/java/org/folio/circulation/domain/PrintEventRequest.java +++ b/src/main/java/org/folio/circulation/domain/PrintEventRequest.java @@ -1,19 +1,20 @@ package org.folio.circulation.domain; -import io.vertx.core.json.JsonObject; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import static lombok.AccessLevel.PRIVATE; +import static org.folio.circulation.support.json.JsonPropertyFetcher.getArrayProperty; +import static org.folio.circulation.support.json.JsonPropertyFetcher.getProperty; import java.lang.invoke.MethodHandles; import java.util.List; import java.util.Set; -import static lombok.AccessLevel.PRIVATE; -import static org.folio.circulation.support.json.JsonPropertyFetcher.getArrayProperty; -import static org.folio.circulation.support.json.JsonPropertyFetcher.getProperty; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import io.vertx.core.json.JsonObject; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; @AllArgsConstructor(access = PRIVATE) @ToString(onlyExplicitlyIncluded = true) @@ -24,16 +25,17 @@ public class PrintEventRequest { public static final String REQUESTER_NAME_FIELD = "requesterName"; public static final String PRINT_DATE_FIELD = "printEventDate"; - @ToString.Include @Getter private final JsonObject representation; + @ToString.Include @Getter private final List requestIds; @Getter private final String requesterId; @Getter private final String requesterName; + @ToString.Include @Getter private final String printEventDate; @@ -46,7 +48,7 @@ public static PrintEventRequest from(JsonObject representation) { final var printEventDate = getProperty(representation, PRINT_DATE_FIELD); if (requestIds.isEmpty() || null == requesterId || null == requesterName || null == printEventDate || !containsOnlyKnownFields(representation)) { - log.info("from:: Print Event Request JSON is invalid: {},{},{},{},{}", representation, requestIds, requesterName, requesterId, printEventDate); + log.info("from:: Print Event Request JSON is invalid: requestIds={}, printEventDate={}", requestIds, printEventDate); return null; } return new PrintEventRequest(representation, requestIds, requesterId, requesterName, printEventDate); diff --git a/src/main/java/org/folio/circulation/domain/Request.java b/src/main/java/org/folio/circulation/domain/Request.java index 6e4a6b7c0e..ed260d24c1 100644 --- a/src/main/java/org/folio/circulation/domain/Request.java +++ b/src/main/java/org/folio/circulation/domain/Request.java @@ -17,12 +17,12 @@ import static org.folio.circulation.domain.representations.RequestProperties.CANCELLATION_REASON_ID; import static org.folio.circulation.domain.representations.RequestProperties.CANCELLATION_REASON_NAME; import static org.folio.circulation.domain.representations.RequestProperties.CANCELLATION_REASON_PUBLIC_DESCRIPTION; -import static org.folio.circulation.domain.representations.RequestProperties.ITEM_LOCATION_CODE; import static org.folio.circulation.domain.representations.RequestProperties.ECS_REQUEST_PHASE; import static org.folio.circulation.domain.representations.RequestProperties.HOLDINGS_RECORD_ID; import static org.folio.circulation.domain.representations.RequestProperties.HOLD_SHELF_EXPIRATION_DATE; import static org.folio.circulation.domain.representations.RequestProperties.INSTANCE_ID; import static org.folio.circulation.domain.representations.RequestProperties.ITEM_ID; +import static org.folio.circulation.domain.representations.RequestProperties.ITEM_LOCATION_CODE; import static org.folio.circulation.domain.representations.RequestProperties.POSITION; import static org.folio.circulation.domain.representations.RequestProperties.REQUEST_DATE; import static org.folio.circulation.domain.representations.RequestProperties.REQUEST_EXPIRATION_DATE; @@ -65,7 +65,6 @@ public class Request implements ItemRelatedRecord, UserRelatedRecord { @With private final Operation operation; - @ToString.Include @With private final JsonObject requestRepresentation; @@ -259,6 +258,7 @@ public RequestFulfillmentPreference getfulfillmentPreference() { return RequestFulfillmentPreference.from(getfulfillmentPreferenceName()); } + @ToString.Include(name = "id") public String getId() { return requestRepresentation.getString("id"); } diff --git a/src/main/java/org/folio/circulation/domain/RequestServiceUtility.java b/src/main/java/org/folio/circulation/domain/RequestServiceUtility.java index 635c83f27c..0a27f59c0a 100644 --- a/src/main/java/org/folio/circulation/domain/RequestServiceUtility.java +++ b/src/main/java/org/folio/circulation/domain/RequestServiceUtility.java @@ -130,7 +130,7 @@ static Result refuseWhenInvalidUserAndPatronGroup( User requester = request.getRequester(); if (requester == null) { - log.error("refuseWhenInvalidUserAndPatronGroup:: user {} is null", request.getUserId()); + log.error("refuseWhenInvalidUserAndPatronGroup:: user is null"); return failedValidation("A valid user and patron group are required. User is null", "userId", request.getUserId()); } else if (requester.getPatronGroupId() == null) { diff --git a/src/main/java/org/folio/circulation/domain/User.java b/src/main/java/org/folio/circulation/domain/User.java index 473bb4d42c..5e73c1f25c 100644 --- a/src/main/java/org/folio/circulation/domain/User.java +++ b/src/main/java/org/folio/circulation/domain/User.java @@ -16,9 +16,9 @@ import java.util.Objects; import java.util.stream.Collectors; -import io.vertx.core.json.JsonArray; import org.folio.circulation.support.utils.ClockUtil; +import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import lombok.ToString; import lombok.val; @@ -33,7 +33,6 @@ public class User { private final PatronGroup patronGroup; private final Collection departments; - @ToString.Include private final JsonObject representation; public User(JsonObject representation) { @@ -87,6 +86,7 @@ public String getBarcode() { return getProperty(representation, "barcode"); } + @ToString.Include(name = "id") public String getId() { return getProperty(representation, "id"); } diff --git a/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java b/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java index e64d52cb75..dcd9743bd2 100644 --- a/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java +++ b/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java @@ -1,12 +1,10 @@ package org.folio.circulation.domain.notes; import java.lang.invoke.MethodHandles; +import java.util.concurrent.CompletableFuture; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; - -import java.util.concurrent.CompletableFuture; - import org.folio.circulation.domain.NoteLink; import org.folio.circulation.infrastructure.storage.notes.NotesRepository; import org.folio.circulation.support.results.Result; @@ -20,7 +18,7 @@ public NoteCreator(NotesRepository notesRepository) { } public CompletableFuture> createGeneralUserNote(String userId, String message) { - log.info("createGeneralUserNote:: creating general user note for userId {}", userId); + log.debug("createGeneralUserNote:: creating general user note"); final GeneralNoteTypeValidator validator = new GeneralNoteTypeValidator(); return notesRepository.findGeneralNoteType() diff --git a/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java b/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java index 5f523faf95..db6daed471 100644 --- a/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java +++ b/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java @@ -18,12 +18,12 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.folio.circulation.domain.CheckInContext; import org.folio.circulation.domain.Loan; import org.folio.circulation.domain.LoanAndRelatedRecords; -import org.folio.circulation.domain.User; import org.folio.circulation.domain.notice.ImmediatePatronNoticeService; import org.folio.circulation.domain.notice.NoticeEventType; import org.folio.circulation.domain.notice.PatronNoticeEvent; @@ -36,6 +36,7 @@ import org.folio.circulation.support.Clients; import org.folio.circulation.support.http.client.PageLimit; import org.folio.circulation.support.results.Result; + import lombok.AllArgsConstructor; @AllArgsConstructor @@ -67,7 +68,7 @@ public static PatronActionSessionService using(Clients clients, public CompletableFuture> saveCheckOutSessionRecord( LoanAndRelatedRecords records) { - log.info("saveCheckOutSessionRecord:: saving check-out session record for patron {}", records.getUserId()); + log.info("saveCheckOutSessionRecord:: saving check-out session record"); UUID patronId = UUID.fromString(records.getUserId()); UUID loanId = UUID.fromString(records.getLoan().getId()); @@ -96,7 +97,7 @@ public CompletableFuture> saveCheckInSessionRecord(CheckI } public CompletableFuture> endSessions(String patronId, PatronActionType actionType) { - log.info("endSessions:: ending {} sessions for patron {}", actionType, patronId); + log.info("endSessions:: ending {} sessions", actionType); return safelyInitialise(() -> findSessions(patronId, actionType)) .thenCompose(r -> r.after(this::processSessions)) .thenApply(this::handleResult); @@ -113,7 +114,7 @@ public CompletableFuture> endExpiredSessions(List e private CompletableFuture>> findSessions(String patronId, PatronActionType actionType) { - log.info("findSessions:: finding {} sessions for patron {}", actionType, patronId); + log.info("findSessions:: finding {} sessions", actionType); return patronActionSessionRepository.findPatronActionSessions(patronId, actionType, DEFAULT_SESSION_SIZE_PAGE_LIMIT); @@ -196,11 +197,8 @@ private CompletableFuture>> sendNotice( return ofAsync(() -> null); } - //The user is the same for all sessions - User user = sessions.getFirst().getLoan().getUser(); - - log.info("Attempting to send a notice for a group of {} action sessions to user {}", - sessions.size(), user.getId()); + log.info("Attempting to send a notice for a group of {} action sessions", + sessions.size()); return allOf(sessions, this::buildNoticeEvents) .thenApply(result -> result.map(patronNoticeService::acceptNoticeEvents)) @@ -255,11 +253,11 @@ private CompletableFuture> getRecipientId(Loan loan) { return proxyRelationshipValidator.hasActiveProxyRelationshipWithNotificationsSentToProxy(loan) .thenApply(result -> result.map(sentNoProxy -> { if (Boolean.TRUE.equals(sentNoProxy)) { - log.info("getRecipientId:: notice recipient is proxy user: {}", loan.getProxyUserId()); + log.info("getRecipientId:: notice recipient is proxy user"); return loan.getProxyUserId(); } - log.info("getRecipientId:: notice recipient is user: {}", loan.getProxyUserId()); + log.info("getRecipientId:: notice recipient is user"); return loan.getUserId(); })); } diff --git a/src/main/java/org/folio/circulation/domain/validation/AutomatedPatronBlocksValidator.java b/src/main/java/org/folio/circulation/domain/validation/AutomatedPatronBlocksValidator.java index fe6916be30..d7b2beb0d4 100644 --- a/src/main/java/org/folio/circulation/domain/validation/AutomatedPatronBlocksValidator.java +++ b/src/main/java/org/folio/circulation/domain/validation/AutomatedPatronBlocksValidator.java @@ -83,8 +83,6 @@ public AutomatedPatronBlocksValidator(Clients clients) { private CompletableFuture> refuse(String userId, Predicate actionPredicate, T mapTo) { - log.debug("refuse:: parameters userId: {}, actionPredicate, mapTo", userId); - return ofAsync(() -> userId) .thenComposeAsync(r -> r.after(automatedPatronBlocksRepository::findByUserId)) .thenComposeAsync(r -> r.after(blocks -> getActionBlock(blocks, actionPredicate))) diff --git a/src/main/java/org/folio/circulation/domain/validation/InactiveUserValidator.java b/src/main/java/org/folio/circulation/domain/validation/InactiveUserValidator.java index 1c635cb8ef..f2a866cf87 100644 --- a/src/main/java/org/folio/circulation/domain/validation/InactiveUserValidator.java +++ b/src/main/java/org/folio/circulation/domain/validation/InactiveUserValidator.java @@ -36,8 +36,6 @@ public class InactiveUserValidator { } public static InactiveUserValidator forProxy(String proxyUserBarcode) { - log.debug("forProxy:: parameters proxyUserBarcode: {}", proxyUserBarcode); - return new InactiveUserValidator(LoanAndRelatedRecords::getProxy, "Cannot check out via inactive proxying user", "Cannot determine if proxying user is active or not", @@ -46,8 +44,6 @@ public static InactiveUserValidator forProxy(String proxyUserBarcode) { } public static InactiveUserValidator forUser(String userBarcode) { - log.debug("forUser:: parameters userBarcode: {}", userBarcode); - return new InactiveUserValidator(records -> records.getLoan().getUser(), "Cannot check out to inactive user", "Cannot determine if user is active or not", diff --git a/src/main/java/org/folio/circulation/domain/validation/ProxyRelationshipValidator.java b/src/main/java/org/folio/circulation/domain/validation/ProxyRelationshipValidator.java index 5da619faaa..0ed8f57323 100644 --- a/src/main/java/org/folio/circulation/domain/validation/ProxyRelationshipValidator.java +++ b/src/main/java/org/folio/circulation/domain/validation/ProxyRelationshipValidator.java @@ -105,9 +105,6 @@ private CompletableFuture> doesNotHaveActiveProxyRelationship( } private Result proxyRelationshipQuery(String proxyUserId, String sponsorUserId) { - log.debug("proxyRelationshipQuery:: parameters proxyUserId: {}, sponsorUserId: {}", proxyUserId, - sponsorUserId); - final Result proxyUserIdQuery = exactMatch("proxyUserId", proxyUserId); final Result userIdQuery = exactMatch("userId", sponsorUserId); diff --git a/src/main/java/org/folio/circulation/domain/validation/UserManualBlocksValidator.java b/src/main/java/org/folio/circulation/domain/validation/UserManualBlocksValidator.java index c66f453906..d811d06211 100644 --- a/src/main/java/org/folio/circulation/domain/validation/UserManualBlocksValidator.java +++ b/src/main/java/org/folio/circulation/domain/validation/UserManualBlocksValidator.java @@ -86,9 +86,6 @@ public CompletableFuture> refuseWhenUserIsBlocked( private CompletableFuture>> failIfPatronIsBlocked( Predicate isUserBlocked, String userId, String message) { - log.debug("failIfPatronIsBlocked:: parameters isUserBlocked, userId: {}, message: {}", userId, - message); - return userManualBlocksFetcher.findByQuery(exactMatch("userId", userId)) .thenApply(userManualBlockResult -> userManualBlockResult .failWhen(userManualBlockMultipleRecords -> of(() -> @@ -99,9 +96,6 @@ private CompletableFuture>> failIfPatron private HttpFailure createUserBlockedValidationError( MultipleRecords userManualBlocks, String message) { - log.debug("createUserBlockedValidationError:: parameters isUserBlocked, userId: {}, message: {}", - () -> multipleRecordsAsString(userManualBlocks), () -> message); - final String reason = userManualBlocks.getRecords().stream() .map(UserManualBlock::getDesc).collect(Collectors.joining(";")); diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java index 84571cfc19..d4ba113603 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java @@ -1,8 +1,11 @@ package org.folio.circulation.infrastructure.storage; -import io.vertx.core.Vertx; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.RoutingContext; +import static org.folio.circulation.support.http.ResponseMapping.forwardOnFailure; +import static org.folio.circulation.support.http.ResponseMapping.mapUsingJson; + +import java.lang.invoke.MethodHandles; +import java.util.concurrent.CompletableFuture; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.folio.circulation.domain.CheckOutLock; @@ -13,11 +16,9 @@ import org.folio.circulation.support.http.client.ResponseInterpreter; import org.folio.circulation.support.results.Result; -import java.lang.invoke.MethodHandles; -import java.util.concurrent.CompletableFuture; - -import static org.folio.circulation.support.http.ResponseMapping.forwardOnFailure; -import static org.folio.circulation.support.http.ResponseMapping.mapUsingJson; +import io.vertx.core.Vertx; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; public class CheckOutLockRepository { private static final Logger log = LogManager.getLogger(MethodHandles.lookup().lookupClass()); @@ -51,7 +52,7 @@ public void createLockWithRetry(int noOfAttempts, CompletableFuture> create(LoanAndRelatedRecords records) { - log.debug("create:: trying to create lock for userId {} ", records.getUserId()); + log.debug("create:: trying to create checkout lock"); final ResponseInterpreter interpreter = new ResponseInterpreter() .flatMapOn(201, mapUsingJson(CheckOutLock::from)) @@ -63,7 +64,7 @@ public CompletableFuture> create(LoanAndRelatedRecords reco } public CompletableFuture> deleteCheckoutLockById(String checkOutLockId) { - log.debug("deleteCheckoutLockById:: deleting the lock for userId {} ", checkOutLockId); + log.debug("deleteCheckoutLockById:: deleting checkout lock"); return checkOutLockClient.delete(checkOutLockId); } diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/CirculationPolicyRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/CirculationPolicyRepository.java index 69579ce931..426225c3ef 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/CirculationPolicyRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/CirculationPolicyRepository.java @@ -100,7 +100,7 @@ public CompletableFuture> lookupPolicyId(Item item, } if (user.getPatronGroupId() == null) { - log.error("PatronGroupId is null for user {}", user.getId()); + log.error("lookupPolicyId:: patronGroupId is null"); return completedFuture(failedDueToServerError("Unable to apply circulation rules to a user with null value as patronGroupId")); } diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java index a1c8b0a29b..5b03fd1815 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java @@ -120,9 +120,8 @@ public CompletableFuture> createLoan( public CompletableFuture> updateLoan( LoanAndRelatedRecords loanAndRelatedRecords) { - log.debug("updateLoan:: parameters loanAndRelatedRecords: {}", loanAndRelatedRecords); Loan loan = loanAndRelatedRecords.getLoan(); - log.info("Loan " + loan.getId() + " prior to update: " + loan.asJson().toString()); + log.debug("updateLoan:: loan id: {}", loan.getId()); return updateLoan(loanAndRelatedRecords.getLoan()) .thenApply(mapResult(loanAndRelatedRecords::withLoan)); } @@ -256,7 +255,7 @@ private CompletableFuture>> queryLoanStorage( public CompletableFuture>> findClosedLoans( String userId, PageLimit pageLimit) { - log.debug("findClosedLoans:: parameters userId: {}, pageLimit: {}", userId, pageLimit); + log.debug("findClosedLoans:: parameters pageLimit: {}", pageLimit); Result query = exactMatch(USER_ID, userId); final Result statusQuery = getStatusCQLQuery("Closed"); @@ -448,8 +447,7 @@ public CompletableFuture>> findOpenLoansByUserIdWit public CompletableFuture>> findOpenLoansByUserIdWithItem( PageLimit loansLimit, String userId) { - log.debug("findOpenLoansByUserIdWithItem:: parameters loansLimit: {}, userId: {}", - loansLimit, userId); + log.debug("findOpenLoansByUserIdWithItem:: parameters loansLimit: {}", loansLimit); return findOpenLoansByUserId(loansLimit, userId) .thenComposeAsync(loans -> itemRepository.fetchItemsFor(loans, Loan::withItem)); @@ -458,8 +456,7 @@ public CompletableFuture>> findOpenLoansByUserIdWit public CompletableFuture>> findOpenLoansByUserIdWithItemAndHoldings( PageLimit loansLimit, String userId) { - log.debug("findOpenLoansByUserIdWithItemAndHoldings:: parameters loansLimit: {}, userId: {}", - loansLimit, userId); + log.debug("findOpenLoansByUserIdWithItemAndHoldings:: parameters loansLimit: {}", loansLimit); // Only fetching HoldingsRecord for each item to avoid fetching instances, locations etc. return findOpenLoansByUserId(loansLimit, userId) @@ -469,8 +466,7 @@ public CompletableFuture>> findOpenLoansByUserIdWit public CompletableFuture>> findOpenLoansByUserId( PageLimit loansLimit, String userId) { - log.debug("findOpenLoansByUserId:: parameters loansLimit: {}, userId: {}", - loansLimit, userId); + log.debug("findOpenLoansByUserId:: parameters loansLimit: {}", loansLimit); final Result statusQuery = getStatusCQLQuery("Open"); final Result userIdQuery = exactMatch(USER_ID, userId); diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/requests/RequestRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/requests/RequestRepository.java index 566bb5059b..a8267ee714 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/requests/RequestRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/requests/RequestRepository.java @@ -346,7 +346,6 @@ private CompletableFuture> fetchPatronGroups(Result res } private CompletableFuture> getUser(String userId) { - log.debug("getUser:: parameters userId: {}", userId); return userRepository.getUser(userId); } diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/users/UserRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/users/UserRepository.java index b84208fb15..6bfd1d6c0b 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/users/UserRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/users/UserRepository.java @@ -80,7 +80,6 @@ public CompletableFuture> getProxyUser(UserRelatedRecord userRelate } public CompletableFuture> getUser(String userId) { - log.debug("getUser:: parameters userId: {}", userId); if(isNull(userId)) { log.info("getUser:: userId is null"); return ofAsync(() -> null); @@ -95,7 +94,6 @@ public CompletableFuture> getUser(String userId) { } public CompletableFuture> getUserWithPatronGroup(String userId) { - log.debug("getUserWithPatronGroup:: parameters userId: {}", userId); if(isNull(userId)) { log.info("getUserWithPatronGroup:: userId is null"); return ofAsync(() -> null); @@ -187,7 +185,6 @@ public CompletableFuture>> getUsersForUserIds(Collectio } public CompletableFuture> getUserFailOnNotFound(String userId) { - log.debug("getUserFailOnNotFound:: parameters userId: {}", userId); if(isNull(userId)) { log.info("getUserFailOnNotFound:: userId is null"); return completedFuture(failedValidation("user is not found", "userId", userId)); diff --git a/src/main/java/org/folio/circulation/resources/ChangeDueDateResource.java b/src/main/java/org/folio/circulation/resources/ChangeDueDateResource.java index 2988e7d007..80517e05ee 100644 --- a/src/main/java/org/folio/circulation/resources/ChangeDueDateResource.java +++ b/src/main/java/org/folio/circulation/resources/ChangeDueDateResource.java @@ -147,7 +147,7 @@ private LoanAndRelatedRecords unsetDueDateChangedByRecallIfNoOpenRecallsInQueue( () -> loanAndRelatedRecords); RequestQueue queue = loanAndRelatedRecords.getRequestQueue(); Loan loan = loanAndRelatedRecords.getLoan(); - log.info("Loan {} prior to flag check: {}", loan.getId(), loan.asJson().toString()); + log.debug("unsetDueDateChangedByRecallIfNoOpenRecallsInQueue:: checking loan: {}", loan.getId()); if (loan.wasDueDateChangedByRecall() && !queue.hasOpenRecalls()) { log.info("Loan {} registers as having due date change flag set to true and no open recalls in queue.", loan.getId()); return loanAndRelatedRecords.withLoan(loan.unsetDueDateChangedByRecall()); diff --git a/src/main/java/org/folio/circulation/resources/CheckOutByBarcodeResource.java b/src/main/java/org/folio/circulation/resources/CheckOutByBarcodeResource.java index f2d745a777..dc3db417c5 100644 --- a/src/main/java/org/folio/circulation/resources/CheckOutByBarcodeResource.java +++ b/src/main/java/org/folio/circulation/resources/CheckOutByBarcodeResource.java @@ -345,8 +345,6 @@ private CompletableFuture> lookupUser(String barco UserRepository userRepository, Result loanResult, CirculationErrorHandler errorHandler) { - log.debug("lookupUser:: parameters barcode: {}", barcode); - return userRepository.getUserByBarcode(barcode) .thenApply(userResult -> loanResult.combine(userResult, LoanAndRelatedRecords::withRequestingUser)) .thenApply(r -> errorHandler.handleValidationResult(r, FAILED_TO_FETCH_USER, loanResult)); @@ -356,8 +354,6 @@ private CompletableFuture> lookupProxyUser(String UserRepository userRepository, Result loanResult, CirculationErrorHandler errorHandler) { - log.debug("lookupProxyUser:: parameters barcode: {}", barcode); - return userRepository.getProxyUserByBarcode(barcode) .thenApply(userResult -> loanResult.combine(userResult, LoanAndRelatedRecords::withProxyingUser)) .thenApply(r -> errorHandler.handleValidationResult(r, FAILED_TO_FETCH_PROXY_USER, loanResult)); diff --git a/src/main/java/org/folio/circulation/resources/EndPatronActionSessionResource.java b/src/main/java/org/folio/circulation/resources/EndPatronActionSessionResource.java index 39b50630e1..ab184c6239 100644 --- a/src/main/java/org/folio/circulation/resources/EndPatronActionSessionResource.java +++ b/src/main/java/org/folio/circulation/resources/EndPatronActionSessionResource.java @@ -60,8 +60,7 @@ private void process(RoutingContext routingContext) { String patronId = endSessionRequest.getPatronId(); PatronActionType actionType = endSessionRequest.getActionType(); patronActionSessionService.endSessions(patronId, actionType); - log.info("process:: session ended successfully: patronId: {}, actionType: {}", - patronId, actionType); + log.info("process:: session ended successfully: actionType={}", actionType); noContent().writeTo(routingContext.response()); } } diff --git a/src/main/java/org/folio/circulation/resources/RequestNoticeSender.java b/src/main/java/org/folio/circulation/resources/RequestNoticeSender.java index 18745af08b..e71f887554 100644 --- a/src/main/java/org/folio/circulation/resources/RequestNoticeSender.java +++ b/src/main/java/org/folio/circulation/resources/RequestNoticeSender.java @@ -311,7 +311,7 @@ private CompletableFuture> fetchDataAndSendRequestAwaitingPickupNot private CompletableFuture> fetchRequester(Request request) { String requesterId = request.getRequesterId(); - log.info("fetchRequester:: requesterId: {}", requesterId); + log.debug("fetchRequester:: fetching requester"); return userRepository.getUserWithPatronGroup(requesterId) .thenApply(r -> r.failWhen(this::isNull, diff --git a/src/main/java/org/folio/circulation/resources/foruseatlocation/HoldByBarcodeResource.java b/src/main/java/org/folio/circulation/resources/foruseatlocation/HoldByBarcodeResource.java index f25fdb29c1..21fc2b9ef2 100644 --- a/src/main/java/org/folio/circulation/resources/foruseatlocation/HoldByBarcodeResource.java +++ b/src/main/java/org/folio/circulation/resources/foruseatlocation/HoldByBarcodeResource.java @@ -1,9 +1,16 @@ package org.folio.circulation.resources.foruseatlocation; -import io.vertx.core.http.HttpClient; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.Router; -import io.vertx.ext.web.RoutingContext; +import static org.folio.circulation.domain.policy.library.ClosedLibraryStrategyUtils.determineClosedLibraryStrategyForHoldShelfExpirationDate; +import static org.folio.circulation.domain.representations.LoanProperties.USAGE_STATUS_HELD; +import static org.folio.circulation.resources.foruseatlocation.HoldByBarcodeRequest.forUseAtLocationIsNotEnabledFailure; +import static org.folio.circulation.resources.foruseatlocation.HoldByBarcodeRequest.loanIsNotForUseAtLocationFailure; +import static org.folio.circulation.resources.foruseatlocation.HoldByBarcodeRequest.noOpenLoanFailure; +import static org.folio.circulation.resources.handlers.error.CirculationErrorType.FAILED_TO_FIND_SINGLE_OPEN_LOAN; + +import java.lang.invoke.MethodHandles; +import java.time.ZonedDateTime; +import java.util.concurrent.CompletableFuture; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.folio.circulation.domain.Loan; @@ -35,16 +42,10 @@ import org.folio.circulation.support.results.Result; import org.folio.circulation.support.utils.ClockUtil; -import java.lang.invoke.MethodHandles; -import java.time.ZonedDateTime; -import java.util.concurrent.CompletableFuture; - -import static org.folio.circulation.domain.policy.library.ClosedLibraryStrategyUtils.determineClosedLibraryStrategyForHoldShelfExpirationDate; -import static org.folio.circulation.domain.representations.LoanProperties.*; -import static org.folio.circulation.resources.foruseatlocation.HoldByBarcodeRequest.forUseAtLocationIsNotEnabledFailure; -import static org.folio.circulation.resources.foruseatlocation.HoldByBarcodeRequest.loanIsNotForUseAtLocationFailure; -import static org.folio.circulation.resources.foruseatlocation.HoldByBarcodeRequest.noOpenLoanFailure; -import static org.folio.circulation.resources.handlers.error.CirculationErrorType.FAILED_TO_FIND_SINGLE_OPEN_LOAN; +import io.vertx.core.http.HttpClient; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.Router; +import io.vertx.ext.web.RoutingContext; public class HoldByBarcodeResource extends Resource { private static final String rootPath = "/circulation/hold-by-barcode-for-use-at-location"; @@ -161,7 +162,7 @@ private Result setActionToHeld(Result> updateLoan(HoldByBarcodeRequest request, LoanRepository loanRepository) { - log.debug("updateLoan:: loan parameter: {}", request.getLoan().asJson()); + log.debug("updateLoan:: loan id: {}", request.getLoan().getId()); return loanRepository.updateLoan(request.getLoan()) .thenApply(loanResult -> loanResult.map(request::withLoan)); } diff --git a/src/main/java/org/folio/circulation/resources/renewal/RenewByBarcodeResource.java b/src/main/java/org/folio/circulation/resources/renewal/RenewByBarcodeResource.java index 84596b7c63..2152162567 100644 --- a/src/main/java/org/folio/circulation/resources/renewal/RenewByBarcodeResource.java +++ b/src/main/java/org/folio/circulation/resources/renewal/RenewByBarcodeResource.java @@ -9,12 +9,12 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.folio.circulation.domain.Loan; +import org.folio.circulation.infrastructure.storage.inventory.ItemRepository; import org.folio.circulation.infrastructure.storage.loans.LoanRepository; import org.folio.circulation.infrastructure.storage.users.UserRepository; import org.folio.circulation.resources.handlers.error.CirculationErrorHandler; import org.folio.circulation.storage.SingleOpenLoanByUserAndItemBarcodeFinder; import org.folio.circulation.support.results.Result; -import org.folio.circulation.infrastructure.storage.inventory.ItemRepository; import io.vertx.core.http.HttpClient; import io.vertx.core.json.JsonObject; @@ -31,8 +31,7 @@ protected CompletableFuture> findLoan(JsonObject request, LoanRepository loanRepository, ItemRepository itemRepository, UserRepository userRepository, CirculationErrorHandler errorHandler) { - log.info("findLoan:: itemBarcode={}, userBarcode={}", () -> request.getString( - RenewByBarcodeRequest.ITEM_BARCODE), () -> request.getString(RenewByBarcodeRequest.USER_BARCODE)); + log.info("findLoan:: itemBarcode={}", () -> request.getString(RenewByBarcodeRequest.ITEM_BARCODE)); final SingleOpenLoanByUserAndItemBarcodeFinder finder = new SingleOpenLoanByUserAndItemBarcodeFinder(loanRepository, diff --git a/src/main/java/org/folio/circulation/services/EventPublisher.java b/src/main/java/org/folio/circulation/services/EventPublisher.java index 334a37f7a4..138eed8707 100644 --- a/src/main/java/org/folio/circulation/services/EventPublisher.java +++ b/src/main/java/org/folio/circulation/services/EventPublisher.java @@ -39,9 +39,17 @@ import java.time.ZonedDateTime; import java.util.Optional; import java.util.concurrent.CompletableFuture; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.folio.circulation.domain.*; +import org.folio.circulation.domain.CheckInContext; +import org.folio.circulation.domain.EventType; +import org.folio.circulation.domain.Item; +import org.folio.circulation.domain.Loan; +import org.folio.circulation.domain.LoanAndRelatedRecords; +import org.folio.circulation.domain.Request; +import org.folio.circulation.domain.RequestAndRelatedRecords; +import org.folio.circulation.domain.User; import org.folio.circulation.domain.anonymization.LoanAnonymizationRecords; import org.folio.circulation.domain.policy.LoanPolicy; import org.folio.circulation.domain.policy.Period; @@ -57,6 +65,7 @@ import org.folio.circulation.support.HttpFailure; import org.folio.circulation.support.http.server.WebContext; import org.folio.circulation.support.results.Result; + import io.vertx.core.json.JsonObject; public class EventPublisher { @@ -310,8 +319,7 @@ public CompletableFuture> publishDueDateLogEvent(Loan loan) { } private CompletableFuture> publishDueDateLogEvent(Loan loan, String updatedByUserId) { - logger.info("publishDueDateLogEvent:: parameters loanId: {}, updatedByUserId: {}", - loan::getId, () -> updatedByUserId); + logger.info("publishDueDateLogEvent:: parameters loanId: {}", loan::getId); return getTenantTimeZone() .thenApply(zoneResult -> zoneResult.map(zoneId -> { var logDescription = getLoanDueDateChangeLog(loan, zoneId); @@ -325,8 +333,7 @@ private CompletableFuture> publishDueDateLogEvent(Loan loan, String } private CompletableFuture> publishRenewedEvent(Loan loan, String updatedByUserId) { - logger.info("publishRenewedEvent:: parameters loanId: {}, updatedByUserId: {}", - loan::getId, () -> updatedByUserId); + logger.info("publishRenewedEvent:: parameters loanId: {}", loan::getId); return getTenantTimeZone() .thenApply(zoneResult -> zoneResult.map(zoneId -> { var logDescription = getLoanDueDateChangeLog(loan, zoneId); diff --git a/src/main/java/org/folio/circulation/services/PubSubPublishingService.java b/src/main/java/org/folio/circulation/services/PubSubPublishingService.java index e269feef4c..a81b2467e5 100644 --- a/src/main/java/org/folio/circulation/services/PubSubPublishingService.java +++ b/src/main/java/org/folio/circulation/services/PubSubPublishingService.java @@ -47,12 +47,12 @@ public CompletableFuture publishEvent(String eventType, String payload) vertxContext.runOnContext(v -> PubSubClientUtils.sendEventMessage(event, params) .whenComplete((result, throwable) -> { if (Boolean.TRUE.equals(result)) { - logger.info("Event published successfully. ID: {}, type: {}, payload: {}", - event.getId(), event.getEventType(), event.getEventPayload()); + logger.info("Event published successfully. ID: {}, type: {}", + event.getId(), event.getEventType()); publishResult.complete(true); } else { - logger.error("Failed to publish event. ID: {}, type: {}, payload: {}, cause: {}", - event.getId(), event.getEventType(), event.getEventPayload(), throwable); + logger.error("Failed to publish event. ID: {}, type: {}, cause: {}", + event.getId(), event.getEventType(), throwable); if (throwable == null) { publishResult.complete(false); } else { diff --git a/src/main/java/org/folio/circulation/services/actualcostrecord/ActualCostRecordService.java b/src/main/java/org/folio/circulation/services/actualcostrecord/ActualCostRecordService.java index bbb2e9130c..6829970073 100644 --- a/src/main/java/org/folio/circulation/services/actualcostrecord/ActualCostRecordService.java +++ b/src/main/java/org/folio/circulation/services/actualcostrecord/ActualCostRecordService.java @@ -138,13 +138,12 @@ private CompletableFuture> lookupPatronGroup( User user = context.getLoan().getUser(); if (user.getPatronGroup() != null) { - log.info("lookupPatronGroup:: patron group already exists: {} for userId: {}, skipping lookup", - user.getPatronGroup().getGroup(), user.getId()); + log.info("lookupPatronGroup:: patron group already exists: {}, skipping lookup", + user.getPatronGroup().getGroup()); return ofAsync(context); } - log.info("lookupPatronGroup:: patron group not found, fetching from repository for userId: {}", - user::getId); + log.info("lookupPatronGroup:: patron group not found, fetching from repository"); return patronGroupRepository.findGroupForUser(user) .thenApply(r -> r.map(context.getLoan()::withUser)) diff --git a/src/main/java/org/folio/circulation/storage/SingleOpenLoanByUserAndItemBarcodeFinder.java b/src/main/java/org/folio/circulation/storage/SingleOpenLoanByUserAndItemBarcodeFinder.java index eb67054744..cb1871bf4c 100644 --- a/src/main/java/org/folio/circulation/storage/SingleOpenLoanByUserAndItemBarcodeFinder.java +++ b/src/main/java/org/folio/circulation/storage/SingleOpenLoanByUserAndItemBarcodeFinder.java @@ -36,7 +36,7 @@ public SingleOpenLoanByUserAndItemBarcodeFinder( } public CompletableFuture> findLoan(String itemBarcode, String userBarcode) { - log.debug("findLoan:: parameters itemBarcode: {}, userBarcode: {}", itemBarcode, userBarcode); + log.debug("findLoan:: parameters itemBarcode: {}", itemBarcode); final ItemByBarcodeInStorageFinder itemFinder = new ItemByBarcodeInStorageFinder( this.itemRepository); From 2a5273276b6619a249d12d04863ec7e31ac98d03 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Wed, 22 Apr 2026 16:11:34 +0200 Subject: [PATCH 2/7] CIRC-2258 Remove PII from logs --- .../folio/circulation/resources/LoanCollectionResource.java | 2 +- .../java/org/folio/circulation/support/logging/LogHelper.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/folio/circulation/resources/LoanCollectionResource.java b/src/main/java/org/folio/circulation/resources/LoanCollectionResource.java index c9ac2fc34f..c3daa0f5b5 100644 --- a/src/main/java/org/folio/circulation/resources/LoanCollectionResource.java +++ b/src/main/java/org/folio/circulation/resources/LoanCollectionResource.java @@ -427,7 +427,7 @@ private LoanAndRelatedRecords unsetDueDateChangedByRecallIfNoOpenRecallsInQueue( RequestQueue queue = loanAndRelatedRecords.getRequestQueue(); Loan loan = loanAndRelatedRecords.getLoan(); - log.info("Loan {} prior to flag check: {}", loan.getId(), loan.asJson()); + log.debug("unsetDueDateChangedByRecallIfNoOpenRecallsInQueue:: checking loan: {}", loan.getId()); if (loan.wasDueDateChangedByRecall() && !queue.hasOpenRecalls()) { log.info("Loan {} registers as having due date change flag set to true and no open recalls in queue.", loan.getId()); return loanAndRelatedRecords.withLoan(loan.unsetDueDateChangedByRecall()); diff --git a/src/main/java/org/folio/circulation/support/logging/LogHelper.java b/src/main/java/org/folio/circulation/support/logging/LogHelper.java index e2c56fca66..db3b0af117 100644 --- a/src/main/java/org/folio/circulation/support/logging/LogHelper.java +++ b/src/main/java/org/folio/circulation/support/logging/LogHelper.java @@ -76,8 +76,8 @@ public static void populateLoggingContext(RoutingContext routingContext) { String requestId = request.getHeader(RestVerticle.OKAPI_REQUESTID_HEADER); String userId = request.getHeader(RestVerticle.OKAPI_USERID_HEADER); - log.debug("populateLoggingContext:: populating context: tenantId={}, requestId={}, userId={}", - tenantId, requestId, userId); + log.debug("populateLoggingContext:: populating context: tenantId={}, requestId={}", + tenantId, requestId); FolioLoggingContext.put("tenantId", tenantId); FolioLoggingContext.put("requestId", requestId); From d50af6e45c46c8ed76da6b8096ebc1d30bf246a6 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Fri, 24 Apr 2026 10:49:07 +0200 Subject: [PATCH 3/7] CIRC-2258 Bring back userId --- .../circulation/domain/OverdueFineService.java | 2 ++ .../domain/RequestServiceUtility.java | 2 +- .../circulation/domain/notes/NoteCreator.java | 2 +- .../session/PatronActionSessionService.java | 18 +++++++++++------- .../AutomatedPatronBlocksValidator.java | 2 ++ .../validation/ProxyRelationshipValidator.java | 3 +++ .../validation/UserManualBlocksValidator.java | 6 ++++++ .../storage/CheckOutLockRepository.java | 4 ++-- .../storage/CirculationPolicyRepository.java | 2 +- .../storage/loans/LoanRepository.java | 11 +++++++---- .../storage/requests/RequestRepository.java | 1 + .../storage/users/UserRepository.java | 3 +++ .../EndPatronActionSessionResource.java | 3 ++- .../resources/RequestNoticeSender.java | 2 +- .../circulation/services/EventPublisher.java | 6 ++++-- .../ActualCostRecordService.java | 7 ++++--- .../circulation/support/logging/LogHelper.java | 4 ++-- 17 files changed, 53 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/folio/circulation/domain/OverdueFineService.java b/src/main/java/org/folio/circulation/domain/OverdueFineService.java index b63221850b..cd7ea777d6 100644 --- a/src/main/java/org/folio/circulation/domain/OverdueFineService.java +++ b/src/main/java/org/folio/circulation/domain/OverdueFineService.java @@ -84,6 +84,8 @@ private boolean shouldChargeOverdueFineOnRenewal(RenewalContext renewalContext) public CompletableFuture> createOverdueFineIfNecessary( CheckInContext context, String userId) { + log.debug("createOverdueFineIfNecessary:: parameters context: {}, userId: {}", + () -> context, () -> userId); if (!shouldChargeOverdueFineOnCheckIn(context)) { log.info("createOverdueFineIfNecessary:: loan on check in should not be charged"); return completedFuture(succeeded(null)); diff --git a/src/main/java/org/folio/circulation/domain/RequestServiceUtility.java b/src/main/java/org/folio/circulation/domain/RequestServiceUtility.java index 0a27f59c0a..635c83f27c 100644 --- a/src/main/java/org/folio/circulation/domain/RequestServiceUtility.java +++ b/src/main/java/org/folio/circulation/domain/RequestServiceUtility.java @@ -130,7 +130,7 @@ static Result refuseWhenInvalidUserAndPatronGroup( User requester = request.getRequester(); if (requester == null) { - log.error("refuseWhenInvalidUserAndPatronGroup:: user is null"); + log.error("refuseWhenInvalidUserAndPatronGroup:: user {} is null", request.getUserId()); return failedValidation("A valid user and patron group are required. User is null", "userId", request.getUserId()); } else if (requester.getPatronGroupId() == null) { diff --git a/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java b/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java index dcd9743bd2..a7c4ffae1b 100644 --- a/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java +++ b/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java @@ -18,7 +18,7 @@ public NoteCreator(NotesRepository notesRepository) { } public CompletableFuture> createGeneralUserNote(String userId, String message) { - log.debug("createGeneralUserNote:: creating general user note"); + log.info("createGeneralUserNote:: creating general user note for userId {}", userId); final GeneralNoteTypeValidator validator = new GeneralNoteTypeValidator(); return notesRepository.findGeneralNoteType() diff --git a/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java b/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java index db6daed471..8e191f90e4 100644 --- a/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java +++ b/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java @@ -24,6 +24,7 @@ import org.folio.circulation.domain.CheckInContext; import org.folio.circulation.domain.Loan; import org.folio.circulation.domain.LoanAndRelatedRecords; +import org.folio.circulation.domain.User; import org.folio.circulation.domain.notice.ImmediatePatronNoticeService; import org.folio.circulation.domain.notice.NoticeEventType; import org.folio.circulation.domain.notice.PatronNoticeEvent; @@ -68,7 +69,7 @@ public static PatronActionSessionService using(Clients clients, public CompletableFuture> saveCheckOutSessionRecord( LoanAndRelatedRecords records) { - log.info("saveCheckOutSessionRecord:: saving check-out session record"); + log.info("saveCheckOutSessionRecord:: saving check-out session record for patron {}", records.getUserId()); UUID patronId = UUID.fromString(records.getUserId()); UUID loanId = UUID.fromString(records.getLoan().getId()); @@ -97,7 +98,7 @@ public CompletableFuture> saveCheckInSessionRecord(CheckI } public CompletableFuture> endSessions(String patronId, PatronActionType actionType) { - log.info("endSessions:: ending {} sessions", actionType); + log.info("endSessions:: ending {} sessions for patron {}", actionType, patronId); return safelyInitialise(() -> findSessions(patronId, actionType)) .thenCompose(r -> r.after(this::processSessions)) .thenApply(this::handleResult); @@ -114,7 +115,7 @@ public CompletableFuture> endExpiredSessions(List e private CompletableFuture>> findSessions(String patronId, PatronActionType actionType) { - log.info("findSessions:: finding {} sessions", actionType); + log.info("findSessions:: finding {} sessions for patron {}", actionType, patronId); return patronActionSessionRepository.findPatronActionSessions(patronId, actionType, DEFAULT_SESSION_SIZE_PAGE_LIMIT); @@ -197,8 +198,11 @@ private CompletableFuture>> sendNotice( return ofAsync(() -> null); } - log.info("Attempting to send a notice for a group of {} action sessions", - sessions.size()); + //The user is the same for all sessions + User user = sessions.getFirst().getLoan().getUser(); + + log.info("Attempting to send a notice for a group of {} action sessions to user {}", + sessions.size(), user.getId()); return allOf(sessions, this::buildNoticeEvents) .thenApply(result -> result.map(patronNoticeService::acceptNoticeEvents)) @@ -253,11 +257,11 @@ private CompletableFuture> getRecipientId(Loan loan) { return proxyRelationshipValidator.hasActiveProxyRelationshipWithNotificationsSentToProxy(loan) .thenApply(result -> result.map(sentNoProxy -> { if (Boolean.TRUE.equals(sentNoProxy)) { - log.info("getRecipientId:: notice recipient is proxy user"); + log.info("getRecipientId:: notice recipient is proxy user: {}", loan.getProxyUserId()); return loan.getProxyUserId(); } - log.info("getRecipientId:: notice recipient is user"); + log.info("getRecipientId:: notice recipient is user: {}", loan.getProxyUserId()); return loan.getUserId(); })); } diff --git a/src/main/java/org/folio/circulation/domain/validation/AutomatedPatronBlocksValidator.java b/src/main/java/org/folio/circulation/domain/validation/AutomatedPatronBlocksValidator.java index d7b2beb0d4..fe6916be30 100644 --- a/src/main/java/org/folio/circulation/domain/validation/AutomatedPatronBlocksValidator.java +++ b/src/main/java/org/folio/circulation/domain/validation/AutomatedPatronBlocksValidator.java @@ -83,6 +83,8 @@ public AutomatedPatronBlocksValidator(Clients clients) { private CompletableFuture> refuse(String userId, Predicate actionPredicate, T mapTo) { + log.debug("refuse:: parameters userId: {}, actionPredicate, mapTo", userId); + return ofAsync(() -> userId) .thenComposeAsync(r -> r.after(automatedPatronBlocksRepository::findByUserId)) .thenComposeAsync(r -> r.after(blocks -> getActionBlock(blocks, actionPredicate))) diff --git a/src/main/java/org/folio/circulation/domain/validation/ProxyRelationshipValidator.java b/src/main/java/org/folio/circulation/domain/validation/ProxyRelationshipValidator.java index 0ed8f57323..5da619faaa 100644 --- a/src/main/java/org/folio/circulation/domain/validation/ProxyRelationshipValidator.java +++ b/src/main/java/org/folio/circulation/domain/validation/ProxyRelationshipValidator.java @@ -105,6 +105,9 @@ private CompletableFuture> doesNotHaveActiveProxyRelationship( } private Result proxyRelationshipQuery(String proxyUserId, String sponsorUserId) { + log.debug("proxyRelationshipQuery:: parameters proxyUserId: {}, sponsorUserId: {}", proxyUserId, + sponsorUserId); + final Result proxyUserIdQuery = exactMatch("proxyUserId", proxyUserId); final Result userIdQuery = exactMatch("userId", sponsorUserId); diff --git a/src/main/java/org/folio/circulation/domain/validation/UserManualBlocksValidator.java b/src/main/java/org/folio/circulation/domain/validation/UserManualBlocksValidator.java index d811d06211..c66f453906 100644 --- a/src/main/java/org/folio/circulation/domain/validation/UserManualBlocksValidator.java +++ b/src/main/java/org/folio/circulation/domain/validation/UserManualBlocksValidator.java @@ -86,6 +86,9 @@ public CompletableFuture> refuseWhenUserIsBlocked( private CompletableFuture>> failIfPatronIsBlocked( Predicate isUserBlocked, String userId, String message) { + log.debug("failIfPatronIsBlocked:: parameters isUserBlocked, userId: {}, message: {}", userId, + message); + return userManualBlocksFetcher.findByQuery(exactMatch("userId", userId)) .thenApply(userManualBlockResult -> userManualBlockResult .failWhen(userManualBlockMultipleRecords -> of(() -> @@ -96,6 +99,9 @@ private CompletableFuture>> failIfPatron private HttpFailure createUserBlockedValidationError( MultipleRecords userManualBlocks, String message) { + log.debug("createUserBlockedValidationError:: parameters isUserBlocked, userId: {}, message: {}", + () -> multipleRecordsAsString(userManualBlocks), () -> message); + final String reason = userManualBlocks.getRecords().stream() .map(UserManualBlock::getDesc).collect(Collectors.joining(";")); diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java index d4ba113603..9649aab27d 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java @@ -52,7 +52,7 @@ public void createLockWithRetry(int noOfAttempts, CompletableFuture> create(LoanAndRelatedRecords records) { - log.debug("create:: trying to create checkout lock"); + log.debug("create:: trying to create lock for userId {} ", records.getUserId()); final ResponseInterpreter interpreter = new ResponseInterpreter() .flatMapOn(201, mapUsingJson(CheckOutLock::from)) @@ -64,7 +64,7 @@ public CompletableFuture> create(LoanAndRelatedRecords reco } public CompletableFuture> deleteCheckoutLockById(String checkOutLockId) { - log.debug("deleteCheckoutLockById:: deleting checkout lock"); + log.debug("deleteCheckoutLockById:: deleting the lock for userId {} ", checkOutLockId); return checkOutLockClient.delete(checkOutLockId); } diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/CirculationPolicyRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/CirculationPolicyRepository.java index 426225c3ef..69579ce931 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/CirculationPolicyRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/CirculationPolicyRepository.java @@ -100,7 +100,7 @@ public CompletableFuture> lookupPolicyId(Item item, } if (user.getPatronGroupId() == null) { - log.error("lookupPolicyId:: patronGroupId is null"); + log.error("PatronGroupId is null for user {}", user.getId()); return completedFuture(failedDueToServerError("Unable to apply circulation rules to a user with null value as patronGroupId")); } diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java index 5b03fd1815..980778749d 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java @@ -255,7 +255,7 @@ private CompletableFuture>> queryLoanStorage( public CompletableFuture>> findClosedLoans( String userId, PageLimit pageLimit) { - log.debug("findClosedLoans:: parameters pageLimit: {}", pageLimit); + log.debug("findClosedLoans:: parameters userId: {}, pageLimit: {}", userId, pageLimit); Result query = exactMatch(USER_ID, userId); final Result statusQuery = getStatusCQLQuery("Closed"); @@ -447,7 +447,8 @@ public CompletableFuture>> findOpenLoansByUserIdWit public CompletableFuture>> findOpenLoansByUserIdWithItem( PageLimit loansLimit, String userId) { - log.debug("findOpenLoansByUserIdWithItem:: parameters loansLimit: {}", loansLimit); + log.debug("findOpenLoansByUserIdWithItem:: parameters loansLimit: {}, userId: {}", + loansLimit, userId); return findOpenLoansByUserId(loansLimit, userId) .thenComposeAsync(loans -> itemRepository.fetchItemsFor(loans, Loan::withItem)); @@ -456,7 +457,8 @@ public CompletableFuture>> findOpenLoansByUserIdWit public CompletableFuture>> findOpenLoansByUserIdWithItemAndHoldings( PageLimit loansLimit, String userId) { - log.debug("findOpenLoansByUserIdWithItemAndHoldings:: parameters loansLimit: {}", loansLimit); + log.debug("findOpenLoansByUserIdWithItemAndHoldings:: parameters loansLimit: {}, userId: {}", + loansLimit, userId); // Only fetching HoldingsRecord for each item to avoid fetching instances, locations etc. return findOpenLoansByUserId(loansLimit, userId) @@ -466,7 +468,8 @@ public CompletableFuture>> findOpenLoansByUserIdWit public CompletableFuture>> findOpenLoansByUserId( PageLimit loansLimit, String userId) { - log.debug("findOpenLoansByUserId:: parameters loansLimit: {}", loansLimit); + log.debug("findOpenLoansByUserId:: parameters loansLimit: {}, userId: {}", + loansLimit, userId); final Result statusQuery = getStatusCQLQuery("Open"); final Result userIdQuery = exactMatch(USER_ID, userId); diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/requests/RequestRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/requests/RequestRepository.java index a8267ee714..566bb5059b 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/requests/RequestRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/requests/RequestRepository.java @@ -346,6 +346,7 @@ private CompletableFuture> fetchPatronGroups(Result res } private CompletableFuture> getUser(String userId) { + log.debug("getUser:: parameters userId: {}", userId); return userRepository.getUser(userId); } diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/users/UserRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/users/UserRepository.java index 6bfd1d6c0b..b84208fb15 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/users/UserRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/users/UserRepository.java @@ -80,6 +80,7 @@ public CompletableFuture> getProxyUser(UserRelatedRecord userRelate } public CompletableFuture> getUser(String userId) { + log.debug("getUser:: parameters userId: {}", userId); if(isNull(userId)) { log.info("getUser:: userId is null"); return ofAsync(() -> null); @@ -94,6 +95,7 @@ public CompletableFuture> getUser(String userId) { } public CompletableFuture> getUserWithPatronGroup(String userId) { + log.debug("getUserWithPatronGroup:: parameters userId: {}", userId); if(isNull(userId)) { log.info("getUserWithPatronGroup:: userId is null"); return ofAsync(() -> null); @@ -185,6 +187,7 @@ public CompletableFuture>> getUsersForUserIds(Collectio } public CompletableFuture> getUserFailOnNotFound(String userId) { + log.debug("getUserFailOnNotFound:: parameters userId: {}", userId); if(isNull(userId)) { log.info("getUserFailOnNotFound:: userId is null"); return completedFuture(failedValidation("user is not found", "userId", userId)); diff --git a/src/main/java/org/folio/circulation/resources/EndPatronActionSessionResource.java b/src/main/java/org/folio/circulation/resources/EndPatronActionSessionResource.java index ab184c6239..39b50630e1 100644 --- a/src/main/java/org/folio/circulation/resources/EndPatronActionSessionResource.java +++ b/src/main/java/org/folio/circulation/resources/EndPatronActionSessionResource.java @@ -60,7 +60,8 @@ private void process(RoutingContext routingContext) { String patronId = endSessionRequest.getPatronId(); PatronActionType actionType = endSessionRequest.getActionType(); patronActionSessionService.endSessions(patronId, actionType); - log.info("process:: session ended successfully: actionType={}", actionType); + log.info("process:: session ended successfully: patronId: {}, actionType: {}", + patronId, actionType); noContent().writeTo(routingContext.response()); } } diff --git a/src/main/java/org/folio/circulation/resources/RequestNoticeSender.java b/src/main/java/org/folio/circulation/resources/RequestNoticeSender.java index e71f887554..18745af08b 100644 --- a/src/main/java/org/folio/circulation/resources/RequestNoticeSender.java +++ b/src/main/java/org/folio/circulation/resources/RequestNoticeSender.java @@ -311,7 +311,7 @@ private CompletableFuture> fetchDataAndSendRequestAwaitingPickupNot private CompletableFuture> fetchRequester(Request request) { String requesterId = request.getRequesterId(); - log.debug("fetchRequester:: fetching requester"); + log.info("fetchRequester:: requesterId: {}", requesterId); return userRepository.getUserWithPatronGroup(requesterId) .thenApply(r -> r.failWhen(this::isNull, diff --git a/src/main/java/org/folio/circulation/services/EventPublisher.java b/src/main/java/org/folio/circulation/services/EventPublisher.java index 138eed8707..7e3ec1c3ab 100644 --- a/src/main/java/org/folio/circulation/services/EventPublisher.java +++ b/src/main/java/org/folio/circulation/services/EventPublisher.java @@ -319,7 +319,8 @@ public CompletableFuture> publishDueDateLogEvent(Loan loan) { } private CompletableFuture> publishDueDateLogEvent(Loan loan, String updatedByUserId) { - logger.info("publishDueDateLogEvent:: parameters loanId: {}", loan::getId); + logger.info("publishDueDateLogEvent:: parameters loanId: {}, updatedByUserId: {}", + loan::getId, () -> updatedByUserId); return getTenantTimeZone() .thenApply(zoneResult -> zoneResult.map(zoneId -> { var logDescription = getLoanDueDateChangeLog(loan, zoneId); @@ -333,7 +334,8 @@ private CompletableFuture> publishDueDateLogEvent(Loan loan, String } private CompletableFuture> publishRenewedEvent(Loan loan, String updatedByUserId) { - logger.info("publishRenewedEvent:: parameters loanId: {}", loan::getId); + logger.info("publishRenewedEvent:: parameters loanId: {}, updatedByUserId: {}", + loan::getId, () -> updatedByUserId); return getTenantTimeZone() .thenApply(zoneResult -> zoneResult.map(zoneId -> { var logDescription = getLoanDueDateChangeLog(loan, zoneId); diff --git a/src/main/java/org/folio/circulation/services/actualcostrecord/ActualCostRecordService.java b/src/main/java/org/folio/circulation/services/actualcostrecord/ActualCostRecordService.java index 6829970073..bbb2e9130c 100644 --- a/src/main/java/org/folio/circulation/services/actualcostrecord/ActualCostRecordService.java +++ b/src/main/java/org/folio/circulation/services/actualcostrecord/ActualCostRecordService.java @@ -138,12 +138,13 @@ private CompletableFuture> lookupPatronGroup( User user = context.getLoan().getUser(); if (user.getPatronGroup() != null) { - log.info("lookupPatronGroup:: patron group already exists: {}, skipping lookup", - user.getPatronGroup().getGroup()); + log.info("lookupPatronGroup:: patron group already exists: {} for userId: {}, skipping lookup", + user.getPatronGroup().getGroup(), user.getId()); return ofAsync(context); } - log.info("lookupPatronGroup:: patron group not found, fetching from repository"); + log.info("lookupPatronGroup:: patron group not found, fetching from repository for userId: {}", + user::getId); return patronGroupRepository.findGroupForUser(user) .thenApply(r -> r.map(context.getLoan()::withUser)) diff --git a/src/main/java/org/folio/circulation/support/logging/LogHelper.java b/src/main/java/org/folio/circulation/support/logging/LogHelper.java index db3b0af117..e2c56fca66 100644 --- a/src/main/java/org/folio/circulation/support/logging/LogHelper.java +++ b/src/main/java/org/folio/circulation/support/logging/LogHelper.java @@ -76,8 +76,8 @@ public static void populateLoggingContext(RoutingContext routingContext) { String requestId = request.getHeader(RestVerticle.OKAPI_REQUESTID_HEADER); String userId = request.getHeader(RestVerticle.OKAPI_USERID_HEADER); - log.debug("populateLoggingContext:: populating context: tenantId={}, requestId={}", - tenantId, requestId); + log.debug("populateLoggingContext:: populating context: tenantId={}, requestId={}, userId={}", + tenantId, requestId, userId); FolioLoggingContext.put("tenantId", tenantId); FolioLoggingContext.put("requestId", requestId); From 00d159078ec6ae7332f7d6a7ae63b866c477300a Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Fri, 24 Apr 2026 10:51:22 +0200 Subject: [PATCH 4/7] CIRC-2258 Revert redundant changes --- .../domain/notice/session/PatronActionSessionService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java b/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java index 8e191f90e4..5f523faf95 100644 --- a/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java +++ b/src/main/java/org/folio/circulation/domain/notice/session/PatronActionSessionService.java @@ -18,7 +18,6 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.folio.circulation.domain.CheckInContext; @@ -37,7 +36,6 @@ import org.folio.circulation.support.Clients; import org.folio.circulation.support.http.client.PageLimit; import org.folio.circulation.support.results.Result; - import lombok.AllArgsConstructor; @AllArgsConstructor From a79536df4cd1510af34f5bd7f1aea79705001dec Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Fri, 24 Apr 2026 11:46:14 +0200 Subject: [PATCH 5/7] CIRC-2258 Remove PII from logs --- .../java/org/folio/circulation/domain/Loan.java | 10 ++++------ .../circulation/domain/PrintEventRequest.java | 2 +- .../circulation/domain/ProxyRelationship.java | 4 ---- .../circulation/domain/notes/NoteCreator.java | 4 +++- ...irculationCheckInCheckOutLogEventMapper.java | 2 -- .../logs/RequestUpdateLogEventMapper.java | 6 ------ .../storage/CheckOutLockRepository.java | 17 ++++++++--------- .../storage/loans/LoanRepository.java | 1 - .../circulation/resources/AddInfoResource.java | 3 +-- .../resources/RequestCollectionResource.java | 2 -- .../circulation/services/EventPublisher.java | 11 +---------- 11 files changed, 18 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/folio/circulation/domain/Loan.java b/src/main/java/org/folio/circulation/domain/Loan.java index bd83959fe0..53bcf6a685 100644 --- a/src/main/java/org/folio/circulation/domain/Loan.java +++ b/src/main/java/org/folio/circulation/domain/Loan.java @@ -255,7 +255,6 @@ public Loan changeItemEffectiveLocationIdAtCheckOut(String locationId) { } public void changeActionComment(String comment) { - log.debug("changeActionComment:: parameters comment: {}", comment); representation.put(ACTION_COMMENT, comment); } @@ -585,7 +584,7 @@ Loan resolveClaimedReturned(LoanAction resolveAction, public Loan declareItemLost(String comment, ZonedDateTime dateTime) { - log.debug("declareItemLost:: parameters comment: {}, dateTime: {}", () -> comment, () -> dateTime); + log.debug("declareItemLost:: parameters dateTime: {}", () -> dateTime); changeAction(DECLARED_LOST); changeActionComment(comment); changeItemStatusForItemAndLoan(ItemStatus.DECLARED_LOST); @@ -737,8 +736,8 @@ public RemindersPolicy.ReminderConfig getNextReminder() { } public Loan claimItemReturned(String comment, ZonedDateTime claimedReturnedDate) { - log.debug("claimItemReturned:: parameters comment: {}, claimedReturnedDate: {}", - () -> comment, () -> claimedReturnedDate); + log.debug("claimItemReturned:: parameters claimedReturnedDate: {}", + () -> claimedReturnedDate); changeAction(CLAIMED_RETURNED); if (StringUtils.isNotBlank(comment)) { changeActionComment(comment); @@ -764,7 +763,7 @@ public Loan closeLoan(LoanAction action) { } public Loan closeLoan(LoanAction action, String comment) { - log.debug("closeLoan:: parameters action: {}, comment: {}", action, comment); + log.debug("closeLoan:: parameters action: {}", action); changeStatus(LoanStatus.CLOSED); changeAction(action); @@ -774,7 +773,6 @@ public Loan closeLoan(LoanAction action, String comment) { } public Loan markItemMissing(String comment) { - log.debug("markItemMissing:: parameters comment: {}", comment); changeItemStatusForItemAndLoan(ItemStatus.MISSING); return closeLoan(MISSING, comment); diff --git a/src/main/java/org/folio/circulation/domain/PrintEventRequest.java b/src/main/java/org/folio/circulation/domain/PrintEventRequest.java index 2c1a4a6d13..fbb4cf08ad 100644 --- a/src/main/java/org/folio/circulation/domain/PrintEventRequest.java +++ b/src/main/java/org/folio/circulation/domain/PrintEventRequest.java @@ -48,7 +48,7 @@ public static PrintEventRequest from(JsonObject representation) { final var printEventDate = getProperty(representation, PRINT_DATE_FIELD); if (requestIds.isEmpty() || null == requesterId || null == requesterName || null == printEventDate || !containsOnlyKnownFields(representation)) { - log.info("from:: Print Event Request JSON is invalid: requestIds={}, printEventDate={}", requestIds, printEventDate); + log.info("from:: Print Event Request JSON is invalid: requestIds={}, requesterId={}, printEventDate={}", requestIds, requesterId, printEventDate); return null; } return new PrintEventRequest(representation, requestIds, requesterId, requesterName, printEventDate); diff --git a/src/main/java/org/folio/circulation/domain/ProxyRelationship.java b/src/main/java/org/folio/circulation/domain/ProxyRelationship.java index e155229cfc..7210db721b 100644 --- a/src/main/java/org/folio/circulation/domain/ProxyRelationship.java +++ b/src/main/java/org/folio/circulation/domain/ProxyRelationship.java @@ -48,8 +48,6 @@ public boolean notificationsSentToProxy() { } private boolean getActive(JsonObject representation) { - log.debug("getActive:: parameters representation: {}", () -> representation); - if(representation.containsKey(STATUS_PROPERTY_NAME)) { return convertStatusToActive( representation.getString(STATUS_PROPERTY_NAME)); @@ -61,8 +59,6 @@ private boolean getActive(JsonObject representation) { } private ZonedDateTime getExpirationDate(JsonObject representation) { - log.debug("getExpirationDate:: parameters representation: {}", () -> representation); - if(representation.containsKey(EXPIRATION_DATE_PROPERTY_NAME) ) { return getDateTimeProperty(representation, EXPIRATION_DATE_PROPERTY_NAME); diff --git a/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java b/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java index a7c4ffae1b..e64d52cb75 100644 --- a/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java +++ b/src/main/java/org/folio/circulation/domain/notes/NoteCreator.java @@ -1,10 +1,12 @@ package org.folio.circulation.domain.notes; import java.lang.invoke.MethodHandles; -import java.util.concurrent.CompletableFuture; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; + +import java.util.concurrent.CompletableFuture; + import org.folio.circulation.domain.NoteLink; import org.folio.circulation.infrastructure.storage.notes.NotesRepository; import org.folio.circulation.support.results.Result; diff --git a/src/main/java/org/folio/circulation/domain/representations/logs/CirculationCheckInCheckOutLogEventMapper.java b/src/main/java/org/folio/circulation/domain/representations/logs/CirculationCheckInCheckOutLogEventMapper.java index 51bc743ea0..6301201fcb 100644 --- a/src/main/java/org/folio/circulation/domain/representations/logs/CirculationCheckInCheckOutLogEventMapper.java +++ b/src/main/java/org/folio/circulation/domain/representations/logs/CirculationCheckInCheckOutLogEventMapper.java @@ -59,7 +59,6 @@ public static String mapToCheckInLogEventContent(CheckInContext checkInContext, write(logEventPayload, REQUESTS.value(), getUpdatedRequests(checkInContext)); String result = logEventPayload.encode(); - log.info("mapToCheckInLogEventContent:: result {}", result); return result; } @@ -91,7 +90,6 @@ public static String mapToCheckOutLogEventContent(LoanAndRelatedRecords loanAndR logEventPayload.put(PAYLOAD,payload); String result = logEventPayload.encode(); - log.info("mapToCheckOutLogEventContent:: result {}", result); return result; } diff --git a/src/main/java/org/folio/circulation/domain/representations/logs/RequestUpdateLogEventMapper.java b/src/main/java/org/folio/circulation/domain/representations/logs/RequestUpdateLogEventMapper.java index 6eb26f78a0..a7e9a522d3 100644 --- a/src/main/java/org/folio/circulation/domain/representations/logs/RequestUpdateLogEventMapper.java +++ b/src/main/java/org/folio/circulation/domain/representations/logs/RequestUpdateLogEventMapper.java @@ -37,7 +37,6 @@ public static JsonObject mapToRequestLogEventJson(Request request) { populateItemData(request, logEventPayload); write(logEventPayload, REQUESTS.value(), mapCreatedRequestToJson(request)); - log.info("mapToRequestLogEventJson:: result {}", logEventPayload::encode); return logEventPayload; } @@ -51,7 +50,6 @@ public static JsonObject mapToRequestLogEventJson(Request original, Request upda write(logEventPayload, REQUESTS.value(), mapUpdatedRequestPairToJson( new UpdatedRequestPair(original, updated))); - log.info("mapToRequestLogEventJson:: result {}", logEventPayload::encode); return logEventPayload; } @@ -65,7 +63,6 @@ public static JsonObject mapToRequestLogEventJson(List requests) { populateItemData(requests.get(0), logEventPayload); write(logEventPayload, REQUESTS.value(), mapReorderedRequestsToJsonArray(requests)); - log.info("mapToRequestLogEventJson:: result {}", logEventPayload::encode); return logEventPayload; } @@ -90,7 +87,6 @@ private static JsonObject mapUpdatedRequestPairToJson(UpdatedRequestPair updated ofNullable(updatedRequestPair.getOriginal()).ifPresent(original -> requestPayload.put("original", original.asJson())); ofNullable(updatedRequestPair.getUpdated()).ifPresent(updated -> requestPayload.put("updated", updated.asJson())); - log.info("mapUpdatedRequestPairToJson:: result {}", requestPayload::encode); return requestPayload; } @@ -100,7 +96,6 @@ private static JsonObject mapCreatedRequestToJson(Request request) { JsonObject requestPayload = new JsonObject(); requestPayload.put("created", request.asJson()); - log.info("mapCreatedRequestToJson:: result {}", requestPayload::encode); return requestPayload; } @@ -113,7 +108,6 @@ private static JsonObject mapReorderedRequestsToJsonArray(List requests .map(r -> r.asJson().put("previousPosition", r.getPreviousPosition())) .collect(Collectors.toList()))); - log.info("mapReorderedRequestsToJsonArray:: result {}", requestPayload::encode); return requestPayload; } } diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java index 9649aab27d..84571cfc19 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/CheckOutLockRepository.java @@ -1,11 +1,8 @@ package org.folio.circulation.infrastructure.storage; -import static org.folio.circulation.support.http.ResponseMapping.forwardOnFailure; -import static org.folio.circulation.support.http.ResponseMapping.mapUsingJson; - -import java.lang.invoke.MethodHandles; -import java.util.concurrent.CompletableFuture; - +import io.vertx.core.Vertx; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.folio.circulation.domain.CheckOutLock; @@ -16,9 +13,11 @@ import org.folio.circulation.support.http.client.ResponseInterpreter; import org.folio.circulation.support.results.Result; -import io.vertx.core.Vertx; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.RoutingContext; +import java.lang.invoke.MethodHandles; +import java.util.concurrent.CompletableFuture; + +import static org.folio.circulation.support.http.ResponseMapping.forwardOnFailure; +import static org.folio.circulation.support.http.ResponseMapping.mapUsingJson; public class CheckOutLockRepository { private static final Logger log = LogManager.getLogger(MethodHandles.lookup().lookupClass()); diff --git a/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java b/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java index 980778749d..3f2b5ef434 100644 --- a/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java +++ b/src/main/java/org/folio/circulation/infrastructure/storage/loans/LoanRepository.java @@ -228,7 +228,6 @@ private String mapToLatestPatronInfoAddedComment(MultipleRecords lo String latestPatronInfoAddedComment = null; if (loanHistory != null) { latestPatronInfoAddedComment = loanHistory.getLoan().getActionComment(); - log.debug("mapToLatestPatronInfoAddedComment:: loan history contains patron info: {}", latestPatronInfoAddedComment); } return latestPatronInfoAddedComment; } diff --git a/src/main/java/org/folio/circulation/resources/AddInfoResource.java b/src/main/java/org/folio/circulation/resources/AddInfoResource.java index 911ebabadb..2eaf8f2977 100644 --- a/src/main/java/org/folio/circulation/resources/AddInfoResource.java +++ b/src/main/java/org/folio/circulation/resources/AddInfoResource.java @@ -115,8 +115,7 @@ private Result addPatronOrStaffInfo( private LoanAndRelatedRecords addPatronOrStaffInfo(LoanAndRelatedRecords loanAndRelatedRecords, String action, String actionComment) { - log.debug("addPatronOrStaffInfo:: parameters loanAndRelatedRecords: {}, action: {}, " + - "actionComment: {}", () -> loanAndRelatedRecords, () -> action, () -> actionComment); + log.debug("addPatronOrStaffInfo:: parameters action: {}", action); loanAndRelatedRecords.getLoan().changeAction(action); loanAndRelatedRecords.getLoan().changeActionComment(actionComment); diff --git a/src/main/java/org/folio/circulation/resources/RequestCollectionResource.java b/src/main/java/org/folio/circulation/resources/RequestCollectionResource.java index 23d65c57e0..f0c8b97470 100644 --- a/src/main/java/org/folio/circulation/resources/RequestCollectionResource.java +++ b/src/main/java/org/folio/circulation/resources/RequestCollectionResource.java @@ -80,8 +80,6 @@ void create(RoutingContext routingContext) { final var representation = routingContext.body().asJsonObject(); - log.debug("create:: {}", representation); - final var eventPublisher = new EventPublisher(context, clients); RequestRelatedRepositories repositories = new RequestRelatedRepositories(clients); diff --git a/src/main/java/org/folio/circulation/services/EventPublisher.java b/src/main/java/org/folio/circulation/services/EventPublisher.java index 7e3ec1c3ab..334a37f7a4 100644 --- a/src/main/java/org/folio/circulation/services/EventPublisher.java +++ b/src/main/java/org/folio/circulation/services/EventPublisher.java @@ -39,17 +39,9 @@ import java.time.ZonedDateTime; import java.util.Optional; import java.util.concurrent.CompletableFuture; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.folio.circulation.domain.CheckInContext; -import org.folio.circulation.domain.EventType; -import org.folio.circulation.domain.Item; -import org.folio.circulation.domain.Loan; -import org.folio.circulation.domain.LoanAndRelatedRecords; -import org.folio.circulation.domain.Request; -import org.folio.circulation.domain.RequestAndRelatedRecords; -import org.folio.circulation.domain.User; +import org.folio.circulation.domain.*; import org.folio.circulation.domain.anonymization.LoanAnonymizationRecords; import org.folio.circulation.domain.policy.LoanPolicy; import org.folio.circulation.domain.policy.Period; @@ -65,7 +57,6 @@ import org.folio.circulation.support.HttpFailure; import org.folio.circulation.support.http.server.WebContext; import org.folio.circulation.support.results.Result; - import io.vertx.core.json.JsonObject; public class EventPublisher { From 7b38b6a7a80b2648ee4005036a4c0b9a5ca09377 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Fri, 24 Apr 2026 13:17:17 +0200 Subject: [PATCH 6/7] CIRC-2258 Bring back user barcode in logs --- src/main/java/org/folio/circulation/domain/Loan.java | 5 ++--- .../resources/renewal/RenewByBarcodeResource.java | 3 ++- .../storage/SingleOpenLoanByUserAndItemBarcodeFinder.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/folio/circulation/domain/Loan.java b/src/main/java/org/folio/circulation/domain/Loan.java index 53bcf6a685..288de4795a 100644 --- a/src/main/java/org/folio/circulation/domain/Loan.java +++ b/src/main/java/org/folio/circulation/domain/Loan.java @@ -584,7 +584,7 @@ Loan resolveClaimedReturned(LoanAction resolveAction, public Loan declareItemLost(String comment, ZonedDateTime dateTime) { - log.debug("declareItemLost:: parameters dateTime: {}", () -> dateTime); + log.debug("declareItemLost:: parameters dateTime: {}", dateTime); changeAction(DECLARED_LOST); changeActionComment(comment); changeItemStatusForItemAndLoan(ItemStatus.DECLARED_LOST); @@ -736,8 +736,7 @@ public RemindersPolicy.ReminderConfig getNextReminder() { } public Loan claimItemReturned(String comment, ZonedDateTime claimedReturnedDate) { - log.debug("claimItemReturned:: parameters claimedReturnedDate: {}", - () -> claimedReturnedDate); + log.debug("claimItemReturned:: parameters claimedReturnedDate: {}", claimedReturnedDate); changeAction(CLAIMED_RETURNED); if (StringUtils.isNotBlank(comment)) { changeActionComment(comment); diff --git a/src/main/java/org/folio/circulation/resources/renewal/RenewByBarcodeResource.java b/src/main/java/org/folio/circulation/resources/renewal/RenewByBarcodeResource.java index 2152162567..e4d838c6d3 100644 --- a/src/main/java/org/folio/circulation/resources/renewal/RenewByBarcodeResource.java +++ b/src/main/java/org/folio/circulation/resources/renewal/RenewByBarcodeResource.java @@ -31,7 +31,8 @@ protected CompletableFuture> findLoan(JsonObject request, LoanRepository loanRepository, ItemRepository itemRepository, UserRepository userRepository, CirculationErrorHandler errorHandler) { - log.info("findLoan:: itemBarcode={}", () -> request.getString(RenewByBarcodeRequest.ITEM_BARCODE)); + log.info("findLoan:: itemBarcode={}, userBarcode={}", () -> request.getString( + RenewByBarcodeRequest.ITEM_BARCODE), () -> request.getString(RenewByBarcodeRequest.USER_BARCODE)); final SingleOpenLoanByUserAndItemBarcodeFinder finder = new SingleOpenLoanByUserAndItemBarcodeFinder(loanRepository, diff --git a/src/main/java/org/folio/circulation/storage/SingleOpenLoanByUserAndItemBarcodeFinder.java b/src/main/java/org/folio/circulation/storage/SingleOpenLoanByUserAndItemBarcodeFinder.java index cb1871bf4c..eb67054744 100644 --- a/src/main/java/org/folio/circulation/storage/SingleOpenLoanByUserAndItemBarcodeFinder.java +++ b/src/main/java/org/folio/circulation/storage/SingleOpenLoanByUserAndItemBarcodeFinder.java @@ -36,7 +36,7 @@ public SingleOpenLoanByUserAndItemBarcodeFinder( } public CompletableFuture> findLoan(String itemBarcode, String userBarcode) { - log.debug("findLoan:: parameters itemBarcode: {}", itemBarcode); + log.debug("findLoan:: parameters itemBarcode: {}, userBarcode: {}", itemBarcode, userBarcode); final ItemByBarcodeInStorageFinder itemFinder = new ItemByBarcodeInStorageFinder( this.itemRepository); From 023eff70cb124e2f826d09367420946c452dfe29 Mon Sep 17 00:00:00 2001 From: oleksandr_vidinieiev Date: Mon, 27 Apr 2026 16:04:05 +0200 Subject: [PATCH 7/7] CIRC-2258 Fix code smells --- .../org/folio/circulation/domain/ProxyRelationship.java | 4 ---- .../logs/CirculationCheckInCheckOutLogEventMapper.java | 6 ++---- .../circulation/resources/RequestCollectionResource.java | 5 ----- 3 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/folio/circulation/domain/ProxyRelationship.java b/src/main/java/org/folio/circulation/domain/ProxyRelationship.java index 7210db721b..0a95a85347 100644 --- a/src/main/java/org/folio/circulation/domain/ProxyRelationship.java +++ b/src/main/java/org/folio/circulation/domain/ProxyRelationship.java @@ -6,17 +6,13 @@ import static org.folio.circulation.support.json.JsonPropertyFetcher.getNestedStringProperty; import static org.folio.circulation.support.utils.DateTimeUtil.isBeforeMillis; -import java.lang.invoke.MethodHandles; import java.time.ZonedDateTime; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.folio.circulation.support.utils.ClockUtil; import io.vertx.core.json.JsonObject; public class ProxyRelationship { - private static final Logger log = LogManager.getLogger(MethodHandles.lookup().lookupClass()); private static final String NOTIFICATIONS_SENT_TO_PROPERTY_NAME = "notificationsTo"; private static final String EXPIRATION_DATE_PROPERTY_NAME = "expirationDate"; diff --git a/src/main/java/org/folio/circulation/domain/representations/logs/CirculationCheckInCheckOutLogEventMapper.java b/src/main/java/org/folio/circulation/domain/representations/logs/CirculationCheckInCheckOutLogEventMapper.java index 6301201fcb..0437017b77 100644 --- a/src/main/java/org/folio/circulation/domain/representations/logs/CirculationCheckInCheckOutLogEventMapper.java +++ b/src/main/java/org/folio/circulation/domain/representations/logs/CirculationCheckInCheckOutLogEventMapper.java @@ -58,8 +58,7 @@ public static String mapToCheckInLogEventContent(CheckInContext checkInContext, write(logEventPayload, REQUESTS.value(), getUpdatedRequests(checkInContext)); - String result = logEventPayload.encode(); - return result; + return logEventPayload.encode(); } /** @@ -89,8 +88,7 @@ public static String mapToCheckOutLogEventContent(LoanAndRelatedRecords loanAndR write(logEventPayload, REQUESTS.value(), getUpdatedRequests(loanAndRelatedRecords)); logEventPayload.put(PAYLOAD,payload); - String result = logEventPayload.encode(); - return result; + return logEventPayload.encode(); } private static void populateLoanAndItemInCheckoutEvent(LoanAndRelatedRecords loanAndRelatedRecords, User loggedInUser, JsonObject data) { diff --git a/src/main/java/org/folio/circulation/resources/RequestCollectionResource.java b/src/main/java/org/folio/circulation/resources/RequestCollectionResource.java index f0c8b97470..c0145d3184 100644 --- a/src/main/java/org/folio/circulation/resources/RequestCollectionResource.java +++ b/src/main/java/org/folio/circulation/resources/RequestCollectionResource.java @@ -8,10 +8,6 @@ import static org.folio.circulation.support.results.MappingFunctions.toFixedValue; import static org.folio.circulation.support.results.MappingFunctions.when; -import java.lang.invoke.MethodHandles; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.folio.circulation.domain.CreateRequestService; import org.folio.circulation.domain.MoveRequestProcessAdapter; import org.folio.circulation.domain.MoveRequestService; @@ -61,7 +57,6 @@ import io.vertx.ext.web.RoutingContext; public class RequestCollectionResource extends CollectionResource { - private static final Logger log = LogManager.getLogger(MethodHandles.lookup().lookupClass()); public RequestCollectionResource(HttpClient client) { super(client, "/circulation/requests");