Skip to content
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

fix(logging): Repair the logging backend #1695

Merged
merged 4 commits into from
Feb 19, 2024
Merged

Conversation

MichaelsJP
Copy link
Member

This removes the exclusion of log4j-slf4j2-impl (therefore including it) and removes the package slf4j-reload4j.

Graphhopper uses slf4j as a logging backend, whereas ors uses log4j.
We need log4j-slf4j2-impl to tunnel slf4j through our log4j logging interface. This is not 100% evident in all run scenarios. While native spring runs can cope with this partially, running in an external tomcat environment leads to no or missing log output once the war is deployed.

We don't need slf4j-reload4j right now, as it would only be useful for hot-reloading logging configs while ors is running. Another side effect of just keeping the lib is that when spring or tomcat is looking for a log facility, it sees log4j as well as slf4j-reload4j. It can happen, that it appends to slf4j-reload4j instead of log4j in certain scenarios, which leads to no available logging output. This confusion can lead to no log output in tomcat/war deployment scenarios.

Additionally, a redundant exclusion is removed as well as the missing spring-boot-starter-validation included.

Pull Request Checklist

  • 1. I have rebased the latest version of the main branch into my feature branch and all conflicts
    have been resolved.
  • 2. I have added information about the change/addition to functionality to the CHANGELOG.md file under the
    [Unreleased] heading.
  • 3. I have documented my code using JDocs tags.
  • 4. I have removed unnecessary commented out code, imports and System.out.println statements.
  • 5. I have written JUnit tests for any new methods/classes and ensured that they pass.
  • 6. I have created API tests for any new functionality exposed to the API.
  • 7. If changes/additions are made to the ors-config.json file, I have added these to the ors config documentation
    along with a short description of what it is for, and documented this in the Pull Request (below).
  • 8. I have built graphs with my code of the Heidelberg.osm.gz file and run the api-tests with all test passing
  • 9. I have referenced the Issue Number in the Pull Request (if the changes were from an issue).
  • 10. For new features or changes involving building of graphs, I have tested on a larger dataset
    (at least Germany), and the graphs build without problems (i.e. no out-of-memory errors).
  • 11. For new features or changes involving the graphbuilding process (i.e. changing encoders, updating the
    importer etc.), I have generated longer distance routes for the affected profiles with different options
    (avoid features, max weight etc.) and compared these with the routes of the same parameters and start/end
    points generated from the current live ORS.
    If there are differences then the reasoning for these MUST be documented in the pull request.
  • 12. I have written in the Pull Request information about the changes made including their intended usage
    and why the change was needed.
  • 13. For changes touching the API documentation, I have tested that the API playground renders correctly.

Fixes # .

Information about the changes

  • Key functionality added:
  • Reason for change:

Examples and reasons for differences between live ORS routes, and those generated from this pull request

Required changes to ors config (if applicable)

@github-actions github-actions bot added the fix label Feb 19, 2024
This removes the exclusion of log4j-slf4j2-impl (therefore including it) and removes the package slf4j-reload4j.

Graphhopper uses slf4j as a logging backend, whereas ors uses log4j.
We need log4j-slf4j2-impl to tunnel slf4j through our log4j logging interface. This is not 100% evident in all run scenarios. While native spring runs can cope with this partially, running in an external tomcat environment leads to no or missing log output once the war is deployed.

We don't need slf4j-reload4j right now, as it would only be useful for hot-reloading logging configs while ors is running. Another side effect of just keeping the lib is that when spring or tomcat is looking for a log facility, it sees log4j as well as slf4j-reload4j. It can happen, that it appends to slf4j-reload4j instead of log4j in certain scenarios, which leads to no available logging output. This confusion can lead to no log output in tomcat/war deployment scenarios.
spring-boot-starter-validation is needed for object validation. When using beans, those features are automatically used and without this dependency no validation can happen and it dies silently. The warning message regarding the missing spring-boot-starter-validation package can only be seen in root: DEBUG mode.
org.jline.jline is already excluded in the main pom.
Copy link
Contributor

@takb takb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@takb takb merged commit e9bc57f into main Feb 19, 2024
15 checks passed
@takb takb deleted the fix/log4j-slf4j-logging-issues branch February 19, 2024 14:17
@MichaelsJP MichaelsJP added this to the V8 Release milestone Mar 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: Awaiting release
Development

Successfully merging this pull request may close these issues.

2 participants