Skip to content

Commit c99b83e

Browse files
refactor: normalize logging (#90)
1 parent 644495f commit c99b83e

40 files changed

Lines changed: 526 additions & 251 deletions

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
8+
### Changed
9+
- Normalized logging using Keyple coding standards.
10+
### Upgraded
11+
- `keyple-plugin-java-api` from `2.3.1` to `2.3.2` (code source not impacted)
12+
- `keyple-distributed-remote-java-api` from `3.1.0` to `3.1.1` (code source not impacted)
13+
- `keyple-distributed-local-java-api` from `2.2.0` to `2.2.1` (code source not impacted)
14+
- `keyple-util-java-lib` from `2.4.0` to `2.4.1` (code source not impacted)
15+
- `slf4j-api` from `1.7.32` to `1.7.36` (`compileOnly`)
816

917
## [3.4.0] - 2025-11-21
1018
### Upgraded

build.gradle.kts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ dependencies {
1717
implementation("org.eclipse.keypop:keypop-reader-java-api:2.1.0")
1818
implementation("org.eclipse.keypop:keypop-card-java-api:2.0.1")
1919
implementation("org.eclipse.keyple:keyple-common-java-api:2.0.2")
20-
implementation("org.eclipse.keyple:keyple-plugin-java-api:2.3.1")
21-
implementation("org.eclipse.keyple:keyple-distributed-remote-java-api:3.1.0")
22-
implementation("org.eclipse.keyple:keyple-distributed-local-java-api:2.2.0")
23-
implementation("org.eclipse.keyple:keyple-util-java-lib:2.4.0")
20+
implementation("org.eclipse.keyple:keyple-plugin-java-api:2.3.2")
21+
implementation("org.eclipse.keyple:keyple-distributed-remote-java-api:3.1.1")
22+
implementation("org.eclipse.keyple:keyple-distributed-local-java-api:2.2.1")
23+
implementation("org.eclipse.keyple:keyple-util-java-lib:2.4.1")
2424
implementation("com.google.code.gson:gson:2.10.1")
25-
implementation("org.slf4j:slf4j-api:1.7.32")
26-
testImplementation("org.slf4j:slf4j-simple:1.7.32")
25+
compileOnly("org.slf4j:slf4j-api:1.7.36")
26+
27+
testImplementation("org.slf4j:slf4j-simple:1.7.36")
2728
testImplementation(platform("org.junit:junit-bom:5.10.2"))
2829
testImplementation("org.junit.jupiter:junit-jupiter")
2930
testImplementation("org.junit.vintage:junit-vintage-engine")

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
group = org.eclipse.keyple
33
title = Keyple Service Java Lib
44
description = Keyple core components
5-
version = 3.4.0-SNAPSHOT
5+
version = 3.4.1-SNAPSHOT
66

77
# Java Configuration
88
javaSourceLevel = 1.8

src/main/java/org/eclipse/keyple/core/service/AbstractObservableLocalPluginAdapter.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,18 +66,20 @@ abstract class AbstractObservableLocalPluginAdapter extends LocalPluginAdapter
6666
* @since 2.0.0
6767
*/
6868
final void notifyObservers(final PluginEvent event) {
69-
7069
if (logger.isDebugEnabled()) {
7170
logger.debug(
72-
"Plugin [{}] notifies event [{}] to {} observer(s)",
71+
"[plugin={}] Notifying observers [eventType={}, readerNames={}, observerCount={}]",
7372
getName(),
7473
event.getType().name(),
74+
event.getReaderNames(),
7575
countObservers());
7676
}
77-
7877
for (PluginObserverSpi observer : observationManager.getObservers()) {
7978
notifyObserver(observer, event);
8079
}
80+
if (logger.isDebugEnabled()) {
81+
logger.debug("[plugin={}] Observers notified", getName());
82+
}
8183
}
8284

8385
/**
@@ -93,8 +95,13 @@ private void notifyObserver(PluginObserverSpi observer, PluginEvent event) {
9395
try {
9496
observationManager.getObservationExceptionHandler().onPluginObservationError(getName(), e);
9597
} catch (Exception e2) {
96-
logger.error("Event notification error: {}", e2.getMessage(), e2);
97-
logger.error("Original cause: {}", e.getMessage(), e);
98+
logger.error(
99+
"[plugin={}] Failed to notify observer [reason={}]", getName(), e.getMessage(), e);
100+
logger.error(
101+
"[plugin={}] Failed to notify observation exception handler [reason={}]",
102+
getName(),
103+
e2.getMessage(),
104+
e2);
98105
}
99106
}
100107
}

src/main/java/org/eclipse/keyple/core/service/AbstractPluginAdapter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,11 @@ void unregister() {
110110
try {
111111
((AbstractReaderAdapter) reader).unregister();
112112
} catch (Exception e) {
113-
logger.warn("Error unregistering reader [{}]: {}", reader.getName(), e.getMessage());
113+
logger.warn(
114+
"[plugin={}] Failed to unregister reader [name={}, reason={}]",
115+
pluginName,
116+
reader.getName(),
117+
e.getMessage());
114118
}
115119
}
116120
readers.clear();

src/main/java/org/eclipse/keyple/core/service/AbstractReaderAdapter.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,14 @@ final List<CardSelectionResponseApi> transmitCardSelectionRequests(
111111

112112
List<CardSelectionResponseApi> cardSelectionResponses = null;
113113

114-
if (logger.isTraceEnabled()) {
114+
if (logger.isDebugEnabled()) {
115115
long timeStamp = System.nanoTime();
116116
long elapsed10ms = (timeStamp - before) / 100000;
117117
this.before = timeStamp;
118-
logger.trace(
119-
"Reader [{}] --> cardSelectionRequests: {}, elapsed {} ms",
120-
this.getName(),
121-
cardSelectionRequests,
118+
logger.debug(
119+
"[reader={}] Send [type=CardSelectionRequests, cardSelectionRequestCount={}, elapsedMs={}]",
120+
getName(),
121+
cardSelectionRequests.size(),
122122
elapsed10ms / 10.0);
123123
}
124124

@@ -130,14 +130,14 @@ final List<CardSelectionResponseApi> transmitCardSelectionRequests(
130130
throw new CardBrokenCommunicationException(
131131
e.getCardResponse(), false, "An unexpected status word was received", e);
132132
} finally {
133-
if (logger.isTraceEnabled()) {
133+
if (logger.isDebugEnabled()) {
134134
long timeStamp = System.nanoTime();
135135
long elapsed10ms = (timeStamp - before) / 100000;
136136
this.before = timeStamp;
137-
logger.trace(
138-
"Reader [{}] <-- cardSelectionResponses: {}, elapsed {} ms",
139-
this.getName(),
140-
cardSelectionResponses,
137+
logger.debug(
138+
"[reader={}] Receive [type=CardSelectionResponses, cardSelectionResponseCount={}, elapsedMs={}]",
139+
getName(),
140+
cardSelectionResponses != null ? cardSelectionResponses.size() : 0,
141141
elapsed10ms / 10.0);
142142
}
143143
}
@@ -250,28 +250,28 @@ public final CardResponseApi transmitCardRequest(
250250

251251
CardResponseApi cardResponse = null;
252252

253-
if (logger.isTraceEnabled()) {
253+
if (logger.isDebugEnabled()) {
254254
long timeStamp = System.nanoTime();
255255
long elapsed10ms = (timeStamp - before) / 100000;
256256
this.before = timeStamp;
257-
logger.trace(
258-
"Reader [{}] --> cardRequest: {}, elapsed {} ms",
259-
this.getName(),
260-
cardRequest,
257+
logger.debug(
258+
"[reader={}] Send [type=CardRequest, apduRequestCount={}, elapsedMs={}]",
259+
getName(),
260+
cardRequest.getApduRequests().size(),
261261
elapsed10ms / 10.0);
262262
}
263263

264264
try {
265265
cardResponse = processCardRequest(cardRequest, channelControl);
266266
} finally {
267-
if (logger.isTraceEnabled()) {
267+
if (logger.isDebugEnabled()) {
268268
long timeStamp = System.nanoTime();
269269
long elapsed10ms = (timeStamp - before) / 100000;
270270
this.before = timeStamp;
271-
logger.trace(
272-
"Reader [{}] <-- cardResponse: {}, elapsed {} ms",
273-
this.getName(),
274-
cardResponse,
271+
logger.debug(
272+
"[reader={}] Receive [type=CardResponse, apduResponseCount={}, elapsedMs={}]",
273+
getName(),
274+
cardResponse != null ? cardResponse.getApduResponses().size() : 0,
275275
elapsed10ms / 10.0);
276276
}
277277
}

src/main/java/org/eclipse/keyple/core/service/ApduResponseAdapter.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
package org.eclipse.keyple.core.service;
1313

1414
import java.util.Arrays;
15-
import org.eclipse.keyple.core.util.json.JsonUtil;
15+
import org.eclipse.keyple.core.util.HexUtil;
1616
import org.eclipse.keypop.card.ApduResponseApi;
1717

1818
/**
@@ -67,13 +67,20 @@ public int getStatusWord() {
6767
}
6868

6969
/**
70-
* Converts the APDU response into a string where the data is encoded in a json format.
70+
* Returns a string representation of the object.
7171
*
72-
* @return A not empty String
72+
* @return A string that represents the current state of the object.
7373
* @since 2.0.0
7474
*/
7575
@Override
7676
public String toString() {
77-
return "APDU_RESPONSE = " + JsonUtil.toJson(this);
77+
return "ApduResponseAdapter{"
78+
+ "apdu='"
79+
+ HexUtil.toHex(apdu)
80+
+ '\''
81+
+ ", statusWord='"
82+
+ HexUtil.toHex(statusWord)
83+
+ '\''
84+
+ '}';
7885
}
7986
}

src/main/java/org/eclipse/keyple/core/service/AutonomousObservableLocalPluginAdapter.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ final class AutonomousObservableLocalPluginAdapter extends AbstractObservableLoc
4545
autonomousObservablePluginSpi.setCallback(this);
4646
} catch (Exception e) {
4747
if (logger.isTraceEnabled()) {
48-
logger.trace("Method 'setCallback(...)' unavailable for legacy plugin: {}", e.getMessage());
48+
logger.trace(
49+
"[plugin={}] Method 'setCallback(...)' unavailable for legacy plugin", getName());
4950
}
5051
autonomousObservablePluginSpi.connect(this);
5152
}
@@ -84,13 +85,13 @@ public void onReaderDisconnected(Set<String> readerNames) {
8485
for (String readerName : readerNames) {
8586
CardReader reader = this.getReader(readerName);
8687
if (reader == null) {
87-
logger.warn("Plugin [{}] unable to remove unknown reader [{}]", this.getName(), readerName);
88+
logger.warn("[plugin={}] Unable to remove unknown reader [name={}]", getName(), readerName);
8889
} else {
8990
// unregister and remove reader
9091
((LocalReaderAdapter) reader).unregister();
9192
getReadersMap().remove(reader.getName());
9293
logger.info(
93-
"Plugin [{}] removes reader [{}] from readers list", this.getName(), reader.getName());
94+
"[plugin={}] Reader removed from readers list [name={}]", getName(), reader.getName());
9495
notifyReaders.add(readerName);
9596
}
9697
}
@@ -109,6 +110,6 @@ private void addReader(ReaderSpi readerSpi) {
109110
reader.register();
110111
getReadersMap().put(reader.getName(), reader);
111112
logger.info(
112-
"Plugin [{}] adds reader [{}] to readers list", this.getName(), readerSpi.getName());
113+
"[plugin={}] Reader added to readers list [name={}]", getName(), readerSpi.getName());
113114
}
114115
}

