addJsonConsoleAppender.
+ *
+ * @param context a {@link LoggerContext} object.
+ * @param customFields a {@link String} object.
+ */
+ public static void addErrorFileAppender(LoggerContext context,
+ String logFile,
+ boolean useJsonFormat,
+ String customFields) {
+ log.info("Initializing {} file loggingProperties", logFile);
+ // More documentation is available at: https://github.com/logstash/logstash-logback-encoder
+ RollingFileAppender errorFileAppender = new RollingFileAppender<>();
+ errorFileAppender.setContext(context);
+ errorFileAppender.addFilter(errorLevelFilter(context));
+ if (useJsonFormat) {
+ errorFileAppender.setEncoder(compositeJsonEncoder(context, customFields));
+ } else {
+ errorFileAppender.setEncoder(patternLayoutEncoder(context));
+ }
+ errorFileAppender.setName(FILE_ERROR_APPENDER_NAME);
+ errorFileAppender.setFile(logFile);
+ errorFileAppender.setRollingPolicy(rollingPolicy(context, logFile));
+ errorFileAppender.start();
+ context.getLogger(Logger.ROOT_LOGGER_NAME).detachAppender(FILE_ERROR_APPENDER_NAME);
+ context.getLogger(Logger.ROOT_LOGGER_NAME).addAppender(errorFileAppender);
+ }
+
/**
* addLogstashTcpSocketAppender.
*
* @param context a {@link LoggerContext} object.
* @param customFields a {@link String} object.
- * @param logstashProperties a {@link net.dreamlu.mica.logging.config.MicaLoggingProperties.Logstash} object.
+ * @param logStashProperties a {@link net.dreamlu.mica.logging.config.MicaLoggingProperties.Logstash} object.
*/
- public static void addLogstashTcpSocketAppender(LoggerContext context, String customFields,
- MicaLoggingProperties.Logstash logstashProperties) {
- log.info("Initializing Logstash loggingProperties");
+ public static void addLogStashTcpSocketAppender(LoggerContext context,
+ String customFields,
+ MicaLoggingProperties.Logstash logStashProperties) {
+ log.info("Initializing LogStash loggingProperties");
// More documentation is available at: https://github.com/logstash/logstash-logback-encoder
LogstashTcpSocketAppender logStashAppender = new LogstashTcpSocketAppender();
- logStashAppender.addDestinations(new InetSocketAddress(logstashProperties.getHost(), logstashProperties.getPort()));
+ logStashAppender.addDestinations(new InetSocketAddress(logStashProperties.getHost(), logStashProperties.getPort()));
logStashAppender.setContext(context);
logStashAppender.setEncoder(logstashEncoder(customFields));
logStashAppender.setName(ASYNC_LOG_STASH_APPENDER_NAME);
- logStashAppender.setQueueSize(logstashProperties.getQueueSize());
+ logStashAppender.setQueueSize(logStashProperties.getQueueSize());
logStashAppender.start();
context.getLogger(Logger.ROOT_LOGGER_NAME).addAppender(logStashAppender);
}
@@ -108,13 +180,49 @@ public class LoggingUtil {
* @param customFields a {@link String} object.
* @param properties a {@link net.dreamlu.mica.logging.config.MicaLoggingProperties} object.
*/
- public static void addContextListener(LoggerContext context, String customFields, MicaLoggingProperties properties) {
- LogbackLoggerContextListener loggerContextListener = new LogbackLoggerContextListener(properties, customFields);
+ public static void addContextListener(LoggerContext context,
+ String logFile,
+ String logErrorFile,
+ String customFields,
+ MicaLoggingProperties properties) {
+ LogbackLoggerContextListener loggerContextListener = new LogbackLoggerContextListener(logFile, logErrorFile, customFields, properties);
loggerContextListener.setContext(context);
context.addListener(loggerContextListener);
}
- private static LoggingEventCompositeJsonEncoder compositeJsonEncoder(LoggerContext context, String customFields) {
+ private static RollingPolicy rollingPolicy(LoggerContext context,
+ String logErrorFile) {
+ SizeAndTimeBasedRollingPolicy rollingPolicy = new SizeAndTimeBasedRollingPolicy<>();
+ rollingPolicy.setContext(context);
+ rollingPolicy.setCleanHistoryOnStart(SystemUtil.getPropToBool(LogbackLoggingSystemProperties.ROLLINGPOLICY_CLEAN_HISTORY_ON_START, false));
+ rollingPolicy.setFileNamePattern(logErrorFile + ".%d{yyyy-MM-dd}.%i.gz}");
+ rollingPolicy.setMaxFileSize(FileSize.valueOf(SystemUtil.getProp(LogbackLoggingSystemProperties.ROLLINGPOLICY_MAX_FILE_SIZE, "10MB")));
+ rollingPolicy.setMaxHistory(SystemUtil.getPropToInt(LogbackLoggingSystemProperties.ROLLINGPOLICY_MAX_HISTORY, 7));
+ rollingPolicy.setTotalSizeCap(FileSize.valueOf(SystemUtil.getProp(LogbackLoggingSystemProperties.ROLLINGPOLICY_TOTAL_SIZE_CAP, "0")));
+ rollingPolicy.start();
+ return rollingPolicy;
+ }
+
+ private static ThresholdFilter errorLevelFilter(LoggerContext context) {
+ final ThresholdFilter filter = new ThresholdFilter();
+ filter.setContext(context);
+ filter.setLevel(Level.ERROR.levelStr);
+ filter.start();
+ return filter;
+ }
+
+ private static Encoder patternLayoutEncoder(LoggerContext context) {
+ PatternLayoutEncoder encoder = new PatternLayoutEncoder();
+ encoder.setContext(context);
+ encoder.setPattern(context.getProperty(LoggingSystemProperties.FILE_LOG_PATTERN));
+ String charsetName = SystemUtil.getProp(LogbackLoggingSystemProperties.FILE_LOG_CHARSET, "default");
+ encoder.setCharset(Charset.forName(charsetName));
+ encoder.start();
+ return encoder;
+ }
+
+ private static LoggingEventCompositeJsonEncoder compositeJsonEncoder(LoggerContext context,
+ String customFields) {
final LoggingEventCompositeJsonEncoder compositeJsonEncoder = new LoggingEventCompositeJsonEncoder();
compositeJsonEncoder.setContext(context);
compositeJsonEncoder.setProviders(jsonProviders(context, customFields));
@@ -129,7 +237,8 @@ public class LoggingUtil {
return logstashEncoder;
}
- private static LoggingEventJsonProviders jsonProviders(LoggerContext context, String customFields) {
+ private static LoggingEventJsonProviders jsonProviders(LoggerContext context,
+ String customFields) {
final LoggingEventJsonProviders jsonProviders = new LoggingEventJsonProviders();
jsonProviders.addArguments(new ArgumentsJsonProvider());
jsonProviders.addContext(new ContextJsonProvider<>());
@@ -182,12 +291,19 @@ public class LoggingUtil {
* This listener ensures that the programmatic configuration is also re-applied after reset.
*/
private static class LogbackLoggerContextListener extends ContextAwareBase implements LoggerContextListener {
- private final MicaLoggingProperties loggingProperties;
+ private final String logFile;
+ private final String logErrorFile;
private final String customFields;
+ private final MicaLoggingProperties loggingProperties;
- private LogbackLoggerContextListener(MicaLoggingProperties loggingProperties, String customFields) {
+ private LogbackLoggerContextListener(String logFile,
+ String logErrorFile,
+ String customFields,
+ MicaLoggingProperties loggingProperties) {
this.loggingProperties = loggingProperties;
this.customFields = customFields;
+ this.logFile = logFile;
+ this.logErrorFile = logErrorFile;
}
@Override
@@ -197,21 +313,23 @@ public class LoggingUtil {
@Override
public void onStart(LoggerContext context) {
- if (this.loggingProperties.isUseJsonFormat()) {
- addJsonConsoleAppender(context, customFields);
- }
if (this.loggingProperties.getLogstash().isEnabled()) {
- addLogstashTcpSocketAppender(context, customFields, loggingProperties.getLogstash());
+ addLogStashTcpSocketAppender(context, customFields, loggingProperties.getLogstash());
+ } else {
+ boolean useJsonFormat = loggingProperties.isUseJsonFormat();
+ addAllFileAppender(context, logFile, useJsonFormat, customFields);
+ addErrorFileAppender(context, logErrorFile, useJsonFormat, customFields);
}
}
@Override
public void onReset(LoggerContext context) {
- if (this.loggingProperties.isUseJsonFormat()) {
- addJsonConsoleAppender(context, customFields);
- }
if (this.loggingProperties.getLogstash().isEnabled()) {
- addLogstashTcpSocketAppender(context, customFields, loggingProperties.getLogstash());
+ addLogStashTcpSocketAppender(context, customFields, loggingProperties.getLogstash());
+ } else {
+ boolean useJsonFormat = loggingProperties.isUseJsonFormat();
+ addAllFileAppender(context, logFile, useJsonFormat, customFields);
+ addErrorFileAppender(context, logErrorFile, useJsonFormat, customFields);
}
}
diff --git a/mica-logging/src/main/java/net/dreamlu/mica/logging/config/MicaLoggingConfiguration.java b/mica-logging/src/main/java/net/dreamlu/mica/logging/config/MicaLoggingConfiguration.java
index 1eaa87ef..76c7e717 100644
--- a/mica-logging/src/main/java/net/dreamlu/mica/logging/config/MicaLoggingConfiguration.java
+++ b/mica-logging/src/main/java/net/dreamlu/mica/logging/config/MicaLoggingConfiguration.java
@@ -41,23 +41,32 @@ public class MicaLoggingConfiguration {
@Autowired
public MicaLoggingConfiguration(Environment environment,
MicaLoggingProperties loggingProperties) {
- LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
+ // 1. 服务名和环境和日志目录
String appName = environment.getRequiredProperty(MicaConstant.SPRING_APP_NAME_KEY);
String profile = environment.getRequiredProperty(MicaConstant.ACTIVE_PROFILES_PROPERTY);
- Map map = new HashMap<>();
- map.put("appName", appName);
- map.put("profile", profile);
- map.put("timestamp", "%date{\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\"}");
- String customFields = JsonUtil.toJson(map);
+ // 2. 生成日志文件的文件
+ String logDir = environment.getProperty("logging.file.path", LoggingUtil.DEFAULT_LOG_DIR);
+ String logFile = logDir + '/' + appName + "all.log";
+ String logErrorFile = logDir + '/' + appName + "error.log";
+ // 3. logStash 配置
MicaLoggingProperties.Logstash logStashProperties = loggingProperties.getLogstash();
- if (loggingProperties.isUseJsonFormat()) {
- LoggingUtil.addJsonConsoleAppender(context, customFields);
- }
+ LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
+ // 4. json 自定义字段
+ Map customFields = new HashMap<>();
+ customFields.put("appName", appName);
+ customFields.put("profile", profile);
+ customFields.put("timestamp", "%date{\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\"}");
+ String customFieldsJson = JsonUtil.toJson(customFields);
+ // 是否采用 json 格式化
+ boolean useJsonFormat = loggingProperties.isUseJsonFormat();
if (logStashProperties.isEnabled()) {
- LoggingUtil.addLogstashTcpSocketAppender(context, customFields, logStashProperties);
+ LoggingUtil.addLogStashTcpSocketAppender(context, customFieldsJson, logStashProperties);
+ } else {
+ LoggingUtil.addAllFileAppender(context, logFile, useJsonFormat, customFieldsJson);
+ LoggingUtil.addErrorFileAppender(context, logErrorFile, useJsonFormat, customFieldsJson);
}
- if (loggingProperties.isUseJsonFormat() || logStashProperties.isEnabled()) {
- LoggingUtil.addContextListener(context, customFields, loggingProperties);
+ if (useJsonFormat || logStashProperties.isEnabled()) {
+ LoggingUtil.addContextListener(context, logFile, logErrorFile, customFieldsJson, loggingProperties);
}
}
diff --git a/mica-logging/src/main/java/net/dreamlu/mica/logging/config/MicaLoggingProperties.java b/mica-logging/src/main/java/net/dreamlu/mica/logging/config/MicaLoggingProperties.java
index b2ca1d52..92cd2c73 100644
--- a/mica-logging/src/main/java/net/dreamlu/mica/logging/config/MicaLoggingProperties.java
+++ b/mica-logging/src/main/java/net/dreamlu/mica/logging/config/MicaLoggingProperties.java
@@ -43,9 +43,9 @@ public class MicaLoggingProperties {
@Setter
public static class Console {
/**
- * 是否开启控制台日志
+ * 是否启动完成后关闭控制台日志,适用于,正式环境
*/
- private boolean enabled = true;
+ private boolean closeAfterStart = false;
}
@Getter
diff --git a/mica-logging/src/main/resources/file-error.xml b/mica-logging/src/main/resources/file-error.xml
deleted file mode 100644
index eaf714df..00000000
--- a/mica-logging/src/main/resources/file-error.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
- Error
-
-
- ${FILE_LOG_PATTERN}
-
- ${LOG_ERROR_FILE}
-
- ${LOG_FILE_CLEAN_HISTORY_ON_START:-false}
- ${LOG_ERROR_FILE}.%d{yyyy-MM-dd}.%i.gz}
- ${LOG_FILE_MAX_SIZE:-10MB}
- ${LOG_FILE_MAX_HISTORY:-7}
- ${LOG_FILE_TOTAL_SIZE_CAP:-0}
-
-
-
diff --git a/mica-logging/src/main/resources/logback-spring.xml b/mica-logging/src/main/resources/logback-spring.xml
index 3f2ff57d..84cc54f9 100644
--- a/mica-logging/src/main/resources/logback-spring.xml
+++ b/mica-logging/src/main/resources/logback-spring.xml
@@ -1,21 +1,13 @@
-
-
-
+
-
-
-
+
-
-
-
-
--
GitLab