| /* |
| * 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.nifi.toolkit.encryptconfig |
| |
| import org.apache.log4j.LogManager |
| import org.apache.log4j.PropertyConfigurator |
| import org.slf4j.Logger |
| import org.slf4j.LoggerFactory |
| |
| class EncryptConfigLogger { |
| private static final Logger logger = LoggerFactory.getLogger(EncryptConfigLogger.class) |
| |
| /** |
| * Configures the logger. |
| * |
| * The nifi-toolkit module uses log4j, which will be configured to append all |
| * log output to the system STDERR. The log level can be specified using the verboseEnabled |
| * argument. A value of <code>true</code> will set the log level to DEBUG, a value of |
| * <code>false</code> will set the log level to INFO. |
| * |
| * @param verboseEnabled flag to indicate if verbose mode is enabled, which sets the log level to DEBUG |
| */ |
| static configureLogger(boolean verboseEnabled) { |
| |
| Properties log4jProps = null |
| URL log4jPropsPath = EncryptConfigLogger.class.getResource("/log4j.properties") |
| if (log4jPropsPath) { |
| try { |
| log4jPropsPath.withReader { reader -> |
| log4jProps = new Properties() |
| log4jProps.load(reader) |
| } |
| } catch (IOException e) { |
| // do nothing, we will fallback to hardcoded defaults below |
| } |
| } |
| |
| if (!log4jProps) { |
| log4jProps = defaultProperties() |
| } |
| |
| // For encrypt-config, log output should go to System.err as System.out is used for tool output in decrypt mode |
| log4jProps.put("log4j.appender.console.Target", "System.err") |
| |
| if (verboseEnabled) { |
| // Override the log level for this package. For this to work as intended, this class must belong |
| // to the same package (or a parent package) of all the encrypt-config classes |
| log4jProps.put("log4j.logger." + EncryptConfigLogger.class.package.name, "DEBUG") |
| } |
| |
| LogManager.resetConfiguration() |
| PropertyConfigurator.configure(log4jProps) |
| |
| if (verboseEnabled) { |
| logger.debug("Verbose mode is enabled (goes to stderr by default).") |
| } |
| } |
| |
| /** |
| * A copy of the settings in /src/main/resources/log4j.properties, in case that is not on the classpath at runtime |
| * @return Properties containing the default properties for Log4j |
| */ |
| static Properties defaultProperties() { |
| Properties defaultProperties = new Properties() |
| defaultProperties.setProperty("log4j.rootLogger", "INFO,console") |
| defaultProperties.setProperty("log4j.appender.console", "org.apache.log4j.ConsoleAppender") |
| defaultProperties.setProperty("log4j.appender.console.Target", "System.err") |
| defaultProperties.setProperty("log4j.appender.console.layout", "org.apache.log4j.PatternLayout") |
| defaultProperties.setProperty("log4j.appender.console.layout.ConversionPattern", "%d{yyyy-mm-dd HH:mm:ss} %p %c{1}: %m%n") |
| return defaultProperties |
| } |
| } |