Class RuntimeLoggerFactoryImpl

java.lang.Object
org.refcodes.logger.RuntimeLoggerFactoryImpl
All Implemented Interfaces:
org.refcodes.factory.Factory<RuntimeLogger>, org.refcodes.factory.LookupFactory<RuntimeLogger,String>, org.refcodes.factory.TypeFactory<RuntimeLogger>, RuntimeLoggerFactory, org.refcodes.mixin.TypeAccessor<RuntimeLogger>
Direct Known Subclasses:
RuntimeLoggerFactorySingleton

public class RuntimeLoggerFactoryImpl extends Object implements RuntimeLoggerFactory
You configure your RuntimeLoggerFactoryImpl by providing a "runtimelogger.ini" file (see "http://www.refcodes.org/refcodes/refcodes-logger") in one of those locations relative to your main class's location:
  • .
  • ./config
  • ./etc
  • ./settings
  • ./.config
  • ./.settings
  • ../config
  • ../etc
  • ../settings
  • ../.config
  • ../.settings
Given your main class's JAR file resides in the folder /opt/app/lib, then the valid locations for the "runtimelogger.ini" file are:
  • /opt/app/lib
  • /opt/app/lib/config
  • /opt/app/lib/etc
  • /opt/app/lib/settings
  • /opt/app/lib/.config
  • /opt/app/lib/.settings
  • /opt/app/config
  • /opt/app/etc
  • /opt/app/settings
  • /opt/app/.config
  • /opt/app/.settings
In case you pass a JVM argument via "-Dconfig.dir=path_to_your_config_dir" (where path_to_your_config_dir stands for the path to the directory where you placed configuration files such as the "runtimelogger.ini" file), then your path_to_your_config_dir is placed first in the list of configuration directories to look at (in case the directory exists).See SystemProperty.CONFIG_DIR and ConfigLocator.getFolders(). The "runtimelogger.ini" configuration is deadly simple:
 [root]
 
 runtimelogger=org.refcodes.logger.RuntimeLoggerImpl
 runtimelogger/logPriority=INFO
 runtimelogger/logger=org.refcodes.logger.SystemLogger
 
 [com.acme]
 
 runtimelogger=org.refcodes.logger.RuntimeLoggerImpl
 runtimelogger/logPriority=INFO runtimelogger/name=com.acme
 runtimelogger/logger=org.refcodes.logger.SystemLogger 
The XML element nesting represents the Java package for which the therein configured RuntimeLogger is responsible; e.g. a log issued from inside a class located in the package "com.acme" (or in one of its sub-packages) will be handled by the "AcmeLogger". In case no logger is found for a given package, then the root logger found in the <root> ... </root> element is used. Useful to know that a logger for a package namespace is only created once.

If you like logs colored nicely with ANSI Escape-Codes, then you will love the ConsoleLoggerSingleton:

 
 <?xml version="1.0" encoding="ISO-8859-1" ?>
 <config>
 	<root config-class=
"org.refcodes.logger.RuntimeLoggerImpl" logPriorityName="INFO" name="*">
 		<logger config-class=
"org.refcodes.logger.alt.cli.ConsoleLoggerSingleton" />
 	</root>
 </config>
  
Make sure to include the "refcodces-logger-alt-console" dependency in your build setup to include the "ConsoleLoggerSingleton" logger.
  • Constructor Details

    • RuntimeLoggerFactoryImpl

      protected RuntimeLoggerFactoryImpl()
  • Method Details

    • create

      public RuntimeLogger create()
      Specified by:
      create in interface org.refcodes.factory.Factory<RuntimeLogger>
    • create

      public RuntimeLogger create(Map<String,String> aProperties)
      Specified by:
      create in interface org.refcodes.factory.TypeFactory<RuntimeLogger>
    • create

      public RuntimeLogger create(String aIdentifier)
      Specified by:
      create in interface org.refcodes.factory.LookupFactory<RuntimeLogger,String>
    • create

      public RuntimeLogger create(String aIdentifier, Map<String,String> aProperties)
      The provided identifier represents a level hierarchy as defined in the RuntimeLogger.RUNTIME_LOGGER_CONFIG XML file. The level hierarchy is actually the path to the XML element providing the RuntimeLogger's configuration. Each level is separated by the succeeding level with a dot "." as defined by the Delimiter.NAMESPACE char value. The root logger's level hierarchy (XML path) is defined by the RuntimeLogger.ROOT_LOGGER_ELEMENT_PATH; at the time of this writing it was set to "org.refcodes.logger.runtimeLogger". The properties are currently ignored.
      Specified by:
      create in interface org.refcodes.factory.LookupFactory<RuntimeLogger,String>
    • fromConfigurationFile

      public static RuntimeLogger fromConfigurationFile(String aNamespace, String aConfigFileName)
      Loads the configured RuntimeLogger from the given configuration file. Various locations as well file endings are probed as of the ApplicationProperties as well as of the ConfigLocator.ALL definition.
      Parameters:
      aNamespace - The path (package) for which to create the logger.
      aConfigFileName - The (base) file name of the configuration file.
      Returns:
      The according logger.
      Throws:
      LoggerInstantiationRuntimeException - Thrown in case instantiating a Logger (RuntimeLogger) failed,