src/main/java/org/eclipse/keyple/core/service/BasicCardSelectorAdapter.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
************************************************************************************** */
1212
package org.eclipse.keyple.core.service;
1313

14-
import org.eclipse.keyple.core.util.json.JsonUtil;
1514
import org.eclipse.keypop.reader.selection.BasicCardSelector;
1615

1716
/**
@@ -66,13 +65,20 @@ public BasicCardSelector filterByPowerOnData(String powerOnDataRegex) {
6665
}
6766

6867
/**
69-
* Converts the current instance into a string where the data is encoded in a json format.
68+
* Returns a string representation of the object.
7069
*
71-
* @return A not empty String
70+
* @return A string that represents the current state of the object.
7271
* @since 3.0.0
7372
*/
7473
@Override
7574
public String toString() {
76-
return "BASIC_CARD_SELECTOR = " + JsonUtil.toJson(this);
75+
return "BasicCardSelectorAdapter{"
76+
+ "logicalProtocolName='"
77+
+ logicalProtocolName
78+
+ '\''
79+
+ ", powerOnDataRegex='"
80+
+ powerOnDataRegex
81+
+ '\''
82+
+ '}';
7783
}
7884
}

src/main/java/org/eclipse/keyple/core/service/CardInsertionActiveMonitoringJobAdapter.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ final class CardInsertionActiveMonitoringJobAdapter extends AbstractMonitoringJo
3131
private static final Logger logger =
3232
LoggerFactory.getLogger(CardInsertionActiveMonitoringJobAdapter.class);
3333

