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 <zel...@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 <zel...@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-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org