/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache license, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the license for the specific language governing permissions and * limitations under the license. */ package org.apache.logging.log4j.core.lookup; import java.util.Locale; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.util.Strings; /** * Looks up keys related to Java: Java version, JRE version, VM version, and so on. */ @Plugin(name = "java", category = StrLookup.CATEGORY) public class JavaLookup extends AbstractLookup { private final SystemPropertiesLookup spLookup = new SystemPropertiesLookup(); /** * Accessible through the Lookup key {@code hw}. * @return hardware processor information. */ public String getHardware() { return "processors: " + Runtime.getRuntime().availableProcessors() + ", architecture: " + getSystemProperty("os.arch") + this.getSystemProperty("-", "sun.arch.data.model") + this.getSystemProperty(", instruction sets: ", "sun.cpu.isalist"); } /** * Accessible through the Lookup key {@code locale}. * @return system locale and file encoding information. */ public String getLocale() { return "default locale: " + Locale.getDefault() + ", platform encoding: " + getSystemProperty("file.encoding"); } /** * Accessible through the Lookup key {@code os}. * @return operating system information. */ public String getOperatingSystem() { return getSystemProperty("os.name") + " " + getSystemProperty("os.version") + getSystemProperty(" ", "sun.os.patch.level") + ", architecture: " + getSystemProperty("os.arch") + getSystemProperty("-", "sun.arch.data.model"); } /** * Accessible through the Lookup key {@code runtime}. * @return Java Runtime Environment information. */ public String getRuntime() { return getSystemProperty("java.runtime.name") + " (build " + getSystemProperty("java.runtime.version") + ") from " + getSystemProperty("java.vendor"); } private String getSystemProperty(final String name) { return spLookup.lookup(name); } private String getSystemProperty(final String prefix, final String name) { final String value = getSystemProperty(name); if (Strings.isEmpty(value)) { return Strings.EMPTY; } return prefix + value; } /** * Accessible through the Lookup key {@code vm}. * @return Java Virtual Machine information. */ public String getVirtualMachine() { return getSystemProperty("java.vm.name") + " (build " + getSystemProperty("java.vm.version") + ", " + getSystemProperty("java.vm.info") + ")"; } /** * Looks up the value of the environment variable. * * @param event * The current LogEvent (is ignored by this StrLookup). * @param key * the key to be looked up, may be null * @return The value of the environment variable. */ @Override public String lookup(final LogEvent event, final String key) { switch (key) { case "version": return "Java version " + getSystemProperty("java.version"); case "runtime": return getRuntime(); case "vm": return getVirtualMachine(); case "os": return getOperatingSystem(); case "hw": return getHardware(); case "locale": return getLocale(); default: throw new IllegalArgumentException(key); } } }