-
Notifications
You must be signed in to change notification settings - Fork 26
chore/bump-version-0.6.1 #454
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…idelines High-priority logging fixes based on comprehensive code review: 1. Fixed empty error message in UserProfile.java - Added descriptive error message and context to exception - Now properly describes Bech32 conversion failure 2. Improved generic warning in GenericEvent.java - Changed from log.warn(ex.getMessage()) to include full context - Added exception stacktrace for better debugging - Message now explains serialization failure context 3. Optimized expensive debug logging in GenericEvent.java - Changed serialized event logging from DEBUG to TRACE level - Added guard with log.isTraceEnabled() to prevent unnecessary String creation - Reduces performance overhead when TRACE is disabled 4. Fixed inappropriate INFO level in GenericTagDecoder.java - Changed log.info to log.debug for routine decoding operation - INFO should be for noteworthy events, not expected operations 5. Added comprehensive LOGGING_REVIEW.md - Documents all logging practices against Clean Code principles - Identifies 8 priority levels of improvements - Overall grade: B+ (will be A- after all high-priority fixes) Compliance with Clean Code chapters 2, 3, 4, 7, 10, 17: - Meaningful error messages (Ch 2: Meaningful Names) - Proper context in logs (Ch 4: Comments) - Better error handling (Ch 7: Error Handling) - Reduced code smells (Ch 17: Smells and Heuristics) Ref: LOGGING_REVIEW.md for complete analysis and remaining action items 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Medium-priority logging improvements per Clean Code Chapter 3 (Functions): 1. Removed constructor logging from PrivateKey class - Removed "Created private key from byte array" debug log - Removed "Created private key from hex string" debug log - Removed "Generated new random private key" debug log - Simplified generateRandomPrivKey() to single return statement 2. Removed constructor logging from PublicKey class - Removed "Created public key from byte array" debug log - Removed "Created public key from hex string" debug log 3. Removed routine operation logging from BaseKey class - Removed "Converted key to Bech32" debug log in toBech32String() - Removed "Converted key to hex string" debug log in toHexString() - Simplified methods to single return statements 4. Enhanced error logging in BaseKey.toBech32String() - Added key type and prefix to error message for better context - Improved exception message to include original error Rationale: - Low-level data container classes should not log object creation - These classes are used frequently, logging creates noise - Constructor logging violates Single Responsibility Principle - If object creation tracking is needed, use profiler/instrumentation - Application layer should handle logging when appropriate Performance impact: - Reduces log overhead for frequently created objects - Eliminates unnecessary string formatting on every key creation Compliance: - Ch 3: Functions do one thing (no logging side effects) - Ch 10: Classes have single responsibility (data, not logging) - Ch 17: Eliminates logging "code smell" in utilities Ref: LOGGING_REVIEW.md sections 2, 5, and 8 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
…ines
Low-priority cleanup per LOGGING_REVIEW.md recommendations:
Removed all log.info("testMethodName") statements from test files across
the entire codebase (89 total removals):
- nostr-java-event: 58 removals
- nostr-java-api: 26 removals
- nostr-java-id: 4 removals
- nostr-java-util: 1 removal
Rationale (Clean Code Ch 17: Code Smells - G15 Selector Arguments):
- Test method names are already visible in JUnit test output
- Logging test names adds noise without value
- JUnit @DisplayName annotation is the proper way to add readable test names
- Reduces unnecessary log output during test execution
Example of proper approach (if needed):
```java
@test
@DisplayName("Event filter encoder should serialize filters correctly")
void testEventFilterEncoder() {
// test code
}
```
Performance impact:
- Eliminates 89 unnecessary log calls during test execution
- Cleaner test output
Compliance:
- Ch 17: Removes code smell (unnecessary logging in tests)
- Ch 4: Tests are self-documenting without log statements
Ref: LOGGING_REVIEW.md section 6 (Code Smells - G15)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
…cketClient Low-priority refactoring per LOGGING_REVIEW.md recommendations: Extracted duplicated recovery logging into reusable helper methods: 1. Added logRecoveryFailure(String operation, int size, IOException ex) - Handles simple recovery failures (send message, subscribe) - Reduces duplication in recover() and recoverSubscription() methods 2. Added logRecoveryFailure(String operation, String command, int size, IOException ex) - Handles recovery failures with command context - Used for BaseMessage recovery methods Benefits: - Reduces code duplication (4 nearly identical log statements → 2 helper methods) - Makes recovery logging consistent across all methods - Easier to maintain and update logging format in one place - Follows DRY (Don't Repeat Yourself) principle Compliance: - Ch 17: Eliminates code smell (G5 - Duplication) - Ch 3: Functions do one thing (separate logging concern) - Ch 10: Single Responsibility (logging extracted to helper) Before: 4 duplicated log.error() calls with similar patterns After: 2 reusable helper methods, 4 one-line calls Ref: LOGGING_REVIEW.md section 6 (Code Smells - G5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Update version from 0.6.0 to 0.6.1 across all modules: - Root pom.xml (project version and nostr-java.version property) - All 9 module pom.xml files Changes in this release: - Fixed empty error messages and improved log context - Removed constructor logging from low-level key classes - Optimized expensive debug logging with guards - Fixed inappropriate log levels (INFO → DEBUG where needed) - Removed 89 test method name log statements - Extracted duplicated recovery logging Logging compliance improved from B+ to A- per Clean Code guidelines. Ref: LOGGING_REVIEW.md for complete analysis 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull Request: Logging Improvements and Version 0.6.1
Summary
This PR addresses comprehensive logging improvements across the nostr-java codebase to comply with Clean Code principles (chapters 2, 3, 4, 7, 10, 17) as outlined in AGENTS.md. The changes improve code quality, reduce noise, enhance debugging capabilities, and eliminate code smells related to logging practices.
The logging review identified several areas where logging did not follow best practices:
All issues have been systematically addressed and the logging grade has improved from B+ to A-.
Related issue: N/A (proactive code quality improvement)
What changed?
Review the changes in this order:
UserProfile.java- Fixed empty error messageGenericEvent.java- Improved warning context, optimized serialization loggingGenericTagDecoder.java- Changed INFO to DEBUG for routine operationsPrivateKey.java,PublicKey.java,BaseKey.java- Removed constructor loggingSpringWebSocketClient.java- Extracted duplicated recovery loggingSummary of Changes by Category
Logging Quality Improvements:
Code Cleanup:
Files Modified: 17 files across 4 commits (plus version bump)
BREAKING
No breaking changes. All changes are internal improvements to logging behavior:
Review focus
Error message clarity: Are the new error messages in
UserProfile.javaandGenericEvent.javasufficiently descriptive for debugging?Performance optimization: Is the
log.isTraceEnabled()guard inGenericEvent.getByteArraySupplier()the right approach for expensive serialization logging?Abstraction level: Does removing constructor logging from
PrivateKey,PublicKey, andBaseKeyalign with your vision for low-level utility classes?Refactoring pattern: Are the extracted
logRecoveryFailure()helper methods inSpringWebSocketClientclear and maintainable?Test philosophy: Confirm that removing log.info("testMethodName") is acceptable and JUnit's native output is sufficient?
Detailed Changes
1. High-Priority Fixes (Commit: 6e1ee6a)
UserProfile.java:46 - Fixed empty error message
GenericEvent.java:196 - Improved generic warning
GenericEvent.java:277 - Optimized expensive debug logging
GenericTagDecoder.java:56 - Fixed inappropriate INFO level
2. Medium-Priority Fixes (Commit: 911ab87)
Removed constructor logging from low-level key classes:
PrivateKey.java - 3 log statements removed
PublicKey.java - 2 log statements removed
BaseKey.java - 2 log statements removed, 1 enhanced
3. Test Cleanup (Commit: 33270a7)
Removed 89 test method name log statements across:
All instances of:
4. Refactoring (Commit: 337bce4)
SpringWebSocketClient.java - Extracted duplicated recovery logging
Added helper methods:
Simplified 4 recovery methods:
5. Version Bump (Commit: 90a4c8b)
Updated version from 0.6.0 to 0.6.1 in:
pom.xml(project version + nostr-java.version property)Clean Code Compliance
Chapter 2: Meaningful Names ✅
Chapter 3: Functions ✅
Chapter 4: Comments ✅
Chapter 7: Error Handling ✅
Chapter 10: Classes ✅
Chapter 17: Smells and Heuristics ✅
Benefits
For Developers
For Operations/Support
For Codebase Quality
Testing & Verification
Manual Testing
Build Verification
mvn clean verify # All tests pass with cleaner outputLog Output Samples
Before (noisy constructor logging):
After (clean, focused logging):
Migration Notes
For Library Users
No action required. This is a patch release with no breaking changes.
For Contributors
@DisplayNameinstead of log.info()log.isXXXEnabled()For Future Development
LOGGING_REVIEW.mdfor logging best practicesImpact Assessment
Performance Impact
Security Impact
Compatibility Impact
Documentation
LOGGING_REVIEW.md- Complete analysis and guidelinesChecklist
References
Release Notes (0.6.1)
Fixed
Improved
Refactored
Documentation
Logging Grade: B+ → A-
Commits: 5 (4 logging improvements + 1 version bump)
Files Changed: 17 total
🤖 Generated with Claude Code
Co-Authored-By: Claude [email protected]