# sdhs-paas-sdk
**Repository Path**: keepeng/sdhs-paas-sdk
## Basic Information
- **Project Name**: sdhs-paas-sdk
- **Description**: No description available
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-05-10
- **Last Updated**: 2021-12-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# sdhs-paas-sdk
## 项目介绍
为公司后续开发分布式微服务项目提供一些基础组件,简化微服务开发过程,提高开发效率,并且统一相关规范,目前SDK先接入日志组件,目的是为了统一日志规则,为后续日志中心进行日志收集以及日志监控告警提供基础。
## [ **日志** ](#)
### 1.如何使用
1.修改Maven远程仓库地址
> http://10.180.29.108:8081/repository/xlpay-public/
```
xlpaymaven
xlpay maven
http://10.180.29.108:8081/repository/xlpay-public/
true
true
```
2.Maven引入相关依赖
```
com.sdhs.paas
sdhs-paas-sdk
${latestVersion}
```
3.如果项目里已经使用基于Slf4j接口进行日志打印,需要 **删除** 本地的日志配置文件 **log4j.properties、log4j2.xml(yml)、logback.xml** 等,原有日志实例定义无需改动:
> 为了以后业务埋点,需要更换日志包名,日志库内部也是基于Slf4j接口实现,因此后续内部可扩展
```
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
```
替换为:
```
import com.sdhs.paas.sdk.core.logger.Logger;
import com.sdhs.paas.sdk.core.logger.LoggerFactory;
```
4.如果项目里目前不是使用的基于Slf4j接口进行日志打印,直接按照(**5**)进行修改,并且**删掉本地相关日志配置文件**
5.初始化日志库实例
```
import com.sdhs.paas.sdk.core.logger.Logger;
import com.sdhs.paas.sdk.core.logger.LoggerFactory;
...
...
public class Demo{
...
...
private static Logger LOGGER = LoggerFactory.getLogger(Demo.class);
...
...
}
```
6.打印日志
```
LOGGER.trace("Hello {}", "World");
LOGGER.debug("Hello {}", "World");
LOGGER.info("Hello {}", "World");
LOGGER.warn("Hello {}", "World");
LOGGER.error("Hello {}", "World");
```
### 2.日志配置
日志库配置目前暂仅支持基于 **SpringBoot** 开发的项目,通过在 **application-{profile}.yml** 文件里进行配置,为了方便多环境配置应用启动,不要在默认的application.yml里进行配置,即默认的application.yml文件里不要配置任何东西,具体多环境配置参考[这里](#multi_config)
#### 2.1 日志文件命名
日志文件使用{spring.application.name}属性即应用名称进行命名,默认使用"app"; 一个可执行程序运行默认会产生2个日志文件:
- {spring.application.name}_all.log: 当前最新的所有日志信息文件
- {spring.application.name}_error.log: 错误日志信息文件
#### 2.2 日志目录
日志目录通过{logging.path}属性进行配置,可以是绝对路径或者相对路径,默认在可执行程序运行目录logs文件夹下(./logs/)
#### 2.3 日志文件归档
日志文件同时根据日期(每天)以及文件大小进行分割归档,归档文件默认使用gzip进行压缩,归档文件保存在日志目录下的{yyyy-MM}文件夹下,即在日志目录下按月生成一个文件夹保存日志归档文件。
归档日志文件格式:{LOG_NAME}_all.%d{yyyy-MM-dd}.%i.log.gz、{LOG_NAME}_error.%d{yyyy-MM-dd}.%i.log.gz
#### 2.4 日志打印格式
**日志打印格式为日志库内置,为了统一各个项目日志输出格式,原则上不能外部自定义;**
_如果以下格式不能满足需求或者有个性化需求及时沟通,日志库支持扩展_
```
日期时间 级别 进程号 线程标识 调用类:行号 日志内容
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:- } --- [%t] %logger:%L - %msg%n}
```
#### 2.5 日志配置示例
- application-{profile}.yml
```
spring:
application:
name: Demo #应用名称,目前日志文件名称使用该属性命名
logging:
maxFileSize: 10MB #单个日志文件最大10MB,可选节点,默认200MB
maxHistoryDay: 180 #可选节点,控制保留的归档文件的周期(天),示例仅保存最近180天的日志归档文件
totalSizeCap: 10GB #可选节点,默认20GB,所有归档文件的总大小。当超过了总大小上限时,将异步删除最老的文件。
level:
root: INFO #根节点日志打印级别,最好配置,默认DEBUG
org.springframework.web: ERROR #某包(类)的日志打印级别,根据自身项目情况进行配置
com.howtodoinjava: INFO
org.hibernate: ERROR
path: E:\logPath #可选节点,日志输出目录,默认可执行程序运行目录下logs文件夹(./logs)
```
- application-{profile}.properties
```
spring.application.name: Demo #应用名称,目前日志文件名称使用该属性命名
logging.maxFileSize: 10MB #单个日志文件最大10MB,可选节点,默认200MB
logging.maxHistoryDay: 180 #可选节点,控制保留的归档文件的周期(天),示例仅保存最近180天的日志归档文件
logging.totalSizeCap: 10GB #可选节点,默认20GB,所有归档文件的总大小。当超过了总大小上限时,将异步删除最老的文件。
logging.level.root: INFO #根节点日志打印级别,最好配置,默认DEBUG
logging.level.org.springframework.web: ERROR #某包(类)的日志打印级别
logging.level.com.howtodoinjava: INFO
logging.level.org.hibernate: ERROR
logging.path: E:\logPath\ #可选节点,日志目录,默认可执行程序运行目录下logs文件夹(./logs)
```
**新项目建议采用yml格式进行配置,如果现有项目已经使用properties格式进行配置可以继续保留或者使用[在线转换工具](http://www.toyaml.com/)进行转换。**
### 3.Spring Boot多环境配置
在Spring Boot中多环境通过在yml(properties)文件中配置,其中yml配置有2种方式,一种是使用一个yml文件,文件内通过"---"符号进行多环境配置分割,另一种是使用多个yml文件。这里我们采用第二种方式,同时配置文件名需要满足application-{profile}.yml的格式,其中{profile}对应你的环境标识,比如:
- application-dev.yml:开发环境
- application-test.yml:测试环境
- application-prod.yml:生产环境
例如:
**application-dev.yml**
```
spring:
application:
name: Demo
logging:
level:
root: DEBUG
org.springframework.web: ERROR
com.howtodoinjava: DEBUG
org.hibernate: ERROR
```
**application-prod.yml**
```
spring:
application:
name: Demo
logging:
level:
root: INFO
org.springframework.web: ERROR
com.howtodoinjava: DEBUG
org.hibernate: ERROR
```
**注意: 目前日志库仅支持以上三种环境配置,即profile只能从dev、test、prod三个值中选一个,不能自定义为其他值** ,
目前日志库开发环境会同时向控制台以及文件中输出,测试以及生产环境只向文件中输出。
### 4. Spring Boot多环境启动
通过命令的方式运行jar需要注意的是不要在默认的application.yml(application.properties)中配置(spring.profiles.active),否则通过外部指定的配置项会不生效。
#### 4.1 IDE中多环境启动(IDEA)
通过idea启动不同环境的话,首先打开Run-->Edit Configurations,添加一个Jar Application启动项并配置:

这里只需要指定jar的路径(使用maven clean package打包,一般在target目录下),以及在Environment variables中添加上述配置就行了。

一个环境对应一个启动项,在切换环境的时候,就不需要修改application.yml中spring.profiles.active的值那么麻烦了。
#### 4.2 命令行jar包启动
dev环境配置启动
```
java -jar xxx.jar --spring.profiles.active=dev
```