Skip to content

Commit

Permalink
[sre] The SRE loggers are now named.
Browse files Browse the repository at this point in the history
Signed-off-by: Stéphane Galland <galland@arakhne.org>
  • Loading branch information
gallandarakhneorg committed May 4, 2020
1 parent 2108324 commit 4668434
Show file tree
Hide file tree
Showing 104 changed files with 222 additions and 120 deletions.
Expand Up @@ -28,7 +28,6 @@ import io.bootique.BQModule
import io.bootique.BQModuleProvider
import io.sarl.sre.boot.configs.SreConfig
import io.sarl.sre.services.logging.jul.JulLoggerCreator
import java.util.logging.Logger
import javax.inject.Provider
import javax.inject.Singleton
import org.arakhne.afc.bootique.log4j.configs.Log4jIntegrationConfig
Expand Down Expand Up @@ -57,10 +56,9 @@ class LoggerCreatorModule extends AbstractModule {
@Provides
@Singleton
def provideLoggerCreator(loggingConfig : Provider<Log4jIntegrationConfig>, sreConfig : Provider<SreConfig>,
injector : Injector, loggerProvider : Provider<Logger>) : JulLoggerCreator {
injector : Injector) : JulLoggerCreator {
var creator = new JulLoggerCreator(
loggingConfig.get.level.toJul,
loggerProvider,
sreConfig)
injector.injectMembers(creator)
return creator
Expand Down
Expand Up @@ -22,9 +22,9 @@ package io.sarl.sre.services.logging.jul

import io.sarl.sre.boot.configs.SreConfig
import io.sarl.sre.boot.configs.subconfigs.LoggingConfig
import java.io.PrintStream
import java.util.logging.Formatter
import java.util.logging.Level
import java.util.logging.LogManager
import java.util.logging.Logger
import javax.inject.Provider

Expand All @@ -38,80 +38,34 @@ import javax.inject.Provider
*/
class JulLoggerCreator {

val defaultLevel : Level
public val PLATFORM_LOGGER_NAME_PREFIX = "Janus-SRE"

val loggerProvider : Provider<Logger>
val defaultLevel : Level

val configProvider : Provider<SreConfig>

val loggerProvider : (String)=>Logger

var config : LoggingConfig

var defaultProgramName : String

var consoleFormatter : Formatter

var platformFormatter : Formatter

/** Build a logger creator.
*
* @param defaultLevel the logging level for new loggers.
* @param loggerProvider the provider of loggers.
* @param configProvider the provider of SRE configuration.
* @param loggerProvider the provider of loggers to use; if {@code null}, the default JUL log manager is used.
*/
new (defaultLevel : Level, loggerProvider : Provider<Logger>, configProvider : Provider<SreConfig>) {
new (defaultLevel : Level, configProvider : Provider<SreConfig>, loggerProvider : (String)=>Logger = null) {
this.defaultLevel = defaultLevel
this.loggerProvider = loggerProvider
this.configProvider = configProvider
}

/** Replies the log formatter for the console messages.
*
* @return the log formatter, never {@code null}.
*/
synchronized def getConsoleFormatter : Formatter {
if (this.consoleFormatter === null) {
this.consoleFormatter = createConsoleFormatter
}
return this.consoleFormatter
}

/** Change the log formatter for the console messages.
*
* @param formatter the log formatter, or {@code null} to use the default.
*/
synchronized def setConsoleFormatter(formatter : Formatter) {
this.consoleFormatter = formatter
}

/** Create a formatter for the console messages.
*
* @return the newly created instance of formatter.
*/
protected def createConsoleFormatter : Formatter {
new JulPatternFormatter(this.loggingConfig.platformMessageFormat)
}

/**
* Create a logger with the given output for the console.
*
* @param name the name of the new logger.
* @param output the output.
* @return the logger.
* @since 0.7.0
*/
def createConsoleLogger(name : String, output : PrintStream) : Logger {
val logger = this.loggerProvider.get
val nhandler = new JulOutputStreamConsoleHandler(output, getConsoleFormatter)
var allHandlers = logger.handlers
if (allHandlers !== null) {
for (handler : allHandlers) {
logger.removeHandler(handler)
}
if (loggerProvider === null) {
this.loggerProvider = [ Logger::getLogger(it) ]
} else {
this.loggerProvider = loggerProvider
}
logger.addHandler(nhandler)
logger.useParentHandlers = false
logger.level = this.defaultLevel
return logger
}

/** Replies the log formatter for the SRE kernel.
Expand Down Expand Up @@ -162,7 +116,10 @@ class JulLoggerCreator {
* @since 0.7.0
*/
def createPlatformLogger() : Logger {
val logger = this.loggerProvider.get
LogManager::logManager.reset
val kernelId = this.configProvider.get.boot.rootContextID
val loggerName = PLATFORM_LOGGER_NAME_PREFIX + "-K-" + kernelId
val logger = this.loggerProvider.apply(loggerName)
val stderr = new JulStandardErrorOutputConsoleHandler(getPlatformFormatter)
stderr.level = Level::ALL
val stdout = new JulStandardOutputConsoleHandler(getPlatformFormatter)
Expand All @@ -176,7 +133,7 @@ class JulLoggerCreator {
logger.addHandler(stderr)
logger.addHandler(stdout)
logger.useParentHandlers = false
logger.level = Level::ALL
logger.level = this.defaultLevel
return logger
}

Expand All @@ -194,11 +151,11 @@ class JulLoggerCreator {
} else {
name
}
val logger = Logger::getLogger(thename)
val logger = this.loggerProvider.apply(PLATFORM_LOGGER_NAME_PREFIX + "-M-" + thename)
if (parent !== null) {
logger.parent = parent
logger.useParentHandlers = true
}
logger.useParentHandlers = true
logger.level = this.defaultLevel
return logger
}
Expand Down
Expand Up @@ -46,6 +46,7 @@ import static io.sarl.sre.test.framework.Constants.*
import static extension org.junit.jupiter.api.Assertions.*
import static extension org.mockito.ArgumentCaptor.*
import static extension org.mockito.Mockito.*
import org.junit.jupiter.api.RepeatedTest

/**
* @author $Author: sgalland$
Expand All @@ -62,6 +63,7 @@ import static extension org.mockito.Mockito.*
@DisplayName("run: Bootstrap test")
@Tag("sre-run")
@Tag("janus")
@Tag("sre-run-tmp")
class BootstrapTest {

@Nullable
Expand All @@ -76,7 +78,7 @@ class BootstrapTest {
this.bootID = UUID::nameUUIDFromBytes(typeof(BootAgent1).name.bytes)
}

@Test
@RepeatedTest(5)
@DisplayName("Default context ID")
def defaultContextUUID(extension rc : SreRunContext) {
System::setProperty(VariableNames::toPropertyName(BootConfig::ROOT_CONTEXT_BOOT_TYPE_NAME),
Expand All @@ -87,7 +89,7 @@ class BootstrapTest {
assertEquals(defaultID, id)
}

@Test
@RepeatedTest(5)
@DisplayName("Name-based context ID")
def bootContextUUID(extension rc : SreRunContext) {
System::setProperty(VariableNames::toPropertyName(BootConfig::ROOT_CONTEXT_BOOT_TYPE_NAME),
Expand All @@ -99,7 +101,7 @@ class BootstrapTest {
assertEquals(bootID, id)
}

@Test
@RepeatedTest(5)
@DisplayName("Random context ID")
def randomContextUUID(extension rc : SreRunContext) {
System::setProperty(VariableNames::toPropertyName(BootConfig::ROOT_CONTEXT_BOOT_TYPE_NAME),
Expand All @@ -111,7 +113,7 @@ class BootstrapTest {
assertNotEquals(bootID, id)
}

@Test
@RepeatedTest(5)
@DisplayName("startAgentWithID(Class, UUID)")
def startAgentWithID(extension rc : SreRunContext) {
val kern = setupTheSreKernel(null, null)
Expand All @@ -124,7 +126,7 @@ class BootstrapTest {
id.assertEquals(actual)
}

@Test
@RepeatedTest(5)
@DisplayName("sreStopped")
def sreStartedStopped(extension rc : SreRunContext) {
val observer = typeof(SREListener).mock
Expand Down
Expand Up @@ -56,6 +56,7 @@ abstract agent AbstractSpawnerAgent {
buildAgentInitializationParameters)
}

@SuppressWarnings("discouraged_occurrence_readonly_use")
on AgentSpawned [occurrence.source.UUID == ID] {
addResult(occurrence.agentID)
}
Expand Down
Expand Up @@ -27,6 +27,7 @@ import io.sarl.sre.test.framework.skills.TestingCapacity
import io.sarl.sre.test.framework.skills.TestingSkill
import io.sarl.sre.tests.runtime.internal.mocks.Bye

@SuppressWarnings("discouraged_occurrence_readonly_use")
agent BootAgent0 {

uses Lifecycle
Expand Down
Expand Up @@ -27,6 +27,7 @@ import io.sarl.sre.test.framework.skills.TestingCapacity
import io.sarl.sre.test.framework.skills.TestingSkill
import java.util.concurrent.atomic.AtomicBoolean

@SuppressWarnings("discouraged_occurrence_readonly_use")
agent BootAgent1 {

uses Lifecycle
Expand Down
Expand Up @@ -26,6 +26,7 @@ import io.sarl.core.Lifecycle
import io.sarl.sre.test.framework.skills.TestingCapacity
import io.sarl.sre.test.framework.skills.TestingSkill

@SuppressWarnings("discouraged_occurrence_readonly_use")
agent EmptyAgent1 {

uses DefaultContextInteractions, Lifecycle
Expand Down
Expand Up @@ -34,6 +34,7 @@ agent AgentBug973 {

var theSkill : SkillBug973

@SuppressWarnings("potential_field_synchronization_problem")
on Initialize {
setSkill(new TestingSkill(occurrence))
// Add a fake skill in order to have at least 2 registered skills
Expand Down
Expand Up @@ -30,6 +30,7 @@ agent AgentBug973b {

var theSkill : SkillBug973

@SuppressWarnings("potential_field_synchronization_problem")
on Initialize {
setSkill(new TestingSkill(occurrence))
// Add a fake skill in order to have at least 2 registered skills
Expand Down
Expand Up @@ -33,6 +33,7 @@ agent AgentBug973c {

var theSkill : SkillBug973

@SuppressWarnings("potential_field_synchronization_problem")
on Initialize {
setSkill(new TestingSkill(occurrence))
// Add a fake skill in order to have at least 2 registered skills
Expand Down
Expand Up @@ -36,9 +36,10 @@ import org.junit.jupiter.api.RepetitionInfo
import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.^extension.ExtendWith

import static extension io.sarl.tests.api.tools.TestAssertions.*
import static io.sarl.sre.test.framework.Constants.*

import static extension io.sarl.tests.api.tools.TestAssertions.*

/** Tests for issue #977: Problem with multiple initialize event in Behavior inheritance demos.
*
* <p>See: https://github.com/sarl/sarl/issues/977
Expand Down
Expand Up @@ -31,18 +31,16 @@ import io.sarl.sre.tests.runtime.internal.mocks.SpaceDestroyedAgent0
import io.sarl.tests.api.extensions.ContextInitExtension
import io.sarl.tests.api.extensions.JavaVersionCheckExtension
import java.util.UUID
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.RepeatedTest
import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.^extension.ExtendWith

import static io.sarl.sre.test.framework.Constants.*

import static extension io.sarl.sre.tests.framework.SreTestUtilities.*
import static extension io.sarl.tests.api.tools.TestAssertions.*
import static extension org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test

/**
* @author $Author: sgalland$
Expand Down
Expand Up @@ -35,6 +35,7 @@ import io.sarl.sre.test.framework.skills.TestingSkill
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("discouraged_occurrence_readonly_use", "potential_field_synchronization_problem")
agent ContextJoinedAgent0 {

uses Lifecycle, InnerContextAccess, DefaultContextInteractions
Expand Down
Expand Up @@ -21,24 +21,23 @@

package io.sarl.sre.tests.runtime.internal.mocks

import io.sarl.core.Behaviors
import io.sarl.core.ContextJoined
import io.sarl.core.DefaultContextInteractions
import io.sarl.core.ExternalContextAccess
import io.sarl.core.Initialize
import io.sarl.core.InnerContextAccess
import io.sarl.core.Lifecycle
import io.sarl.core.OpenEventSpace
import io.sarl.sre.services.context.Context
import io.sarl.sre.test.framework.skills.TestingCapacity
import io.sarl.sre.test.framework.skills.TestingSkill
import io.sarl.sre.services.context.Context
import io.sarl.core.ExternalContextAccess

/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("potential_field_synchronization_problem", "discouraged_occurrence_readonly_use")
agent ContextJoinedAgent1 {

uses Lifecycle, InnerContextAccess, DefaultContextInteractions, ExternalContextAccess
Expand Down
Expand Up @@ -34,6 +34,7 @@ import io.sarl.sre.test.framework.skills.TestingSkill
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("discouraged_occurrence_readonly_use")
agent JoinerAgent1 {

uses TestingCapacity, Schedules, Lifecycle
Expand Down
Expand Up @@ -38,6 +38,7 @@ import java.util.UUID
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("discouraged_occurrence_readonly_use")
agent JoinerAgent3 {

uses DefaultContextInteractions, Schedules, Behaviors, Lifecycle
Expand Down
Expand Up @@ -37,6 +37,7 @@ import static extension io.sarl.tests.api.tools.TestUtils.*
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("potential_field_synchronization_problem", "discouraged_occurrence_readonly_use")
agent MemberJoinedAgent0 {

uses Lifecycle, InnerContextAccess, DefaultContextInteractions
Expand Down
Expand Up @@ -39,6 +39,7 @@ import static extension io.sarl.tests.api.tools.TestUtils.*
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("potential_field_synchronization_problem", "discouraged_occurrence_readonly_use")
agent MemberJoinedAgent1 {

uses Lifecycle, InnerContextAccess, DefaultContextInteractions, Behaviors
Expand Down
Expand Up @@ -37,6 +37,7 @@ import static extension io.sarl.tests.api.tools.TestUtils.*
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("potential_field_synchronization_problem", "discouraged_occurrence_readonly_use")
agent MemberJoinedAgent2 {

uses Lifecycle, InnerContextAccess, DefaultContextInteractions
Expand Down
Expand Up @@ -38,6 +38,7 @@ import static extension io.sarl.sre.tests.framework.SreTestUtilities.*
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("potential_field_synchronization_problem")
agent MemberLeftAgent0 {

uses Lifecycle, InnerContextAccess, DefaultContextInteractions
Expand Down
Expand Up @@ -39,6 +39,7 @@ import static extension io.sarl.tests.api.tools.TestUtils.*
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("potential_field_synchronization_problem", "discouraged_occurrence_readonly_use")
agent MemberLeftAgent1 {

uses Lifecycle, InnerContextAccess, DefaultContextInteractions, ExternalContextAccess
Expand Down

0 comments on commit 4668434

Please sign in to comment.