(improvement)(semantic) Change 'semantic' to 'headless' (#555)

This commit is contained in:
lexluo09
2023-12-20 17:08:16 +08:00
committed by GitHub
parent 187dcacbe7
commit 150d67f903
394 changed files with 1970 additions and 1975 deletions

109
launchers/headless/pom.xml Normal file
View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>launchers</artifactId>
<groupId>com.tencent.supersonic</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>launchers-headless</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<start-class>com.tencent.supersonic.HeadlessLauncher</start-class>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.tencent.supersonic</groupId>
<artifactId>headless-query</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.tencent.supersonic</groupId>
<artifactId>headless-model</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.tencent.supersonic</groupId>
<artifactId>launchers-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.tencent.supersonic</groupId>
<artifactId>auth-authentication</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.tencent.supersonic</groupId>
<artifactId>auth-authorization</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.tencent.supersonic</groupId>
<artifactId>auth-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<excludes>
<exclude>*.*</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<skipAssembly>false</skipAssembly>
<archive>
<manifest>
<mainClass>${start-class}</mainClass>
</manifest>
</archive>
<descriptors>
<descriptor>/src/main/build/build.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,39 @@
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>bin</id>
<formats>
<format>tar.gz</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.basedir}/src/main/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>0777</fileMode>
<directoryMode>0755</directoryMode>
</fileSet>
<fileSet>
<directory>${project.basedir}/src/main/resources</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0777</fileMode>
<directoryMode>0755</directoryMode>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>lib</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
</dependencySet>
</dependencySets>
</assembly>

View File

@@ -0,0 +1,20 @@
package com.tencent.supersonic;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
/**
* Semantic Launcher
**/
@Slf4j
@SpringBootApplication(scanBasePackages = {"com.tencent.supersonic"},
exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class HeadlessLauncher {
public static void main(String[] args) {
SpringApplication.run(HeadlessLauncher.class, args);
}
}

View File

@@ -0,0 +1,33 @@
package com.tencent.supersonic.db;
import com.github.pagehelper.PageInterceptor;
import javax.sql.DataSource;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@Configuration
@MapperScan(value = "com.tencent.supersonic", annotationClass = Mapper.class)
public class MybatisConfig {
private static final String MAPPER_LOCATION = "classpath*:mapper/**/*.xml";
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource, PageInterceptor pageInterceptor)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);
bean.setConfiguration(configuration);
bean.setDataSource(dataSource);
bean.setPlugins(new Interceptor[]{pageInterceptor});
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
return bean.getObject();
}
}

View File

