Skip to content

Commit

Permalink
[sre] Fixing logger hierarchy.
Browse files Browse the repository at this point in the history
see #1029

Signed-off-by: Stéphane Galland <galland@arakhne.org>
  • Loading branch information
gallandarakhneorg committed Nov 16, 2020
1 parent 0ed9c6d commit fdb9a34
Show file tree
Hide file tree
Showing 30 changed files with 108 additions and 80 deletions.
Expand Up @@ -153,7 +153,7 @@ class HazelcastLogListener implements LogListener {

@Inject
new(logger : LoggingService) {
this.logger = logger.getKernelLogger(Messages::HazelcastLogListener_1)
this.logger = logger.getKernelModuleLogger(Messages::HazelcastLogListener_1)
}


Expand Down
Expand Up @@ -93,7 +93,7 @@ class HazelcastContextService extends MemoryBasedContextService {
}

protected override createLogger(loggingService : LoggingService) : Logger {
loggingService.getKernelLogger(Messages::HazelcastContextService_9)
loggingService.getKernelModuleLogger(Messages::HazelcastContextService_9)
}

protected def newContextInstance(contextID : UUID, defaultSpaceID : UUID, owner : Agent) : Context {
Expand Down
Expand Up @@ -105,7 +105,7 @@ class HazelcastEventTransportService implements EventTransportService {
contextService = icontextService
hazelcastInstance = iHazelcastInstance

kernelLogger = logger.getKernelLogger(Messages::HazelcastEventTransportService_1)
kernelLogger = logger.getKernelModuleLogger(Messages::HazelcastEventTransportService_1)

topicListenerIDs = new ConcurrentHashMap<String, UUID>();
this.availableTopicsName = this.hazelcastInstance.getSet(HAZELCAST_SARL_TOPICS_NAME_SET);
Expand Down
Expand Up @@ -135,7 +135,7 @@ class HazelcastSpaceRepository extends LocalSpaceRepository {
}

protected override createLogger(loggingService : LoggingService) : Logger {
loggingService.getKernelLogger(Messages::HazelcastSpaceRepository_5)
loggingService.getKernelModuleLogger(Messages::HazelcastSpaceRepository_5)
}

protected override createSpaceFirstInstance(spec : Class<? extends SpaceSpecification<S>>, spaceID : SpaceID,
Expand Down
Expand Up @@ -123,7 +123,7 @@ class Kernel {

// Start the services NOW to ensure that the default context and space
// of the SRE agent are catched by the modules;
this.serviceManager.startServices(getLogger(null))
this.serviceManager.startServices(getLogger)
}

/** Create an instance of the kernel event listener.
Expand Down Expand Up @@ -151,12 +151,11 @@ class Kernel {
*
* <p>This function replies the logger of the logging service. If this service is down,
* {@code null} is replied.
*
* @param moduleName the name of the module for which the logger is replied.
*
* @return the logger of the kernel.
*/
def getLogger(moduleName : String) : Logger {
this.loggingService.getKernelLogger(moduleName)
def getLogger : Logger {
this.loggingService.getKernelLogger
}

/**
Expand Down Expand Up @@ -221,7 +220,7 @@ class Kernel {
@PrivateAPI
package def executeKernelStopWhenNoAgentAlive(internalStop : boolean) {
if (!this.isStopping.getAndSet(true)) {
val logger = getLogger(null)
val logger = getLogger
logger.info [if(internalStop) Messages.Kernel_0 else Messages.Kernel_3]
val ss = this.spawnService
val sl = this.stopListener
Expand Down Expand Up @@ -353,7 +352,7 @@ class Kernel {
override uncaughtException(thread : Thread, exception : Throwable) {
assert thread !== null;
assert exception !== null;
val logger = this.kernel.get.getLogger(null)
val logger = this.kernel.get.getLogger
if (logger !== null && logger.isLoggable(Level::SEVERE)) {
val record = new LogRecord(Level::SEVERE, exception.localizedMessage)
record.thrown = exception
Expand Down
Expand Up @@ -21,24 +21,24 @@
package io.sarl.sre.boot.internal.internal

import com.google.inject.AbstractModule
import com.google.inject.Module
import com.google.inject.Provides
import io.bootique.BQModule
import io.bootique.BQModuleProvider
import io.sarl.sre.KernelScope
import io.sarl.sre.internal.AgentEventEmitter
import io.sarl.sre.internal.ContextMemberEventEmitter
import io.sarl.sre.internal.SpaceEventEmitterFactory
import io.sarl.sre.internal.SpaceParticipantEventEmitterFactory
import io.sarl.sre.internal.SubHolonContextEventEmitterFactory
import io.sarl.sre.services.context.ExternalContextMemberListener
import io.sarl.sre.services.context.InternalContextMembershipListenerFactory
import io.sarl.sre.services.context.SpaceRepositoryListenerFactory
import io.sarl.sre.services.lifecycle.LifecycleServiceListener
import io.sarl.sre.services.logging.LoggingService
import javax.inject.Singleton
import io.bootique.BQModuleProvider
import com.google.inject.Module
import io.bootique.BQModule
import io.sarl.sre.spaces.SpaceParticipantListenerFactory
import io.sarl.sre.internal.SpaceParticipantEventEmitterFactory
import javax.inject.Provider
import javax.inject.Singleton

/**
* Module for configuring the methods for firing the specific events that are defined into the SARL API.
Expand All @@ -57,7 +57,7 @@ class PlatformEventEmitterModule extends AbstractModule {
@KernelScope
@Singleton
static def provideExternalContextMemberListener(logging : Provider<LoggingService>) : ExternalContextMemberListener {
new ContextMemberEventEmitter(logging.get.getKernelLogger(null))
new ContextMemberEventEmitter(logging.get.getKernelLogger)
}

@Provides
Expand Down Expand Up @@ -85,7 +85,7 @@ class PlatformEventEmitterModule extends AbstractModule {
@KernelScope
@Singleton
static def provideLifecycleServiceListener(logging : Provider<LoggingService>) : LifecycleServiceListener {
new AgentEventEmitter(logging.get.getKernelLogger(null))
new AgentEventEmitter(logging.get.getKernelLogger)
}

}
Expand Down
Expand Up @@ -35,13 +35,13 @@ import io.sarl.sre.services.GoogleServiceManager
import io.sarl.sre.services.IServiceManager
import io.sarl.sre.services.context.Context
import io.sarl.sre.services.context.ContextFactory
import io.sarl.sre.services.logging.LoggingService
import java.text.MessageFormat
import java.util.Set
import java.util.UUID
import javax.inject.Named
import javax.inject.Provider
import javax.inject.Singleton
import io.sarl.sre.services.logging.LoggingService
import java.text.MessageFormat

/**
* Module for configuring the kernel specific components.
Expand Down Expand Up @@ -72,7 +72,7 @@ class KernelModule extends AbstractModule {
@Named(BootConfig::ROOT_CONTEXT_ID_NAME) rootContextId : UUID,
@Named(BootConfig::ROOT_DEFAULT_SPACE_ID_NAME) rootDefaultSpaceId : UUID,
logger : LoggingService) : Context {
logger.getKernelLogger(null).finer [MessageFormat::format(Messages::KernelModule_0, rootContextId, rootDefaultSpaceId)]
logger.getKernelLogger.finer [MessageFormat::format(Messages::KernelModule_0, rootContextId, rootDefaultSpaceId)]
var context = factory.newInstance(rootContextId, rootDefaultSpaceId, null)
injector.injectMembers(context)
return context
Expand Down
Expand Up @@ -74,7 +74,7 @@ class ExecutorServiceModule extends AbstractModule {
@Provides
@Singleton
def providesVerboseThreadExecutorPolicy(logService : Provider<LoggingService>) : VerboseThreadExecutorPolicy {
new VerboseThreadExecutorPolicy(logService.get.getKernelLogger(Messages::ExecutorServiceModule_0))
new VerboseThreadExecutorPolicy(logService.get.getKernelModuleLogger(Messages::ExecutorServiceModule_0))
}

/**
Expand Down
Expand Up @@ -67,7 +67,7 @@ abstract class AbstractContextService extends AbstractSreService implements Cont
* @since 0.12
*/
protected def createLogger(loggingService : LoggingService) : Logger {
loggingService.getKernelLogger(Messages::AbstractContextService_3)
loggingService.getKernelModuleLogger(Messages::AbstractContextService_3)
}

def onStart {
Expand Down
Expand Up @@ -83,12 +83,12 @@ class Context extends AgentTrait implements AgentContext {
* @param listenerFactory the factory of space listeners.
*/
new (id : UUID, defaultSpaceID : UUID, owner : Agent, spaceRepositoryProvider : Provider<SpaceRepository>,
logger : LoggingService, listenerFactory : SpaceRepositoryListenerFactory) {
loggingService : LoggingService, listenerFactory : SpaceRepositoryListenerFactory) {
super(owner)
this.id = id
this.defaultSpaceID = defaultSpaceID
this.repositoryProvider = spaceRepositoryProvider
this.logger = logger.getKernelLogger(Messages::Context_1)
this.logger = loggingService.getKernelModuleLogger(Messages::Context_1)
this.spaceEventEmitterFactory = listenerFactory
}

Expand Down
Expand Up @@ -118,7 +118,7 @@ abstract class SpaceRepository implements SpaceListener {
* @return the logger.
*/
protected def createLogger(loggingService : LoggingService) : Logger {
loggingService.getKernelLogger(Messages::SpaceRepository_2)
loggingService.getKernelModuleLogger(Messages::SpaceRepository_2)
}

/** Replies the internal map that contains the spaces
Expand Down
Expand Up @@ -110,14 +110,14 @@ abstract class AbstractLifecycleService extends AbstractSreService implements Li
new (sarlSpecificationChecker : SarlSpecificationChecker, creator : AgentCreatorProvider,
globalListeners : SmartListenerCollection<?>, lifecycleListener : Provider<LifecycleServiceListener>,
externalContextListener : Provider<ExternalContextMemberListener>, skillUninstaller : SkillUninstaller,
executor : ExecutorService, logger : LoggingService, lifecycleConfig : LifecycleConfig) {
executor : ExecutorService, loggingService : LoggingService, lifecycleConfig : LifecycleConfig) {
this.sarlSpecificationChecker = sarlSpecificationChecker
this.agentCreatorProvider = creator
this.globalListeners = globalListeners
this.skillUninstaller = skillUninstaller
this.executor = executor
this.lifecycleConfig = lifecycleConfig
this.logger = logger.getKernelLogger(Messages::AbstractLifecycleService_3)
this.logger = loggingService.getKernelModuleLogger(Messages::AbstractLifecycleService_3)
this.platformLifecycleEventEmitter = lifecycleListener.get
this.platformContextEventEmitter = externalContextListener.get
}
Expand Down
Expand Up @@ -39,7 +39,9 @@ interface LoggingService extends Service {
* Create a logger for an agent.
*
* @param name the name of the logger, usually the name of the agent.
* @param initialLevel the initial level to associate to the logger.
* @param initialLevel the initial level to associate to the logger. If it is
* {@code null}, the level is the less verbose between the default level
* (given in the SRE configuration) and the parent level.
* @return the logger.
* @since 0.7
*/
Expand All @@ -57,13 +59,21 @@ interface LoggingService extends Service {

/**
* Replies the logger used by the kernel.
* If the name is provided, a sub-logger of the kernel logger will be replied
* with the given name included into the message.
*
* @param name the name of the sub-logger.
* @return the logger.
* @since 0.7
* @see #getKernelModuleLogger(String)
*/
def getKernelLogger : Logger

/**
* Replies the logger used by a specific module of the kernel.
*
* @param name the name of the sub-logger.
* @return the logger.
* @since 0.12
* @see #getKernelLogger()
*/
def getKernelLogger(moduleName : String) : Logger
def getKernelModuleLogger(moduleName : String) : Logger

}
Expand Up @@ -40,26 +40,29 @@ import javax.inject.Singleton
@Singleton
class QuietLoggingService extends AbstractSreService implements LoggingService {

var platformLoggerInstance : Logger
var loggerInstance : Logger

var kernelLoggerInstance : Logger
private def ensureLogger : Logger {
if (this.loggerInstance === null) {
this.loggerInstance = new QuietLogger
}
return this.loggerInstance
}

override getPlatformLogger : Logger {
if (this.platformLoggerInstance === null) {
this.platformLoggerInstance = new QuietLogger
}
this.platformLoggerInstance
ensureLogger
}

override getKernelLogger(moduleName : String) : Logger {
if (this.kernelLoggerInstance === null) {
this.kernelLoggerInstance = new QuietLogger
}
this.kernelLoggerInstance
override getKernelLogger : Logger {
ensureLogger
}

override getKernelModuleLogger(moduleName : String) : Logger {
ensureLogger
}

def createAgentLogger(name : String, initialLevel : Level = null) : Logger {
return new QuietLogger
override createAgentLogger(name : String, initialLevel : Level = null) : Logger {
ensureLogger
}

/** Quiet logger.
Expand All @@ -73,7 +76,7 @@ class QuietLoggingService extends AbstractSreService implements LoggingService {
private static class QuietLogger extends Logger {

new {
super ("", null)
super("", null)
this.level = Level::OFF
}

Expand Down
Expand Up @@ -161,8 +161,14 @@ class JulLoggerCreator {
if (parent !== null) {
logger.parent = parent
logger.useParentHandlers = true
if (parent.level.intValue >= this.defaultLevel.intValue) {
logger.level = this.defaultLevel
} else {
logger.level = parent.level
}
} else {
logger.level = this.defaultLevel
}
logger.level = this.defaultLevel
return logger
}

Expand Down
Expand Up @@ -77,19 +77,19 @@ class JulLoggingService extends AbstractSreService implements LoggingService {
this.platformLoggerInstance
}

override getKernelLogger(moduleName : String) : Logger {
override getKernelLogger : Logger {
if (this.kernelLoggerInstance === null) {
this.kernelLoggerInstance = this.loggerCreator.createModuleLogger(getPlatformLogger)
}
if (!moduleName.isNullOrEmpty) {
val logger = this.loggerCreator.createModuleLogger(moduleName, this.kernelLoggerInstance)
logger.level = Level::ALL
return logger
}
return this.kernelLoggerInstance
}

def createAgentLogger(name : String, initialLevel : Level = null) : Logger {
override getKernelModuleLogger(moduleName : String) : Logger {
assert !moduleName.isNullOrEmpty
return this.loggerCreator.createModuleLogger(moduleName, getKernelLogger)
}

override createAgentLogger(name : String, initialLevel : Level = null) : Logger {
val logger = this.loggerCreator.createModuleLogger(name, getPlatformLogger)
if (initialLevel !== null) {
logger.level = initialLevel
Expand Down
Expand Up @@ -95,12 +95,12 @@ abstract class AbstractEventSpace extends AbstractSpace implements EventSpace, S
protected new (
spaceId : SpaceID,
participantListener : SpaceParticipantListener,
logger : LoggingService,
loggingService : LoggingService,
strongRepository : ConcurrentHashMap<UUID, Participant>,
weakRepository : ConcurrentHashMap<UUID, Participant>) {
super(spaceId)
this.spaceParticipantListener = participantListener
this.logger = logger.getKernelLogger(MessageFormat::format(Messages::AbstractEventSpace_2, spaceId.ID))
this.logger = loggingService.getKernelModuleLogger(MessageFormat::format(Messages::AbstractEventSpace_2, spaceId.ID))
if (strongRepository === null) {
this.strongRepository = new ConcurrentHashMap
} else {
Expand Down
Expand Up @@ -72,7 +72,7 @@ abstract class AbstractSreEventSpaceSpecification {
}

protected def createSpaceInstance(id : SpaceID, params : Object*) : OpenLocalEventSpace {
val logger = this.loggingService.getKernelLogger(null)
val logger = this.loggingService.getKernelLogger
val listener = this.spaceParticipantListenerFactory.create(this.defaultSpace, logger)
val ^space = new OpenLocalEventSpace(id, listener, this.loggingService)
if (this.defaultSpace === null) {//Only useful for the default space of the default context
Expand Down
Expand Up @@ -98,7 +98,8 @@ class KernelTest {
this.rootContext = typeof(Context).mock
this.handler = typeof(UncaughtExceptionHandler).mock
this.logger = typeof(LoggingService).mock
when(this.logger.getKernelLogger(anyString)).thenReturn(typeof(Logger).mock)
when(this.logger.getKernelLogger).thenReturn(typeof(Logger).mock)
when(this.logger.getKernelModuleLogger(anyString)).thenReturn(typeof(Logger).mock)
this.lifecycle = typeof(LifecycleService).mock
this.context = typeof(ContextService).mock
when(this.context.rootContext).thenReturn(this.rootContext)
Expand Down Expand Up @@ -130,10 +131,12 @@ class KernelTest {
@Test
@DisplayName("getLogger")
def getLogger {
var log = typeof(Logger).mock
when(this.logger.getKernelLogger(anyString)).thenReturn(log)
var l = this.kernel.getLogger("xyz")
log.assertSame(l)
var log0 = typeof(Logger).mock
var log1 = typeof(Logger).mock
when(this.logger.getKernelModuleLogger(anyString)).thenReturn(log1)
when(this.logger.getKernelLogger).thenReturn(log0)
var l = this.kernel.getLogger
log0.assertSame(l)
}

@Test
Expand Down

0 comments on commit fdb9a34

Please sign in to comment.