Hi Istvan,

Do you expect any problems for coprocessors and Phoenix?

-- Tamaas


On Thu, Dec 11, 2025 at 2:39 PM Istvan Toth <[email protected]> wrote:

> slf4j 2 is backwards API compatible with slf4j 1.
> (Confirmed by HBase compiling fine after changing the version.)
>
> slf4j 1 and 2 don't work together, you need to include one of the 1.7.x or
> 2.x slfj4-api jars,
> and you need to match the other slf4j jars' versions to the API.
>
> Changing HBase to use slf4j2 is not expected to affect applications using
> slf4j1.
> As long as we don't use the slf4j specific features from slf4j-api 2.x,
> like the
> fluent API, HBase will continue working with the slf4j 1.x API and other
> jars.
>
> The only problem I can see is if the application is adding slf4j 1.x jars
> statically,
> or via maven etc, and the slf4j 2 jars are also somehow added to the
> classpath
> without overriding the slf4j 1.x versions.
>
> Having both slf4j 1 and 2 jars mixed on the classpath is asking for
> trouble, unless you can
> control their ordering.
>
> I can see some logging specific test failures in my slf4j2 PR, I'm gonna
> look into them.
>
> Istvan
>
> On Thu, Dec 11, 2025 at 1:35 PM 张铎(Duo Zhang) <[email protected]>
> wrote:
>
> > In general, a HBase cluster instance is bound with log4j2, if users
> > want to use other logging frameworks they need to do some magic, like
> > replacing the logging jars and writing configuration files on their
> > own.
> >
> > But another usage is that, users may depend on hbase-client,
> > hbase-testing-util in their own java problem, where we only depend on
> > slf4j so users are free to use their own logging frameworks.
> >
> > For the first usage, it is free for us to change the logging facade,
> > we only need to consider the second usage. We need to figure out a way
> > that how slf4j1 and slf4j2 can work together without problems, as
> > users may depend on different jars and some of them may depend on
> > slf4j1 and some of them may depend on slf4j2(I guess there is way as
> > there are already bunch of jars which depend on slf4j2).
> >
> > Thanks.
> >
> > Istvan Toth <[email protected]> 于2025年12月11日周四 18:38写道:
> > >
> > > Luckily HBase is basically doing the right thing already, and none of
> our
> > > uberjars have any logging (slf4j or backend) classes, neither relocated
> > nor
> > > unrelocated.
> > >
> > > I cannot think of a use case where we would want to shade in logging
> > > classes.
> > >
> > > IIRC shading the slf4j and logging backend jars was problematic with
> > SLF4j
> > > 1.x as well.
> > >
> > > Technically, I think that the services mechanism would work when
> shaded,
> > as
> > > long as
> > > we shade everything  (slf4j, provider, logging backend) in.
> > > If only some classes are shaded in, then they probably won't
> > > work. (But I don't think we should do that at all)
> > >
> > > We want consumers of the HBase client to be able to bring their own
> > logging
> > > backend
> > > and slf4j provider classes so that HBase uses the same logging infra as
> > the
> > > application.
> > >
> > > We do provide our defaults in the "hbase classpath" list but the user
> can
> > > replace those.
> > >
> > > The mapreduce classpath is always a problem as Hadoop only partially
> uses
> > > slf4j, so we
> > > include our logging classes in the "hbase mapredcp" list, and try to
> make
> > > sure that those
> > > come before Hadoop's logging classes on the classpath.
> > >
> > > In fact, as long as only HBase is using log4j2, it will reduce logging
> > > confusion, as
> > > log4j2-api won't pick up the log4j1 adapter classes coming from Hadoop
> or
> > > elsewhere.
> > >
> > > I'm going to run some tests with slf4j2 and the byo-hadoop HBase
> > > distribution, and report here.
> > >
> > > Thanks,
> > > Istvan
> > >
> > > On Thu, Dec 11, 2025 at 10:44 AM Nick Dimiduk <[email protected]>
> > wrote:
> > >
> > > > I think the discuss thread is wise here. The logging API is
> > > > effectively part of our public API (in terms of our compatibility
> > > > guarantees), so it's worth noting.
> > > >
> > > > With the service selection mechanism, will this introduce any
> troubles
> > for
> > > > us if we're shading the implementation jar? Maybe there's no reason
> > that we
> > > > would want to...
> > > >
> > > > Nice one Istvan.
> > > >
> > > > Thanks,
> > > > Nick
> > > >
> > > > On Thu, Dec 11, 2025 at 10:08 AM Istvan Toth <[email protected]>
> wrote:
> > > >
> > > > > Hi!
> > > > >
> > > > > I think that it's time to upgrade to slf4j 2.x in HBase. (3.0+, but
> > > > > possibly 2.7 as well)
> > > > > SLF4j 1 is no longer developed, and SLF4j 2 has some nice new
> > features
> > > > like
> > > > > the fluent API which makes logging more efficient.
> > > > >
> > > > > The only major change that I think may affect us is that the
> logging
> > > > > backend is now selected via the services mechanism, instead of
> > searching
> > > > > the classpath for implementations, and is explicitly configurable.
> > > > >
> > > > > I was hesitant to open this thread as the code change is trivial,
> but
> > > > log4j
> > > > > is such a fundamental library that I decided to go for a wider
> > > > discussion.
> > > > >
> > > > > https://issues.apache.org/jira/browse/HBASE-29769
> > > > >
> > > > > best regards
> > > > > Istvan
> > > > >
> > > >
> > >
> > >
> > > --
> > > *István Tóth* | Sr. Staff Software Engineer
> > > *Email*: [email protected]
> > > cloudera.com <https://www.cloudera.com>
> > > [image: Cloudera] <https://www.cloudera.com/>
> > > [image: Cloudera on Twitter] <https://twitter.com/cloudera> [image:
> > > Cloudera on Facebook] <https://www.facebook.com/cloudera> [image:
> > Cloudera
> > > on LinkedIn] <https://www.linkedin.com/company/cloudera>
> > > ------------------------------
> > > ------------------------------
> >
>
>
> --
> *István Tóth* | Sr. Staff Software Engineer
> *Email*: [email protected]
> cloudera.com <https://www.cloudera.com>
> [image: Cloudera] <https://www.cloudera.com/>
> [image: Cloudera on Twitter] <https://twitter.com/cloudera> [image:
> Cloudera on Facebook] <https://www.facebook.com/cloudera> [image: Cloudera
> on LinkedIn] <https://www.linkedin.com/company/cloudera>
> ------------------------------
> ------------------------------
>

Reply via email to