blob: 1b59791f7ec9e901b46722dcc878f16ccb9952a6 [file] [log] [blame]
// ***************************************************************************************************************************
// * 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.juneau.microservice;
import java.util.*;
import java.util.logging.*;
import java.util.logging.Formatter;
import org.apache.juneau.microservice.resources.*;
/**
* Can be used for configuration of simple logging in the microservice.
*
* <p>
* Instances of this class can be created using {@link #create()} and passing the result to
* {@link MicroserviceBuilder#logConfig(LogConfig)}.
*
* <p>
* These values override values specified in the <js>"Logging"</js> configuration section.
*/
public class LogConfig {
String logFile, logDir;
Boolean append;
Integer limit, count;
Level fileLevel, consoleLevel;
Map<String,Level> levels = new LinkedHashMap<>();
Formatter formatter;
LogConfig() {}
/**
* Copy constructor.
*
* @param copyFrom The log config to copy from.
*/
protected LogConfig(LogConfig copyFrom) {
this.logFile = copyFrom.logFile;
this.logDir = copyFrom.logDir;
this.append = copyFrom.append;
this.limit = copyFrom.limit;
this.count = copyFrom.count;
this.fileLevel = copyFrom.fileLevel;
this.consoleLevel = copyFrom.consoleLevel;
this.levels = new LinkedHashMap<>(copyFrom.levels);
this.formatter = copyFrom.formatter;
}
/**
* Creates a copy of this log configuration.
*
* @return A new copy of this log configuration.
*/
public LogConfig copy() {
return new LogConfig(this);
}
/**
* Creates a new instance of this config.
*
* @return A new instance of this config.
*/
public static LogConfig create() {
return new LogConfig();
}
/**
* Returns the name of the log file on the file system to store the log file for this microservice.
*
* <p>
* This overrides the configuration value <js>"Logging/logFile"</js>.
* If not specified, no file system logging will be used.
*
* @param logFile The log file.
* @return This object (for method chaining).
*/
public LogConfig logFile(String logFile) {
this.logFile = logFile;
return this;
}
/**
* The location of the log directory to create the log file.
*
* <p>
* This overrides the configuration value <js>"Logging/logDir"</js>.
* If not specified, uses the JVM working directory.
*
* @param logDir The log directory location as a path relative to the working directory.
* @return This object (for method chaining).
*/
public LogConfig logDir(String logDir) {
this.logDir = logDir;
return this;
}
/**
* The log entry formatter.
*
* <p>
* If not specified, uses the following values pulled from the configuration to construct a {@link LogEntryFormatter}:
* <ul>
* <li><js><js>"Logging/format"</js> (default is <js>"[{date} {level}] {msg}%n"</js>)
* <li><js><js>"Logging/dateFormat"</js> (default is <js>"yyyy.MM.dd hh:mm:ss"</js>)
* <li><js><js>"Logging/useStackTraceHashes"</js> (default is <jk>false</jk>)
* </ul>
*
*
* @param formatter The log entry formatter.
* @return This object (for method chaining).
* @see LogEntryFormatter
*/
public LogConfig formatter(Formatter formatter) {
this.formatter = formatter;
return this;
}
/**
* Specified append mode for the log file.
*
* @return This object (for method chaining).
*/
public LogConfig append() {
this.append = true;
return this;
}
/**
* The maximum number of bytes to write to any one log file.
*
* @param limit The number of bytes.
* @return This object (for method chaining).
*/
public LogConfig limit(int limit) {
this.limit = limit;
return this;
}
/**
* The number of log files to use.
*
* @param count The number of log files.
* @return This object (for method chaining).
*/
public LogConfig count(int count) {
this.count = count;
return this;
}
/**
* The default logging level for the log file.
*
* @param fileLevel The logging level.
* @return This object (for method chaining).
*/
public LogConfig fileLevel(Level fileLevel) {
this.fileLevel = fileLevel;
return this;
}
/**
* The default logging level for the console.
*
* @param consoleLevel The logging level.
* @return This object (for method chaining).
*/
public LogConfig consoleLevel(Level consoleLevel) {
this.consoleLevel = consoleLevel;
return this;
}
/**
* Default logging levels for loggers.
*
* @param levels A map of logger names to logger levels.
* @return This object (for method chaining).
*/
public LogConfig levels(Map<String,Level> levels) {
this.levels.putAll(levels);
return this;
}
/**
* Default logging level for logger.
*
* @param logger Logger name.
* @param level Logger level.
* @return This object (for method chaining).
*/
public LogConfig level(String logger, Level level) {
this.levels.put(logger, level);
return this;
}
}