Class MainMapLookup

java.lang.Object
org.apache.logging.log4j.core.lookup.MapLookup
org.apache.logging.log4j.core.lookup.MainMapLookup
All Implemented Interfaces:
StrLookup

@Plugin(name="main", category="Lookup") public class MainMapLookup extends MapLookup
A map-based lookup for main arguments. See setMainArguments(String[]).
Since:
2.4
  • Constructor Details

    • MainMapLookup

      public MainMapLookup()
      Constructor when used directly as a plugin.
    • MainMapLookup

      public MainMapLookup(Map<String,String> map)
  • Method Details

    • setMainArguments

      public static void setMainArguments(String... args)
      An application's public static main(String[]) method calls this method to make its main arguments available for lookup with the prefix main.

      The map provides two kinds of access: First by index, starting at "0", "1" and so on. For example, the command line --file path/file.txt -x 2 can be accessed from a configuration file with:

      • "main:0" = "--file"
      • "main:1" = "path/file.txt"
      • "main:2" = "-x"
      • "main:3" = "2"

      Second using the argument at position n as the key to access the value at n+1.

      • "main:\--file" = "path/file.txt"
      • "main:\-x" = "2"

      Note: Many applications use leading dashes to identify command arguments. Specifying "main:--file would result in the lookup failing because it would look for a variable named "main" with a default value of "-file". To avoid this the ":" separating the Lookup name from the key must be followed by a backslash as an escape character.

      Parameters:
      args - An application's public static main(String[]) arguments.
    • lookup

      public String lookup(LogEvent event, String key)
      Description copied from interface: StrLookup
      Looks up a String key to a String value possibly using the current LogEvent.

      The internal implementation may use any mechanism to return the value. The simplest implementation is to use a Map. However, virtually any implementation is possible.

      For example, it would be possible to implement a lookup that used the key as a primary key, and looked up the value on demand from the database Or, a numeric based implementation could be created that treats the key as an integer, increments the value and return the result as a string - converting 1 to 2, 15 to 16 etc.

      This method always returns a String, regardless of the underlying data, by converting it as necessary. For example:

       Map<String, Object> map = new HashMap<String, Object>();
       map.put("number", new Integer(2));
       assertEquals("2", StrLookup.mapLookup(map).lookup("number"));
       
      Specified by:
      lookup in interface StrLookup
      Overrides:
      lookup in class MapLookup
      Parameters:
      event - The current LogEvent.
      key - the key to be looked up, may be null
      Returns:
      the matching value, null if no match
    • lookup

      public String lookup(String key)
      Description copied from class: MapLookup
      Looks up a String key to a String value using the map.

      If the map is null, then null is returned. The map result object is converted to a string using toString().

      Specified by:
      lookup in interface StrLookup
      Overrides:
      lookup in class MapLookup
      Parameters:
      key - the key to be looked up, may be null
      Returns:
      the matching value, null if no match