View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements. See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache license, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License. You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the license for the specific language governing permissions and
    15   * limitations under the license.
    16   */
    17  package org.apache.logging.log4j.core.lookup;
    18
    19  import java.text.DateFormat;
    20  import java.text.SimpleDateFormat;
    21  import java.util.Date;
    22
    23  import org.apache.logging.log4j.Logger;
    24  import org.apache.logging.log4j.Marker;
    25  import org.apache.logging.log4j.MarkerManager;
    26  import org.apache.logging.log4j.core.LogEvent;
    27  import org.apache.logging.log4j.core.config.plugins.Plugin;
    28  import org.apache.logging.log4j.status.StatusLogger;
    29
    30  /**
    31   * Formats the current date or the date in the LogEvent. The "key" is used as the format String.
    32   */
    33  @Plugin(name = "date", category = StrLookup.CATEGORY)
    34  public class DateLookup implements StrLookup {
    35
    36      private static final Logger LOGGER = StatusLogger.getLogger();
    37      private static final Marker LOOKUP = MarkerManager.getMarker("LOOKUP");
    38
    39      /**
    40       * Looks up the value of the environment variable.
    41       * @param key the format to use. If null, the default DateFormat will be used.
    42       * @return The value of the environment variable.
    43       */
    44      @Override
    45      public String lookup(final String key) {
    46          return formatDate(System.currentTimeMillis(), key);
    47      }
    48
    49      /**
    50       * Looks up the value of the environment variable.
    51       * @param event The current LogEvent (is ignored by this StrLookup).
    52       * @param key the format to use. If null, the default DateFormat will be used.
    53       * @return The value of the environment variable.
    54       */
    55      @Override
    56      public String lookup(final LogEvent event, final String key) {
    57          return formatDate(event.getTimeMillis(), key);
    58      }
    59
    60      private String formatDate(final long date, final String format) {
    61          DateFormat dateFormat = null;
    62          if (format != null) {
    63              try {
    64                  dateFormat = new SimpleDateFormat(format);
    65              } catch (final Exception ex) {
    66                  LOGGER.error(LOOKUP, "Invalid date format: [{}], using default", format, ex);
    67              }
    68          }
    69          if (dateFormat == null) {
    70              dateFormat = DateFormat.getInstance();
    71          }
    72          return dateFormat.format(new Date(date));
    73      }
    74  }