34+
private static final String JOB_ID = "INSERTION_ACTIVE";
35+
3436
private final long sleepDurationMillis;
3537
private final boolean monitorInsertion;
3638
private final CardReader reader;
@@ -76,7 +78,8 @@ public void run() {
7678
try {
7779
if (logger.isTraceEnabled()) {
7880
logger.trace(
79-
"Start monitoring job polling process using 'isCardPresent()' method on reader [{}]",
81+
"[fsmJob={}, reader={}] Starting monitoring job polling process using 'isCardPresent()'",
82+
JOB_ID,
8083
reader.getName());
8184
}
8285
// re-init loop value to true
@@ -85,15 +88,15 @@ public void run() {
8588
// polls for CARD_INSERTED
8689
if (monitorInsertion && reader.isCardPresent()) {
8790
if (logger.isTraceEnabled()) {
88-
logger.trace("Card present");
91+
logger.trace("[fsmJob={}, reader={}] Card present", JOB_ID, reader.getName());
8992
}
9093
monitoringState.onEvent(ObservableLocalReaderAdapter.InternalEvent.CARD_INSERTED);
9194
return;
9295
}
9396
// polls for CARD_REMOVED
9497
if (!monitorInsertion && !reader.isCardPresent()) {
9598
if (logger.isTraceEnabled()) {
96-
logger.trace("Card not present");
99+
logger.trace("[fsmJob={}, reader={}] Card not present", JOB_ID, reader.getName());
97100
}
98101
loop.set(false);
99102
monitoringState.onEvent(ObservableLocalReaderAdapter.InternalEvent.CARD_REMOVED);
@@ -109,7 +112,10 @@ public void run() {
109112
}
110113
}
111114
if (logger.isTraceEnabled()) {
112-
logger.trace("Monitoring job polling process stopped");
115+
logger.trace(
116+
"[fsmJob={}, reader={}] Monitoring job polling process stopped",
117+
JOB_ID,
118+
reader.getName());
113119
}
114120
} catch (RuntimeException e) {
115121
((ObservableLocalReaderAdapter) reader)

0 commit comments

Comments
 (0)