[
https://issues.apache.org/jira/browse/ISIS-1979?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16608089#comment-16608089
]
ASF GitHub Bot commented on ISIS-1979:
--------------------------------------
andi-huber closed pull request #122: ISIS-1979: Refactor logging in headless
runtime and prevent configuriā¦
URL: https://github.com/apache/isis/pull/122
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/core/log4j/src/main/java/org/apache/isis/core/runtime/logging/IsisLoggingConfigurer.java
b/core/log4j/src/main/java/org/apache/isis/core/runtime/logging/IsisLoggingConfigurer.java
index 7e77a73251..344a3fd1ec 100644
---
a/core/log4j/src/main/java/org/apache/isis/core/runtime/logging/IsisLoggingConfigurer.java
+++
b/core/log4j/src/main/java/org/apache/isis/core/runtime/logging/IsisLoggingConfigurer.java
@@ -51,11 +51,15 @@ public IsisLoggingConfigurer(Level
rootLoggerLevelIfFallback) {
* The root logging level can also be adjusted using command line
arguments.
*/
public void configureLogging(final String configDirectory, final String[]
args) {
+ configureLoggingWithFile(configDirectory + "/" +
LoggingConstants.LOGGING_CONFIG_FILE, args);
+ }
+
+ public void configureLoggingWithFile(final String configFile, final
String[] args) {
if (loggingSetup) {
return;
}
loggingSetup = true;
- configureLogging(configDirectory);
+ configureLogging(configFile);
applyLoggingLevelFromCommandLine(args);
}
@@ -77,12 +81,11 @@ private static void applyLoggingLevelFromCommandLine(final
String[] args) {
* {@link Level#WARN warning}, a typical {@link PatternLayout} and logging
* to the {@link ConsoleAppender console}.
*/
- private void configureLogging(final String configDirectory) {
+ private void configureLogging(final String configFile) {
final Properties properties = new Properties();
- final String path = configDirectory + "/" +
LoggingConstants.LOGGING_CONFIG_FILE;
FileInputStream inStream = null;
try {
- inStream = new FileInputStream(path);
+ inStream = new FileInputStream(configFile);
properties.load(inStream);
} catch (final IOException ignore) {
// ignore
@@ -94,7 +97,7 @@ private void configureLogging(final String configDirectory) {
InputStream inStream2 = null;
try {
final ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
- inStream2 = classLoader.getResourceAsStream(path);
+ inStream2 = classLoader.getResourceAsStream(configFile);
if (inStream2 != null) {
properties.load(inStream2);
}
diff --git
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/HeadlessWithBootstrappingAbstract.java
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/HeadlessWithBootstrappingAbstract.java
index d764749198..67703969f3 100644
---
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/HeadlessWithBootstrappingAbstract.java
+++
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/HeadlessWithBootstrappingAbstract.java
@@ -18,22 +18,21 @@
*/
package org.apache.isis.core.runtime.headless;
-import java.io.PrintStream;
-
import com.google.common.base.Strings;
-
-import org.apache.log4j.PropertyConfigurator;
-import org.joda.time.LocalDate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.event.Level;
-
import org.apache.isis.applib.Module;
import org.apache.isis.applib.clock.Clock;
import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.core.commons.factory.InstanceUtil;
+import org.apache.isis.core.runtime.headless.logging.LeveledLogger;
import org.apache.isis.core.runtime.headless.logging.LogConfig;
import org.apache.isis.core.runtime.headless.logging.LogStream;
+import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
+import org.joda.time.LocalDate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.event.Level;
+
+import java.io.PrintStream;
/**
* Provides headless access to the system, first bootstrapping the system if
required.
@@ -53,6 +52,8 @@ protected static PrintStream logPrintStream(Level level) {
return LogStream.logPrintStream(LOG, level);
}
+ private final LeveledLogger logger;
+
private final static ThreadLocal<Boolean> setupLogging = new
ThreadLocal<Boolean>() {{
set(false);
}};
@@ -70,10 +71,12 @@ protected HeadlessWithBootstrappingAbstract(
final Module module) {
this.logConfig = logConfig;
+ this.logger = new LeveledLogger(LOG, logConfig.getTestLoggingLevel());
final boolean firstTime = !setupLogging.get();
if(firstTime) {
- PropertyConfigurator.configure(logConfig.getLoggingPropertyFile());
+ IsisLoggingConfigurer loggingConfigurer = new
IsisLoggingConfigurer(org.apache.log4j.Level.INFO);
+
loggingConfigurer.configureLoggingWithFile(logConfig.getLoggingPropertyFile(),
new String[0]);
setupLogging.set(true);
}
@@ -136,22 +139,6 @@ protected void tearDownAllModules() {
}
protected void log(final String message) {
- switch (logConfig.getTestLoggingLevel()) {
- case ERROR:
- LOG.error(message);
- break;
- case WARN:
- LOG.warn(message);
- break;
- case INFO:
- LOG.info(message);
- break;
- case DEBUG:
- LOG.debug(message);
- break;
- case TRACE:
- LOG.trace(message);
- break;
- }
+ logger.log(message);
}
}
\ No newline at end of file
diff --git
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
index 63c3bb12d6..3164a8982d 100644
---
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
+++
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
@@ -19,10 +19,7 @@
package org.apache.isis.core.runtime.headless;
-import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
-
-import java.util.Set;
-
+import com.google.common.base.Joiner;
import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.fixtures.FixtureClock;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -34,13 +31,14 @@
import org.apache.isis.core.runtime.authentication.AuthenticationManager;
import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
import
org.apache.isis.core.runtime.headless.auth.AuthenticationRequestNameOnly;
-import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
import org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder;
import
org.apache.isis.core.runtime.systemusinginstallers.IsisComponentProvider;
-import com.google.common.base.Joiner;
+import java.util.Set;
+
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
/**
@@ -83,8 +81,6 @@ public static void set(IsisSystem isft) {
protected AppManifest appManifestIfAny;
- protected org.apache.log4j.Level level;
-
public T with(IsisConfiguration configuration) {
this.configuration = (IsisConfigurationDefault) configuration;
return uncheckedCast(this);
@@ -100,11 +96,6 @@ public T with(AppManifest appManifest) {
return uncheckedCast(this);
}
- public T withLoggingAt(org.apache.log4j.Level level) {
- this.level = level;
- return uncheckedCast(this);
- }
-
public S build() {
final IsisSystem isisSystem =
new IsisSystem(
@@ -115,10 +106,6 @@ public S build() {
}
protected S configure(final S isisSystem) {
- if(level != null) {
- isisSystem.setLevel(level);
- }
-
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public synchronized void run() {
@@ -166,24 +153,6 @@ protected IsisSystem(
this.authenticationRequestIfAny = authenticationRequestIfAny;
}
-
-
- // -- level
- private org.apache.log4j.Level level = org.apache.log4j.Level.INFO;
-
- /**
- * The level to use for the root logger if fallback (ie a
<tt>logging.properties</tt> file cannot be found).
- */
- public org.apache.log4j.Level getLevel() {
- return level;
- }
-
- public void setLevel(org.apache.log4j.Level level) {
- this.level = level;
- }
-
-
-
// -- setup (also componentProvider)
// populated at #setupSystem
@@ -210,9 +179,6 @@ protected void initIfRequiredThenOpenSession() throws
Exception {
boolean firstTime = isisSessionFactory == null;
if(firstTime) {
- IsisLoggingConfigurer isisLoggingConfigurer = new
IsisLoggingConfigurer(getLevel());
- isisLoggingConfigurer.configureLogging(".", new String[] {});
-
componentProvider = new IsisComponentProviderDefault(
appManifestIfAny,
configurationOverride
diff --git
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
index 372a969587..20c6f5e8e1 100644
---
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
+++
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
@@ -18,10 +18,6 @@
*/
package org.apache.isis.core.runtime.headless;
-import java.util.List;
-
-import javax.jdo.PersistenceManagerFactory;
-
import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.AppManifest2;
import org.apache.isis.applib.AppManifestAbstract2;
@@ -33,11 +29,15 @@
import org.apache.isis.applib.services.metamodel.MetaModelService;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.core.runtime.headless.logging.LogConfig;
+import org.apache.isis.core.runtime.headless.logging.LeveledLogger;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.jdo.PersistenceManagerFactory;
+import java.util.List;
+
public class IsisSystemBootstrapper {
private static final Logger LOG =
LoggerFactory.getLogger(IsisSystemBootstrapper.class);
@@ -48,8 +48,8 @@
private static ThreadLocal<AppManifest2> isftAppManifest = new
ThreadLocal<>();
- private final LogConfig logConfig;
private final AppManifest2 appManifest2;
+ private final LeveledLogger logger;
public IsisSystemBootstrapper(
final LogConfig logConfig,
@@ -61,8 +61,8 @@ public IsisSystemBootstrapper(
final LogConfig logConfig,
final AppManifest2 appManifest2) {
- this.logConfig = logConfig;
this.appManifest2 = appManifest2;
+ this.logger = new LeveledLogger(LOG, logConfig.getTestLoggingLevel());
}
public AppManifest2 getAppManifest2() {
@@ -148,9 +148,8 @@ private static IsisSystem setupSystem(final AppManifest2
appManifest2) {
final IsisSystem isft =
IsisSystem.builder()
- .withLoggingAt(org.apache.log4j.Level.INFO)
- .with(appManifest2)
- .build();
+ .with(appManifest2)
+ .build();
isft.setUpSystem();
@@ -207,23 +206,7 @@ private static IsisSystem getIsisSystem() {
}
private void log(final String message) {
- switch (logConfig.getTestLoggingLevel()) {
- case ERROR:
- LOG.error(message);
- break;
- case WARN:
- LOG.warn(message);
- break;
- case INFO:
- LOG.info(message);
- break;
- case DEBUG:
- LOG.debug(message);
- break;
- case TRACE:
- LOG.trace(message);
- break;
- }
+ logger.log(message);
}
}
\ No newline at end of file
diff --git
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java
new file mode 100644
index 0000000000..ce5d5a1d22
--- /dev/null
+++
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java
@@ -0,0 +1,36 @@
+package org.apache.isis.core.runtime.headless.logging;
+
+import org.slf4j.Logger;
+import org.slf4j.event.Level;
+
+public class LeveledLogger {
+
+ private Logger logger;
+ private Level level;
+
+ public LeveledLogger(final Logger logger, final Level level) {
+ this.logger = logger;
+ this.level = level;
+ }
+
+ public void log(final String message) {
+ switch (level) {
+ case ERROR:
+ logger.error(message);
+ break;
+ case WARN:
+ logger.warn(message);
+ break;
+ case INFO:
+ logger.info(message);
+ break;
+ case DEBUG:
+ logger.debug(message);
+ break;
+ case TRACE:
+ logger.trace(message);
+ break;
+ }
+ }
+
+}
diff --git
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LogStream.java
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LogStream.java
index 95ce61ff79..18502853fa 100644
---
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LogStream.java
+++
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LogStream.java
@@ -18,16 +18,15 @@
*/
package org.apache.isis.core.runtime.headless.logging;
-import java.io.OutputStream;
-import java.io.PrintStream;
-
import org.slf4j.Logger;
import org.slf4j.event.Level;
+import java.io.OutputStream;
+import java.io.PrintStream;
+
public class LogStream extends OutputStream {
- private final Logger logger;
- private final Level level;
+ private final LeveledLogger logger;
private final StringBuilder buf = new StringBuilder();
@@ -36,8 +35,7 @@ public static PrintStream logPrintStream(final Logger logger,
final Level level)
}
public LogStream(final Logger logger, final Level level) {
- this.logger = logger;
- this.level = level;
+ this.logger = new LeveledLogger(logger, level);
}
@Override
@@ -45,24 +43,7 @@ public void close() {}
@Override
public void flush() {
- final String message = toString();
- switch (level) {
- case ERROR:
- logger.error(message);
- break;
- case WARN:
- logger.warn(message);
- break;
- case INFO:
- logger.info(message);
- break;
- case DEBUG:
- logger.debug(message);
- break;
- case TRACE:
- logger.trace(message);
- break;
- }
+ logger.log(toString());
// Clear the buffer
buf.delete(0, buf.length());
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> Integration test logging includes a lot of log events twice.
> ------------------------------------------------------------
>
> Key: ISIS-1979
> URL: https://issues.apache.org/jira/browse/ISIS-1979
> Project: Isis
> Issue Type: Bug
> Components: Archetype: SimpleApp
> Affects Versions: 2.0.0-M1
> Reporter: Andi Huber
> Assignee: Andi Huber
> Priority: Major
> Fix For: 2.0.0-M2
>
>
> As reported by Gabriel Terwesten <[email protected]> [1]
> During the bootstrapping of Isis for the integration test there seem to be
> two appenders. The lines starting with the current time come from the
> appender configured in `logging-integtest.properties`. I was not able to
> understand where the second appender is configured. This is not a big problem
> just a bit distracting.
> [1]
> https://lists.apache.org/thread.html/cd92d8cd28ae877104fc965f83ca90b98e2e8188f464b65181e79a27@%3Cusers.isis.apache.org%3E
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)