telegram-files/api/src/main/java/telegram/files/Config.java

151 lines
4.9 KiB
Java

package telegram.files;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import cn.hutool.log.dialect.jdk.JdkLog;
import io.vertx.core.DeploymentOptions;
import io.vertx.core.ThreadingModel;
import java.io.File;
import java.io.IOException;
import java.util.Objects;
import java.util.logging.*;
public class Config {
public static final String LOG_LEVEL = StrUtil.blankToDefault(System.getenv("LOG_LEVEL"), "INFO");
public static final String APP_ENV = StrUtil.blankToDefault(System.getenv("APP_ENV"), "prod");
public static final String APP_ROOT = System.getenv("APP_ROOT");
public static final String DB_TYPE = StrUtil.blankToDefault(System.getenv("DB_TYPE"), "sqlite");
public static final String DB_HOST = System.getenv("DB_HOST");
public static final int DB_PORT = Convert.toInt(System.getenv("DB_PORT"));
public static final String DB_USER = System.getenv("DB_USER");
public static final String DB_PASSWORD = System.getenv("DB_PASSWORD");
public static final String DB_NAME = System.getenv("DB_NAME");
public static final String LOG_PATH = APP_ROOT + File.separator + "logs";
public static final String TELEGRAM_ROOT = APP_ROOT + File.separator + "account";
public static final int TELEGRAM_API_ID = Convert.toInt(System.getenv("TELEGRAM_API_ID"), 0);
public static final String TELEGRAM_API_HASH = System.getenv("TELEGRAM_API_HASH");
public static final int TELEGRAM_LOG_LEVEL = Convert.toInt(System.getenv("TELEGRAM_LOG_LEVEL"), 0);
public static final DeploymentOptions VIRTUAL_THREAD_DEPLOYMENT_OPTIONS = new DeploymentOptions()
.setThreadingModel(ThreadingModel.VIRTUAL_THREAD);
private static Level logLevel;
static {
if (APP_ENV == null) {
throw new RuntimeException("APP_ENV is not set");
}
if (APP_ROOT == null) {
throw new RuntimeException("APP_ROOT is not set");
}
if (TELEGRAM_API_ID == 0) {
throw new RuntimeException("TELEGRAM_API_ID is not set");
}
if (TELEGRAM_API_HASH == null) {
throw new RuntimeException("TELEGRAM_API_HASH is not set");
}
if (!FileUtil.exist(APP_ROOT)) {
FileUtil.mkdir(APP_ROOT);
}
if (!FileUtil.exist(TELEGRAM_ROOT)) {
FileUtil.mkdir(TELEGRAM_ROOT);
}
if (!FileUtil.exist(LOG_PATH)) {
FileUtil.mkdir(LOG_PATH);
}
initLogger();
}
public static boolean isProd() {
return "prod".equals(APP_ENV);
}
public static void initLogger() {
Logger rootLogger = Logger.getLogger("");
rootLogger.setLevel(Level.INFO);
System.setProperty("java.util.logging.SimpleFormatter.format",
"[%1$tF %1$tT] [%4$s] %5$s %6$s%n");
if (ArrayUtil.isNotEmpty(rootLogger.getHandlers())) {
for (Handler handler : rootLogger.getHandlers()) {
rootLogger.removeHandler(handler);
}
}
ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setLevel(Level.FINE);
consoleHandler.setFormatter(new SimpleFormatter());
rootLogger.addHandler(consoleHandler);
try {
String logFilePattern = LOG_PATH + File.separator + "api.log";
FileHandler fileHandler = new FileHandler(logFilePattern, 5000000, 3, true);
fileHandler.setLevel(Level.FINE);
fileHandler.setFormatter(new SimpleFormatter());
rootLogger.addHandler(fileHandler);
} catch (IOException e) {
System.out.println("Failed to create log FileHandler: " + e.getMessage());
}
try {
logLevel = Level.parse(Config.LOG_LEVEL);
System.out.println("Setting telegram.files log level to " + logLevel);
} catch (IllegalArgumentException e) {
System.err.println("Invalid log level [" + Config.LOG_LEVEL + "], using default INFO.");
}
Logger nettyLogger = Logger.getLogger("io.netty");
nettyLogger.setLevel(Level.WARNING);
Logger.getLogger("telegram.files").setLevel(logLevel);
}
public static boolean isSqlite() {
return Objects.equals(DB_TYPE, "sqlite");
}
public static boolean isPostgres() {
return Objects.equals(DB_TYPE, "postgres");
}
public static boolean isMysql() {
return Objects.equals(DB_TYPE, "mysql");
}
public static class JDKLogFactory extends LogFactory {
public JDKLogFactory() {
super("JDK Logging");
}
public Log createLog(String name) {
return new JdkLog(name);
}
public Log createLog(Class<?> clazz) {
return new JdkLog(clazz);
}
}
}