rewrite-logging-frameworks
rewrite-logging-frameworks copied to clipboard
Logback to log4j2 support
I was reading the documentation here and can see log4j2 to logback conversion is supported. But there is no way to convert vice versa (from logback to log4j2).
Are there plans to implement this in the future?
hi @Misha123456 ! We had not planned to support a migration from logback to log4j2, but are open to contributions in case you're interested to pick that up. Implementation wise I imagine it will be very similar to the log4j2 -> logback recipes. If you're merely looking to switch dependencies you could have a look at META-INF/rewrite/logback.yml, but a full migration might also involve converting for instance logback.xml.
@timtebeek,
Could you assign this issue to me?
I would split it into two independent recipes:
- "SLF4J to Log4j API", which mostly what library developers are interested in,
- "Logback to Log4j Core", which would be targeted to application developers and just switches dependencies and configuration.
Sure sounds good; Thanks for taking this on!
We recently completed quite a few recipes to move from JUL to SLF4J; those are now under: https://github.com/openrewrite/rewrite-logging-frameworks/tree/main/src/main/java/org/openrewrite/java/logging/slf4j
I suspect that the approach taken there could be largely followed here: Mostly use declarative or Refaster recipes, and complement those with explicit recipes as needed, which wouldn't need much.
We have recently revamped our documentation with:
- A Migrating from SLF4J guide, which points to the existing OpenRewrite recipe.
- A Migrating from Logback guide, which will point to the Logback to Log4j Core recipe once it is ready.
Unlike the migration from JUL to SLF4J, which requires mostly code changes, migrating from Logback to Log4j Core requires:
- A migration of runtime dependencies, which can be easily done with the current declarative Maven/Gradle recipes.
- A migration of the configuration file.
The latter requires most of the work, since the configuration options of every standard Logback plugin must be matched to the corresponding options of a Log4j Core plugin. Starting October 2024, I plan to add support for a Logback-to-Log4j Core configuration conversion to the log4j-config-converter artifact introduced in https://github.com/apache/logging-log4j-transform/pull/93. This artifact can then be added as a dependency of the OpenRewrite recipe.
Nice to see, thanks! Spotted this note in the docs that ought to be an easy recipe for your users too.
Note that
LogManager.getLogger(Foo.class)can be simplified asLogManager.getLogger(), if Foo is the enclosing class of the field.