@@ -0,0 +1,20 @@
package com.tencent.supersonic.db;
import com.github.pagehelper.PageInterceptor;
import java.util.Properties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class PageHelperConfig {
@Bean
public PageInterceptor pageInterceptor() {
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect", "h2");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
}

View File

@@ -0,0 +1,6 @@
com.tencent.supersonic.auth.authentication.interceptor.AuthenticationInterceptor=\
com.tencent.supersonic.auth.authentication.interceptor.DefaultAuthenticationInterceptor
com.tencent.supersonic.auth.api.authentication.adaptor.UserAdaptor=\
com.tencent.supersonic.auth.authentication.adaptor.DefaultUserAdaptor

View File

@@ -0,0 +1,27 @@
server:
servlet:
context-path:
port: 9081
spring:
h2:
console:
path: /h2-console/semantic
# enabled web
enabled: true
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:semantic;DATABASE_TO_UPPER=false
username: root
password: semantic
schema: classpath:db/semantic-schema-h2.sql
data: classpath:db/semantic-data-h2.sql
authentication:
enable: true
exclude:
path: /api/auth/user/register,/api/auth/user/login
token:
http:
header:
key: Authorization

View File

@@ -0,0 +1,5 @@
spring:
profiles:
active: local
application:
name: headless

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,286 @@
CREATE TABLE IF NOT EXISTS `s2_model` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` varchar(255) DEFAULT NULL , -- domain name
`biz_name` varchar(255) DEFAULT NULL , -- internal name
`domain_id` INT DEFAULT '0' , -- parent domain ID
`alias` varchar(255) DEFAULT NULL , -- internal name
`status` INT DEFAULT NULL, -- 0 is off the shelf, 1 is normal
`description` varchar(500) DEFAULT NULL ,
`created_at` TIMESTAMP DEFAULT NULL ,
`created_by` varchar(100) DEFAULT NULL ,
`updated_at` TIMESTAMP DEFAULT NULL ,
`updated_by` varchar(100) DEFAULT NULL ,
`admin` varchar(3000) DEFAULT NULL , -- domain administrator
`admin_org` varchar(3000) DEFAULT NULL , -- domain administrators organization
`is_open` TINYINT DEFAULT NULL , -- whether the domain is public
`viewer` varchar(3000) DEFAULT NULL , -- domain available users
`view_org` varchar(3000) DEFAULT NULL , -- domain available organization
`entity` varchar(500) DEFAULT NULL , -- domain entity info
`drill_down_dimensions` varchar(500) DEFAULT NULL , -- drill down dimensions info
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_model IS 'model information';
CREATE TABLE IF NOT EXISTS `s2_domain` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` varchar(255) DEFAULT NULL , -- domain name
`biz_name` varchar(255) DEFAULT NULL , -- internal name
`parent_id` INT DEFAULT '0' , -- parent domain ID
`status` INT NOT NULL ,
`created_at` TIMESTAMP DEFAULT NULL ,
`created_by` varchar(100) DEFAULT NULL ,
`updated_at` TIMESTAMP DEFAULT NULL ,
`updated_by` varchar(100) DEFAULT NULL ,
`is_unique` INT DEFAULT NULL , -- 0 is non-unique, 1 is unique
`admin` varchar(3000) DEFAULT NULL , -- domain administrator
`admin_org` varchar(3000) DEFAULT NULL , -- domain administrators organization
`is_open` TINYINT DEFAULT NULL , -- whether the domain is public
`viewer` varchar(3000) DEFAULT NULL , -- domain available users
`view_org` varchar(3000) DEFAULT NULL , -- domain available organization
`entity` varchar(500) DEFAULT NULL , -- domain entity info
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_domain IS 'domain basic information';
CREATE TABLE `s2_database` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL ,
`description` varchar(500) DEFAULT NULL ,
`version` varchar(64) DEFAULT NULL ,
`type` varchar(20) NOT NULL , -- type: mysql,clickhouse,tdw
`config` varchar(655) NOT NULL ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL,
`admin` varchar(500) NOT NULL,
`viewer` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_database IS 'database instance table';
CREATE TABLE IF NOT EXISTS `s2_datasource` (
`id` INT NOT NULL AUTO_INCREMENT,
`model_id` INT NOT NULL ,
`name` varchar(255) NOT NULL ,
`biz_name` varchar(255) NOT NULL ,
`description` varchar(500) DEFAULT NULL ,
`database_id` INT NOT NULL ,
`datasource_detail` LONGVARCHAR NOT NULL ,
`status` int(11) DEFAULT NULL ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_datasource IS 'datasource table';
create table s2_user
(
id INT AUTO_INCREMENT,
name varchar(100) not null,
display_name varchar(100) null,
password varchar(100) null,
email varchar(100) null,
is_admin INT null,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_user IS 'user information table';
create table s2_auth_groups
(
group_id INT,
config varchar(2048),
PRIMARY KEY (`group_id`)
);
CREATE TABLE IF NOT EXISTS `s2_metric` (
`id` INT NOT NULL AUTO_INCREMENT,
`model_id` INT NOT NULL ,
`name` varchar(255) NOT NULL ,
`biz_name` varchar(255) NOT NULL ,
`description` varchar(500) DEFAULT NULL ,
`status` INT NOT NULL , -- status, 0 is normal, 1 is off the shelf, 2 is deleted
`sensitive_level` INT NOT NULL ,
`type` varchar(50) NOT NULL , -- type proxy,expr
`type_params` LONGVARCHAR DEFAULT NULL ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL ,
`data_format_type` varchar(50) DEFAULT NULL ,
`data_format` varchar(500) DEFAULT NULL,
`alias` varchar(500) DEFAULT NULL,
`tags` varchar(500) DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_metric IS 'metric information table';
CREATE TABLE IF NOT EXISTS `s2_dimension` (
`id` INT NOT NULL AUTO_INCREMENT ,
`model_id` INT NOT NULL ,
`datasource_id` INT NOT NULL ,
`name` varchar(255) NOT NULL ,
`biz_name` varchar(255) NOT NULL ,
`description` varchar(500) NOT NULL ,
`status` INT NOT NULL , -- status, 0 is normal, 1 is off the shelf, 2 is deleted
`sensitive_level` INT DEFAULT NULL ,
`type` varchar(50) NOT NULL , -- type categorical,time
`type_params` LONGVARCHAR DEFAULT NULL ,
`expr` LONGVARCHAR NOT NULL , -- expression
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL ,
`semantic_type` varchar(20) NOT NULL, -- semantic type: DATE, ID, CATEGORY
`alias` varchar(500) DEFAULT NULL,
`default_values` varchar(500) DEFAULT NULL,
`dim_value_maps` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_dimension IS 'dimension information table';
create table s2_datasource_rela
(
id INT AUTO_INCREMENT,
model_id INT null,
datasource_from INT null,
datasource_to INT null,
join_key varchar(100) null,
created_at TIMESTAMP null,
created_by varchar(100) null,
updated_at TIMESTAMP null,
updated_by varchar(100) null,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_datasource_rela IS 'data source association table';
create table s2_view_info
(
id INT auto_increment,
model_id INT null,
type varchar(20) null comment 'datasource、dimension、metric',
config LONGVARCHAR null comment 'config detail',
created_at TIMESTAMP null,
created_by varchar(100) null,
updated_at TIMESTAMP null,
updated_by varchar(100) not null
);
COMMENT ON TABLE s2_view_info IS 'view information table';
CREATE TABLE `s2_query_stat_info` (
`id` INT NOT NULL AUTO_INCREMENT,
`trace_id` varchar(200) DEFAULT NULL, -- query unique identifier
`model_id` INT DEFAULT NULL,
`user` varchar(200) DEFAULT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
`query_type` varchar(200) DEFAULT NULL, -- the corresponding scene
`query_type_back` INT DEFAULT '0' , -- query type, 0-normal query, 1-pre-refresh type
`query_sql_cmd`LONGVARCHAR , -- sql type request parameter
`sql_cmd_md5` varchar(200) DEFAULT NULL, -- sql type request parameter md5
`query_struct_cmd`LONGVARCHAR , -- struct type request parameter
`struct_cmd_md5` varchar(200) DEFAULT NULL, -- struct type request parameter md5值
`sql`LONGVARCHAR ,
`sql_md5` varchar(200) DEFAULT NULL, -- sql md5
`query_engine` varchar(20) DEFAULT NULL,
`elapsed_ms` bigINT DEFAULT NULL,
`query_state` varchar(20) DEFAULT NULL,
`native_query` INT DEFAULT NULL, -- 1-detail query, 0-aggregation query
`start_date` varchar(50) DEFAULT NULL,
`end_date` varchar(50) DEFAULT NULL,
`dimensions`LONGVARCHAR , -- dimensions involved in sql
`metrics`LONGVARCHAR , -- metric involved in sql
`select_cols`LONGVARCHAR ,
`agg_cols`LONGVARCHAR ,
`filter_cols`LONGVARCHAR ,
`group_by_cols`LONGVARCHAR ,
`order_by_cols`LONGVARCHAR ,
`use_result_cache` TINYINT DEFAULT '-1' , -- whether to hit the result cache
`use_sql_cache` TINYINT DEFAULT '-1' , -- whether to hit the sql cache
`sql_cache_key`LONGVARCHAR , -- sql cache key
`result_cache_key`LONGVARCHAR , -- result cache key
PRIMARY KEY (`id`)
) ;
COMMENT ON TABLE s2_query_stat_info IS 'query statistics table';
CREATE TABLE IF NOT EXISTS `s2_semantic_pasre_info` (
`id` INT NOT NULL AUTO_INCREMENT,
`trace_id` varchar(200) NOT NULL ,
`model_id` INT NOT NULL ,
`dimensions`LONGVARCHAR ,
`metrics`LONGVARCHAR ,
`orders`LONGVARCHAR ,
`filters`LONGVARCHAR ,
`date_info`LONGVARCHAR ,
`limit` INT NOT NULL ,
`native_query` TINYINT NOT NULL DEFAULT '0' ,
`sql`LONGVARCHAR ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`status` INT NOT NULL ,
`elapsed_ms` bigINT DEFAULT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_semantic_pasre_info IS 'semantic layer sql parsing information table';
CREATE TABLE IF NOT EXISTS `s2_available_date_info` (
`id` INT NOT NULL AUTO_INCREMENT ,
`item_id` INT NOT NULL ,
`type` varchar(255) NOT NULL ,
`date_format` varchar(64) NOT NULL ,
`start_date` varchar(64) ,
`end_date` varchar(64) ,
`unavailable_date` LONGVARCHAR DEFAULT NULL ,
`created_at` TIMESTAMP NOT NULL ,
`created_by` varchar(100) NOT NULL ,
`updated_at` TIMESTAMP NOT NULL ,
`updated_by` varchar(100) NOT NULL ,
`date_period` varchar(100) DEFAULT NULL ,
`status` INT DEFAULT '0', -- 1-in use 0 is normal, 1 is off the shelf, 2 is deleted
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_available_date_info IS 's2_available_date_info information table';
-------demo for semantic and chat
CREATE TABLE IF NOT EXISTS `s2_user_department` (
`user_name` varchar(200) NOT NULL,
`department` varchar(200) NOT NULL -- department of user
);
COMMENT ON TABLE s2_semantic_pasre_info IS 'user_department_info';
CREATE TABLE IF NOT EXISTS `s2_pv_uv_statis` (
`imp_date` varchar(200) NOT NULL,
`user_name` varchar(200) NOT NULL,
`page` varchar(200) NOT NULL
);
COMMENT ON TABLE s2_semantic_pasre_info IS 'user_access_info';
CREATE TABLE IF NOT EXISTS `s2_stay_time_statis` (
`imp_date` varchar(200) NOT NULL,
`user_name` varchar(200) NOT NULL,
`stay_hours` DOUBLE NOT NULL,
`page` varchar(200) NOT NULL
);
COMMENT ON TABLE s2_stay_time_statis IS 's2_stay_time_statis_info';
CREATE TABLE IF NOT EXISTS `singer` (
`imp_date` varchar(200) NOT NULL,
`singer_name` varchar(200) NOT NULL,
`act_area` varchar(200) NOT NULL,
`song_name` varchar(200) NOT NULL,
`genre` varchar(200) NOT NULL,
`js_play_cnt` bigINT DEFAULT NULL,
`down_cnt` bigINT DEFAULT NULL,
`favor_cnt` bigINT DEFAULT NULL
);
COMMENT ON TABLE singer IS 'singer_info';

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<contextName>logback</contextName>
<!-- <property name="LOG_PATH" value="${logback.logdir:-logs}"/>-->
<property name="LOG_PATH" value="${LOG_PATH:-logs}"/>
<property name="LOG_APPNAME" value="semantic"/>
<!--输出到控制台-->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} %line - %msg%n</pattern>
</encoder>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名称如果没有File 属性那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${LOG_PATH}/info.${LOG_APPNAME}.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${LOG_PATH}/info.${LOG_APPNAME}.%d{yyyy-MM-dd}.log.gz</FileNamePattern>
<!--只保留最近30天的日志-->
<maxHistory>30</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] %-5level [%X{TRACE_ID}] %logger{36} %line - %msg%n</pattern>
</encoder>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的ThresholdFilter-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>Error</level>
</filter>
<!--日志名称如果没有File 属性那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${LOG_PATH}/error.${LOG_APPNAME}.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${LOG_PATH}/error.${LOG_APPNAME}.%d{yyyy-MM-dd}.log.gz</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] %-5level [%X{TRACE_ID}] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
<appender-ref ref="consoleLog"/>
</root>
<appender name="serviceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名称如果没有File 属性那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${LOG_PATH}/serviceinfo.${LOG_APPNAME}.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${LOG_PATH}/serviceinfo.${LOG_APPNAME}.%d{yyyy-MM-dd}.log.gz</FileNamePattern>
<!--只保留最近30天的日志-->
<maxHistory>30</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] %-5level [%X{TRACE_ID}] %logger{36} %line - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.tencent.supersonic" level="INFO" additivity="true">
<appender-ref ref="serviceLog"/>
</logger>
</configuration>