rewrite-logging-frameworks icon indicating copy to clipboard operation
rewrite-logging-frameworks copied to clipboard

Logback to log4j2 support

Open Misha123456 opened this issue 2 years ago • 6 comments

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?

Misha123456 avatar Mar 16 '23 13:03 Misha123456

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 avatar Mar 17 '23 15:03 timtebeek

@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.

ppkarwasz avatar Dec 11 '23 14:12 ppkarwasz

Sure sounds good; Thanks for taking this on!

timtebeek avatar Dec 11 '23 14:12 timtebeek

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.

timtebeek avatar Jul 14 '24 17:07 timtebeek

We have recently revamped our documentation with:

Unlike the migration from JUL to SLF4J, which requires mostly code changes, migrating from Logback to Log4j Core requires:

  1. A migration of runtime dependencies, which can be easily done with the current declarative Maven/Gradle recipes.
  2. 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.

ppkarwasz avatar Jul 15 '24 06:07 ppkarwasz

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 as LogManager.getLogger(), if Foo is the enclosing class of the field.

timtebeek avatar Jul 15 '24 08:07 timtebeek