logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Zellyn Hunter <zel...@gmail.com>
Subject Re: Setting logger levels not working when building with Bazel
Date Fri, 15 Nov 2019 15:30:21 GMT
Yeah, I think so. But unfortunately, none of the recommended ways of
programmatically setting a logger's level include replicating the
context-finding code path that would have been used to get the logger
initially, if you used the class rather than the name.

Zellyn

On Fri, Nov 15, 2019 at 10:27 AM Matt Sicker <boards@gmail.com> wrote:
>
> You still raise an interesting question about the LoggerContext thing.
> I've never really understood the "current context" boolean argument
> and whether or not that ever works properly. I think in theory, the
> current context is supposed to cache whatever the last seen
> LoggerContext in that thread is which wouldn't work properly in, say,
> a shared thread pool with multiple LoggerContexts active.
>
> On Thu, 14 Nov 2019 at 15:34, Zellyn Hunter <zellyn@gmail.com> wrote:
> >
> > After more experimentation, it appears that whatever plumbing we have
> > between maven/bazel/etc. was dropping "Multi-Release: true" from the
> > MANIFEST.MF file.
> >
> > ¯\_(ツ)_/¯
> >
> > On Thu, Nov 14, 2019 at 4:02 PM Zellyn Hunter <zellyn@gmail.com> wrote:
> > >
> > > Further investigation and simplification:
> > >
> > > I created a very simple test class:
> > >
> > > package com.squareup.log4jtest;
> > > public class Log4jTest {
> > >   public static void main(String args[]) {
> > >     org.apache.logging.log4j.Logger logger1 =
> > > org.apache.logging.log4j.LogManager.getLogger(Log4jTest.class);
> > >     org.apache.logging.log4j.Logger logger2 =
> > > org.apache.logging.log4j.LogManager.getLogger(Log4jTest.class.getName());
> > >     System.out.println(logger1.toString());
> > >     System.out.println(logger2.toString());
> > >   }
> > > }
> > >
> > > I get the weird behavior when running with the maven/bazel api jar:
> > >
> > > java -cp Log4jTest.jar:maven-log4j-api-2.12.1.jar:log4j-core-2.12.1.jar
> > > com.squareup.log4jtest.Log4jTest
> > > ERROR StatusLogger No Log4j 2 configuration file found. Using default
> > > configuration (logging only errors to the console), or user
> > > programmatically provided configurations. Set system property
> > > 'log4j2.debug' to show Log4j 2 internal initialization logging. See
> > > https://logging.apache.org/log4j/2.x/manual/configuration.html for
> > > instructions on how to configure Log4j 2
> > > WARNING: sun.reflect.Reflection.getCallerClass is not supported. This
> > > will impact performance.
> > > com.squareup.log4jtest.Log4jTest:ERROR in 799f7e29
> > > com.squareup.log4jtest.Log4jTest:ERROR in Default
> > >
> > > But it's working fine when I use the log4j jar downloaded from the log4j site:
> > >
> > > java -cp Log4jTest.jar:log4j-api-2.12.1.jar:log4j-core-2.12.1.jar
> > > com.squareup.log4jtest.Log4jTest
> > > ERROR StatusLogger No Log4j 2 configuration file found. Using default
> > > configuration (logging only errors to the console), or user
> > > programmatically provided configurations. Set system property
> > > 'log4j2.debug' to show Log4j 2 internal initialization logging. See
> > > https://logging.apache.org/log4j/2.x/manual/configuration.html for
> > > instructions on how to configure Log4j 2
> > > com.squareup.log4jtest.Log4jTest:ERROR in 799f7e29
> > > com.squareup.log4jtest.Log4jTest:ERROR in 799f7e29
> > >
> > >
> > > There's not much difference between the .jar file. Only the manifest,
> > > and build-data.properties. Unzipping and diffing them, I get:
> > >
> > > ~/tmp diff -r apache/ maven/
> > > diff -r apache/META-INF/MANIFEST.MF maven/META-INF/MANIFEST.MF
> > > 2,48c2,3
> > > < Bundle-License: https://www.apache.org/licenses/LICENSE-2.0.txt
> > > < Bundle-SymbolicName: org.apache.logging.log4j.api
> > > < Built-By: rgoers
> > > < Bnd-LastModified: 1565148668668
> > > < Implementation-Vendor-Id: org.apache.logging.log4j
> > > < Specification-Title: Apache Log4j API
> > > < Log4jReleaseManager: Ralph Goers
> > > < Bundle-DocURL: https://www.apache.org/
> > > < Import-Package: org.apache.logging.log4j,org.apache.logging.log4j.mess
> > > <  age,org.apache.logging.log4j.simple,org.apache.logging.log4j.spi,org.
> > > <  apache.logging.log4j.status,org.apache.logging.log4j.util,org.osgi.fr
> > > <  amework;version="[1.6,2)",org.osgi.framework.wiring;version="[1.0,2)"
> > > <  ,sun.reflect;resolution:=optional
> > > < Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.7))"
> > > < Export-Package: org.apache.logging.log4j;uses:="org.apache.logging.log
> > > <  4j.message,org.apache.logging.log4j.spi,org.apache.logging.log4j.util
> > > <  ";version="2.12.1",org.apache.logging.log4j.message;uses:="org.apache
> > > <  .logging.log4j.util";version="2.12.1",org.apache.logging.log4j.simple
> > > <  ;uses:="org.apache.logging.log4j,org.apache.logging.log4j.message,org
> > > <  .apache.logging.log4j.spi,org.apache.logging.log4j.util";version="2.1
> > > <  2.1",org.apache.logging.log4j.spi;uses:="org.apache.logging.log4j,org
> > > <  .apache.logging.log4j.message,org.apache.logging.log4j.util";version=
> > > <  "2.12.1",org.apache.logging.log4j.status;uses:="org.apache.logging.lo
> > > <  g4j,org.apache.logging.log4j.message,org.apache.logging.log4j.spi";ve
> > > <  rsion="2.12.1",org.apache.logging.log4j.util;uses:="org.apache.loggin
> > > <  g.log4j.message,org.apache.logging.log4j.spi,org.osgi.framework";vers
> > > <  ion="2.12.1"
> > > < Bundle-Name: Apache Log4j API
> > > < Multi-Release: true
> > > < Bundle-Activator: org.apache.logging.log4j.util.Activator
> > > < Log4jReleaseVersion: 2.12.1
> > > < Implementation-Title: Apache Log4j API
> > > < Bundle-Description: The Apache Log4j API
> > > < Implementation-Version: 2.12.1
> > > < Specification-Vendor: The Apache Software Foundation
> > > < Bundle-ManifestVersion: 2
> > > < Bundle-Vendor: The Apache Software Foundation
> > > < Tool: Bnd-3.5.0.201709291849
> > > < Implementation-Vendor: The Apache Software Foundation
> > > < Bundle-Version: 2.12.1
> > > < X-Compile-Target-JDK: 1.7
> > > < X-Compile-Source-JDK: 1.7
> > > < Created-By: Apache Maven Bundle Plugin
> > > < Build-Jdk: 1.8.0_144
> > > < Specification-Version: 2.12.1
> > > < Implementation-URL: https://logging.apache.org/log4j/2.x/log4j-api/
> > > < Log4jReleaseKey: B3D8E1BA
> > > ---
> > > > Created-By: singlejar
> > > > Target-Label: @maven//:org_apache_logging_log4j_log4j_api
> > > Only in maven/: build-data.properties
> > > ~/tmp cat maven/build-data.properties
> > > build.target=bazel-out/darwin-fastbuild/bin/external/maven/v1/https/maven.global.square/artifactory/square-public/org/apache/logging/log4j/log4j-api/2.12.1/stamped_log4j-api-2.12.1.jar
> > >
> > > On Thu, Nov 14, 2019 at 2:17 PM Zellyn Hunter <zellyn@gmail.com> wrote:
> > > >
> > > > Perhaps to put it more succinctly, why are these loggers different?
> > > >
> > > >     org.apache.logging.log4j.Logger logger1 =
> > > > org.apache.logging.log4j.LogManager.getLogger(LogGrabberTest.class);
> > > >     org.apache.logging.log4j.Logger logger2 =
> > > > org.apache.logging.log4j.LogManager.getLogger(LogGrabberTest.class.getName());
> > > >
> > > > Here's what IntelliJ's debug pane says after these lines execute:
> > > > logger1 = {Logger@2317}
> > > > "com.squareup.logging.utils.LogGrabberTest:ERROR in 579bb367"
> > > > logger2 = {Logger@2318}
> > > > "com.squareup.logging.utils.LogGrabberTest:ERROR in Default"
> > > >
> > > > I would like to stop this from happening, but more importantly
> > > > understand (a) what is going on, and (b) why the FAQ answer for
> > > > setting a log level programmatically gives me a solution that doesn't
> > > > work, because it's dealing with different LoggerContexts.
> > > >
> > > > Thanks,
> > > >
> > > > Zellyn
> > > >
> > > >
> > > > On Thu, Nov 14, 2019 at 12:45 PM Zellyn Hunter <zellyn@gmail.com>
wrote:
> > > > >
> > > > > Hi folks,
> > > > >
> > > > > Please help me develop a mental model of what's going on with
> > > > > LoggerContexts here.
> > > > >
> > > > > I'm trying to get the following to work (log4j 2.12.1):
> > > > >
> > > > >     org.apache.logging.log4j.Logger logz =
> > > > > org.apache.logging.log4j.LogManager.getLogger(LogGrabberTest.class);
> > > > >     org.apache.logging.log4j.LogManager.getContext(false);  // just
for testing
> > > > >     org.apache.logging.log4j.core.config.Configurator.setLevel(LogGrabberTest.class.getName(),
> > > > > Level.DEBUG);
> > > > >
> > > > > However, the level is never getting set. If I watch instances of
> > > > > LoggerContext in IntelliJ's debug, I can see that after the first
> > > > > line, one named "579bb367" is created, but the second (and/or third)
> > > > > line causes one to be created named "Default". Then, the logger logz
> > > > > is never updated.
> > > > >
> > > > > If I add a config file to my classpath named
> > > > > log4j2.component.properties, with the value
> > > > > Log4jContextSelector=org.apache.logging.log4j.core.selector.BasicContextSelector,
> > > > > I can get it to work.
> > > > >
> > > > > However, I would like to not have to do that everywhere, and would
> > > > > very much like to understand why the ClassLoaderContextSelector is
> > > > > failing. This code all lives inside LogGrabberTest, so I'm not
> > > > > reaching across JAR/WAR/etc. boundaries or anything.
> > > > >
> > > > > This code all worked in Pants, I think because it just smooshes all
> > > > > the classes together into one Jar.
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Zellyn
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> > For additional commands, e-mail: log4j-user-help@logging.apache.org
> >
>
>
> --
> Matt Sicker <boards@gmail.com>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Mime
View raw message