Log4j 2 uses a cache to store information about the plugins it discovers during initialization.
The cache file has the .dat
extension and contains serialized data related to the plugin classes found in the classpath. This cache file helps Log4j 2 avoid re-scanning the classpath every time the application starts up, resulting in faster startup times.
When building a jar file, these .dat
files need to be merged using the log4j-core library. Merging them using the sbt-assembly doesn't work.
This plugin implements a CustomMergeStrategy
which uses the log4j2 libraries to merge multiple .dat
files.
In project/plugins.sbt
add
addSbtPlugin("uk.gov.nationalarchives" % "sbt-assembly-log4j2" % "x.x.x")
Add the merge strategy to your assembly merge strategy in build.sbt
import uk.gov.nationalarchives.sbt.Log4j2MergePlugin
(assembly / assemblyMergeStrategy) := {
case PathList(ps@_*) if ps.last == "Log4j2Plugins.dat" => Log4j2MergePlugin.log4j2MergeStrategy
case _ => MergeStrategy.first
}
Run sbt test
for the unit tests.
Run sbt scripted
for sbt script tests.
The plugin is deployed to Maven central using GitHub actions.