Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cloud-logging
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hqzhdj
cloud-logging
Commits
a07d5cf9
Commit
a07d5cf9
authored
Jun 03, 2021
by
jenkins
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
a8a56b9a
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
1152 additions
and
0 deletions
+1152
-0
cloud-logging-api/pom.xml
+55
-0
cloud-logging-api/src/main/java/com/yizhi/logging/dto/RequestLogDTO.java
+71
-0
cloud-logging-api/src/main/java/com/yizhi/logging/vo/RequestLogPageVO.java
+47
-0
cloud-logging-api/src/main/java/com/yizhi/logging/vo/RequestLogViewVO.java
+47
-0
cloud-logging-service/pom.xml
+67
-0
cloud-logging-service/src/main/java/com/yizhi/logging/CloudLoggingApplication.java
+21
-0
cloud-logging-service/src/main/java/com/yizhi/logging/config/LocalDateTimeConverter.java
+29
-0
cloud-logging-service/src/main/java/com/yizhi/logging/config/SwaggerConfig.java
+46
-0
cloud-logging-service/src/main/java/com/yizhi/logging/controller/manage/RequestLogController.java
+110
-0
cloud-logging-service/src/main/java/com/yizhi/logging/domain/AuthResource.java
+30
-0
cloud-logging-service/src/main/java/com/yizhi/logging/domain/RequestLog.java
+75
-0
cloud-logging-service/src/main/java/com/yizhi/logging/mq/RequestLogListener.java
+38
-0
cloud-logging-service/src/main/java/com/yizhi/logging/repository/AuthResourceRepository.java
+19
-0
cloud-logging-service/src/main/java/com/yizhi/logging/repository/RequestLogRepository.java
+17
-0
cloud-logging-service/src/main/java/com/yizhi/logging/servicve/AuthResourceService.java
+20
-0
cloud-logging-service/src/main/java/com/yizhi/logging/servicve/AuthResourceServiceImpl.java
+42
-0
cloud-logging-service/src/main/java/com/yizhi/logging/servicve/RequestLogService.java
+30
-0
cloud-logging-service/src/main/java/com/yizhi/logging/servicve/RequestLogServiceImpl.java
+73
-0
cloud-logging-service/src/main/java/com/yizhi/logging/util/IpUtil.java
+120
-0
cloud-logging-service/src/main/java/com/yizhi/logging/util/ListUtil.java
+20
-0
cloud-logging-service/src/main/java/com/yizhi/logging/util/PageInfoUtil.java
+60
-0
cloud-logging-service/src/main/resources/bootstrap.properties
+13
-0
cloud-logging-service/src/test/java/com/yizhi/logging/CloudLoggingApplicationTests.java
+63
-0
pom.xml
+39
-0
No files found.
cloud-logging-api/pom.xml
0 → 100644
View file @
a07d5cf9
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
cloud-logging
</artifactId>
<groupId>
com.yizhi
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
cloud-logging-api
</artifactId>
<dependencies>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-common-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-core
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<scope>
provided
</scope>
</dependency>
<!-- <dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-util</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency> -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<executions>
<execution>
<goals>
<goal>
repackage
</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>
true
</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
cloud-logging-api/src/main/java/com/yizhi/logging/dto/RequestLogDTO.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
dto
;
import
lombok.Builder
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
/**
* @ClassName RequestLogDTO
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/11 15:37
* @Version 1.0
*/
@Builder
@Data
public
class
RequestLogDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
1
;
private
String
id
;
private
String
requestId
;
/********** request *************************/
private
String
requestLocalIp
;
private
String
requestRemoteIp
;
private
String
requestRemoteIpPlace
;
private
String
requestUrl
;
private
String
requestUri
;
private
String
requestMethod
;
private
String
requestParams
;
private
String
requestBody
;
/********** response *************************/
private
Integer
responseStatus4Container
;
private
String
responseBody4Container
;
private
Integer
responseStatus
;
private
String
responseBody
;
private
String
errorMsg
;
/********** common *************************/
private
Long
accountId
;
private
Long
orgId
;
private
Long
siteId
;
private
Long
companyId
;
private
LocalDateTime
startTime
;
private
LocalDateTime
endTime
;
private
Long
millis
;
private
String
terminalType
;
}
cloud-logging-api/src/main/java/com/yizhi/logging/vo/RequestLogPageVO.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Builder
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
/**
* @ClassName RequestLogDTO
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/11 15:37
* @Version 1.0
*/
@Data
@Builder
@ApiModel
(
"请求日志vo"
)
public
class
RequestLogPageVO
{
private
static
final
long
serialVersionUID
=
-
1
;
@ApiModelProperty
(
"主键id"
)
private
String
id
;
@ApiModelProperty
(
"用户名"
)
private
String
username
;
/********** request *************************/
@ApiModelProperty
(
"ip"
)
private
String
ip
;
@ApiModelProperty
(
"描述"
)
private
String
description
;
@ApiModelProperty
(
"终端类型"
)
private
String
terminalType
;
@ApiModelProperty
(
"请求耗时"
)
private
String
millis
;
@ApiModelProperty
(
"请求时间"
)
private
String
requestTime
;
}
cloud-logging-api/src/main/java/com/yizhi/logging/vo/RequestLogViewVO.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Builder
;
import
lombok.Data
;
/**
* @ClassName RequestLogViewVO
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/25 20:00
* @Version 1.0
*/
@Data
@Builder
@ApiModel
(
"请求日志详情vo"
)
public
class
RequestLogViewVO
{
private
static
final
long
serialVersionUID
=
-
1
;
@ApiModelProperty
(
"请求地址"
)
private
String
requestUri
;
@ApiModelProperty
(
"请求方法"
)
private
String
requestMethod
;
@ApiModelProperty
(
"请求参数"
)
private
String
requestParams
;
@ApiModelProperty
(
"请求body"
)
private
String
requestBody
;
@ApiModelProperty
(
"返回状态码"
)
private
Integer
responseStatus
;
@ApiModelProperty
(
"返回body"
)
private
String
responseBody
;
@ApiModelProperty
(
"开始时间"
)
private
String
startTime
;
@ApiModelProperty
(
"结束时间"
)
private
String
endTime
;
}
cloud-logging-service/pom.xml
0 → 100644
View file @
a07d5cf9
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
cloud-logging
</artifactId>
<groupId>
com.yizhi
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
cloud-logging-service
</artifactId>
<dependencies>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-core
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-util
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-logging-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-system-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
org.lionsoul
</groupId>
<artifactId>
ip2region
</artifactId>
<version>
1.7.2
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-jpa
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-mongodb
</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- deploy 时跳过该模块 -->
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-deploy-plugin
</artifactId>
<configuration>
<skip>
true
</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
cloud-logging-service/src/main/java/com/yizhi/logging/CloudLoggingApplication.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.context.annotation.ComponentScans
;
import
org.springframework.data.jpa.repository.config.EnableJpaRepositories
;
import
org.springframework.data.mongodb.repository.config.EnableMongoRepositories
;
@SpringBootApplication
(
exclude
=
DataSourceAutoConfiguration
.
class
)
@ComponentScan
(
"com.yizhi"
)
@EnableFeignClients
(
"com.yizhi"
)
public
class
CloudLoggingApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
CloudLoggingApplication
.
class
,
args
);
}
}
cloud-logging-service/src/main/java/com/yizhi/logging/config/LocalDateTimeConverter.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
config
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.core.convert.converter.Converter
;
import
org.springframework.stereotype.Component
;
import
java.time.Instant
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
/**
* @ClassName RequestlogRepository
* @Description 仅仅对controller层方法参数中的LocalDateTime生效,不适用reqestBody的对象中的属性,对象中的属性可以自定义jackson的转换来实现。
* @Author shengchenglong
* @DATE 2021/1/12 10:48
* @Version 1.0
*/
@Component
public
class
LocalDateTimeConverter
implements
Converter
<
String
,
LocalDateTime
>
{
@Override
public
LocalDateTime
convert
(
String
source
)
{
if
(
StringUtils
.
isBlank
(
source
))
{
return
null
;
}
return
LocalDateTime
.
ofInstant
(
Instant
.
ofEpochMilli
(
Long
.
parseLong
(
source
)),
ZoneId
.
of
(
"+8"
));
}
}
\ No newline at end of file
cloud-logging-service/src/main/java/com/yizhi/logging/config/SwaggerConfig.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
config
;
import
static
com
.
google
.
common
.
base
.
Predicates
.
or
;
import
static
springfox
.
documentation
.
builders
.
PathSelectors
.
regex
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.context.request.async.DeferredResult
;
import
springfox.documentation.builders.ApiInfoBuilder
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
@Configuration
@EnableSwagger2
public
class
SwaggerConfig
{
@Bean
public
Docket
createRestApi
()
{
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
groupName
(
"请求日志服务"
)
.
genericModelSubstitutes
(
DeferredResult
.
class
)
.
genericModelSubstitutes
(
ResponseEntity
.
class
)
.
useDefaultResponseMessages
(
false
)
.
forCodeGeneration
(
true
)
// .pathMapping("/")
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"com.yizhi.logging.controller"
))
.
paths
(
PathSelectors
.
any
())
.
build
()
.
apiInfo
(
apiInfo
());
}
private
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
.
title
(
"请求日志服务"
)
.
version
(
"1.0"
)
//版本
.
build
();
}
}
cloud-logging-service/src/main/java/com/yizhi/logging/controller/manage/RequestLogController.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
controller
.
manage
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.yizhi.logging.domain.RequestLog
;
import
com.yizhi.logging.servicve.AuthResourceService
;
import
com.yizhi.logging.servicve.RequestLogService
;
import
com.yizhi.logging.util.IpUtil
;
import
com.yizhi.logging.util.PageInfoUtil
;
import
com.yizhi.logging.vo.RequestLogPageVO
;
import
com.yizhi.logging.vo.RequestLogViewVO
;
import
com.yizhi.system.application.system.remote.AccountClient
;
import
com.yizhi.system.application.vo.AccountVO
;
import
com.yizhi.util.application.domain.BizResponse
;
import
com.yizhi.util.application.page.PageInfo
;
import
cn.hutool.core.date.DatePattern
;
import
cn.hutool.core.date.DateUtil
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @ClassName RequestLogController
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/13 17:23
* @Version 1.0
*/
@RestController
@RequestMapping
(
"/manage/requestLog"
)
@Api
(
"请求日志API"
)
@Slf4j
public
class
RequestLogController
{
@Autowired
private
RequestLogService
requestLogService
;
@Autowired
private
AuthResourceService
authResourceService
;
@Autowired
private
AccountClient
accountClient
;
@GetMapping
(
"page"
)
@ApiOperation
(
"请求日志分页列表"
)
public
BizResponse
<
PageInfo
<
RequestLogPageVO
>>
page
(
@ApiParam
(
value
=
"搜索时间段 - 起始时间 时间戳"
)
@RequestParam
(
name
=
"startTime"
,
required
=
false
)
LocalDateTime
startTime
,
@ApiParam
(
value
=
"搜索时间段 - 结束时间 时间戳"
)
@RequestParam
(
name
=
"endTime"
,
required
=
false
)
LocalDateTime
endTime
,
@ApiParam
(
value
=
"分页参数 - 第几页,默认1"
)
@RequestParam
(
name
=
"pageNo"
,
required
=
false
,
defaultValue
=
"1"
)
Integer
pageNo
,
@ApiParam
(
value
=
"分页参数 - 每页条数,默认10"
)
@RequestParam
(
name
=
"pageSize"
,
required
=
false
,
defaultValue
=
"10"
)
Integer
pageSize
)
{
log
.
info
(
"=====page request"
);
Page
<
RequestLog
>
page
=
requestLogService
.
page
(
startTime
,
endTime
,
pageNo
,
pageSize
);
List
<
RequestLog
>
list
=
page
.
getContent
();
List
<
RequestLogPageVO
>
voList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
list
.
forEach
(
item
->
{
AccountVO
accountVO
=
accountClient
.
findById
(
item
.
getAccountId
());
voList
.
add
(
RequestLogPageVO
.
builder
()
.
id
(
item
.
getId
())
.
requestTime
(
item
.
getStartTime
().
format
(
DateTimeFormatter
.
ofPattern
(
"yyyy/MM/dd HH:mm:ss"
)))
.
description
(
authResourceService
.
getNameByUrl
(
item
.
getRequestUri
()))
.
ip
(
item
.
getRequestRemoteIp
()
+
" | "
+
IpUtil
.
getHttpCityInfo
(
item
.
getRequestRemoteIp
()))
.
millis
(
Duration
.
between
(
item
.
getStartTime
(),
item
.
getEndTime
()).
toMillis
()
+
"ms"
)
.
terminalType
(
item
.
getTerminalType
())
.
username
(
accountVO
==
null
?
""
:
accountVO
.
getName
())
.
build
()
);
});
}
return
BizResponse
.
ok
(
PageInfoUtil
.
of
(
pageNo
,
pageSize
,
Math
.
toIntExact
(
page
.
getTotalElements
()),
voList
));
}
@GetMapping
(
"view"
)
@ApiOperation
(
"请求日志详情"
)
public
BizResponse
<
RequestLogViewVO
>
view
(
@ApiParam
(
value
=
"id"
)
@RequestParam
(
name
=
"id"
)
String
id
)
{
RequestLog
requestLog
=
requestLogService
.
findById
(
id
);
if
(
requestLog
==
null
)
{
return
BizResponse
.
fail
();
}
RequestLogViewVO
vo
=
RequestLogViewVO
.
builder
()
.
requestBody
(
requestLog
.
getRequestBody
())
.
requestUri
(
requestLog
.
getRequestUri
())
.
requestMethod
(
requestLog
.
getRequestMethod
())
.
requestParams
(
requestLog
.
getRequestParams
())
.
responseBody
(
requestLog
.
getResponseBody
())
.
responseStatus
(
requestLog
.
getResponseStatus
())
.
endTime
(
requestLog
.
getEndTime
().
format
(
DateTimeFormatter
.
ofPattern
(
"yyyy/MM/dd HH:mm:ss"
)))
.
startTime
(
requestLog
.
getStartTime
().
format
(
DateTimeFormatter
.
ofPattern
(
"yyyy/MM/dd HH:mm:ss"
)))
.
build
()
;
return
BizResponse
.
ok
(
vo
);
}
}
cloud-logging-service/src/main/java/com/yizhi/logging/domain/AuthResource.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
domain
;
import
lombok.Data
;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
javax.persistence.Id
;
/**
* @ClassName AuthResource
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/28 14:54
* @Version 1.0
*/
@Data
@Document
(
"auth_resource"
)
public
class
AuthResource
{
private
static
final
long
serialVersionUID
=
-
1
;
@Id
private
String
id
;
private
String
name
;
private
String
url
;
private
String
moduleCode
;
}
cloud-logging-service/src/main/java/com/yizhi/logging/domain/RequestLog.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
domain
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
javax.persistence.Id
;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
lombok.Data
;
/**
* @ClassName RequestLog
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/11 15:37
* @Version 1.0
*/
@Document
(
"requestLog"
)
@Data
public
class
RequestLog
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
1
;
@Id
private
String
id
;
private
String
requestId
;
/********** request *************************/
private
String
requestLocalIp
;
private
String
requestRemoteIp
;
private
String
requestRemoteIpPlace
;
private
String
requestUrl
;
private
String
requestUri
;
private
String
requestMethod
;
private
String
requestParams
;
private
String
requestBody
;
/********** response *************************/
private
Integer
responseStatus4Container
;
private
String
responseBody4Container
;
private
Integer
responseStatus
;
private
String
responseBody
;
private
String
errorMsg
;
/********** common *************************/
private
Long
accountId
;
private
Long
orgId
;
private
Long
siteId
;
private
Long
companyId
;
private
LocalDateTime
startTime
;
private
LocalDateTime
endTime
;
private
Long
millis
;
private
String
terminalType
;
}
cloud-logging-service/src/main/java/com/yizhi/logging/mq/RequestLogListener.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
mq
;
import
com.yizhi.logging.domain.RequestLog
;
import
com.yizhi.logging.dto.RequestLogDTO
;
import
com.yizhi.logging.repository.RequestLogRepository
;
import
com.yizhi.util.application.constant.QueueConstant
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.rabbit.annotation.RabbitHandler
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @ClassName GatewayLogMq
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/12 10:51
* @Version 1.0
*/
@Component
@RabbitListener
(
queues
=
QueueConstant
.
REQUEST_LOG_QUEUE
)
@Slf4j
public
class
RequestLogListener
{
@Autowired
private
RequestLogRepository
requestLogRepository
;
@RabbitHandler
public
void
saveLog
(
RequestLogDTO
requestLogDTO
)
{
log
.
debug
(
"======save log"
);
RequestLog
requestLog
=
new
RequestLog
();
BeanUtils
.
copyProperties
(
requestLogDTO
,
requestLog
);
requestLogRepository
.
save
(
requestLog
);
}
}
\ No newline at end of file
cloud-logging-service/src/main/java/com/yizhi/logging/repository/AuthResourceRepository.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
repository
;
import
com.yizhi.logging.domain.AuthResource
;
import
org.springframework.data.mongodb.repository.MongoRepository
;
/**
* @ClassName RequestlogRepository
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/12 10:48
* @Version 1.0
*/
public
interface
AuthResourceRepository
extends
MongoRepository
<
AuthResource
,
String
>
{
AuthResource
findFirstByUrl
(
String
uri
);
}
cloud-logging-service/src/main/java/com/yizhi/logging/repository/RequestLogRepository.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
repository
;
import
com.yizhi.logging.domain.RequestLog
;
import
org.springframework.data.mongodb.repository.MongoRepository
;
/**
* @ClassName RequestlogRepository
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/12 10:48
* @Version 1.0
*/
public
interface
RequestLogRepository
extends
MongoRepository
<
RequestLog
,
String
>
{
}
cloud-logging-service/src/main/java/com/yizhi/logging/servicve/AuthResourceService.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
servicve
;
/**
* @ClassName AuthResourceService
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/28 14:56
* @Version 1.0
*/
public
interface
AuthResourceService
{
/**
* 根据接口路径获取功能描述
*
* @param uri
* @return
*/
String
getNameByUrl
(
String
uri
);
}
cloud-logging-service/src/main/java/com/yizhi/logging/servicve/AuthResourceServiceImpl.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
servicve
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.yizhi.logging.domain.AuthResource
;
import
com.yizhi.logging.repository.AuthResourceRepository
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @ClassName RequestLogServiceImpl
* @Description 请求日志
* @Author shengchenglong
* @DATE 2021/1/25 10:41
* @Version 1.0
*/
@Service
@Slf4j
public
class
AuthResourceServiceImpl
implements
AuthResourceService
{
@Autowired
private
AuthResourceRepository
authResourceRepository
;
@Override
public
String
getNameByUrl
(
String
uri
)
{
if
(
StringUtils
.
isBlank
(
uri
))
{
return
null
;
}
String
[]
split
=
uri
.
split
(
"/"
);
if
(
split
.
length
>
2
)
{
uri
=
uri
.
substring
(
split
[
1
].
length
()
+
1
);
}
log
.
info
(
"==========uri {}"
,
uri
);
AuthResource
authResource
=
authResourceRepository
.
findFirstByUrl
(
uri
);
if
(
authResource
!=
null
)
{
return
authResource
.
getName
();
}
return
null
;
}
}
cloud-logging-service/src/main/java/com/yizhi/logging/servicve/RequestLogService.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
servicve
;
import
com.yizhi.logging.domain.RequestLog
;
import
org.springframework.data.domain.Page
;
import
java.time.LocalDateTime
;
/**
* @ClassName RequestLogServiceImpl
* @Description 请求日志
* @Author shengchenglong
* @DATE 2021/1/25 10:41
* @Version 1.0
*/
public
interface
RequestLogService
{
/**
* 分页列表
*
* @param startTime
* @param endTime
* @param pageNo
* @param pageSize
* @return
*/
Page
<
RequestLog
>
page
(
LocalDateTime
startTime
,
LocalDateTime
endTime
,
Integer
pageNo
,
Integer
pageSize
);
RequestLog
findById
(
String
id
);
}
cloud-logging-service/src/main/java/com/yizhi/logging/servicve/RequestLogServiceImpl.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
servicve
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.yizhi.logging.domain.RequestLog
;
import
com.yizhi.logging.repository.RequestLogRepository
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @ClassName RequestLogServiceImpl
* @Description 请求日志
* @Author shengchenglong
* @DATE 2021/1/25 10:41
* @Version 1.0
*/
@Service
@Transactional
@Slf4j
public
class
RequestLogServiceImpl
implements
RequestLogService
{
@Autowired
private
MongoTemplate
mongoTemplate
;
@Autowired
private
RequestLogRepository
requestLogRepository
;
@Override
public
Page
<
RequestLog
>
page
(
LocalDateTime
startTime
,
LocalDateTime
endTime
,
Integer
pageNo
,
Integer
pageSize
)
{
log
.
info
(
"start {} end {}"
,
startTime
,
endTime
);
Sort
sort
=
Sort
.
by
(
"startTime"
).
descending
();
Pageable
pageable
=
PageRequest
.
of
(
pageNo
-
1
,
pageSize
,
sort
);
Criteria
criteria
=
new
Criteria
();
if
(
startTime
!=
null
&&
endTime
!=
null
)
{
criteria
.
andOperator
(
Criteria
.
where
(
"startTime"
).
gte
(
startTime
),
Criteria
.
where
(
"startTime"
).
lte
(
endTime
));
}
else
if
(
startTime
!=
null
)
{
criteria
.
and
(
"startTime"
).
gte
(
startTime
);
}
else
if
(
endTime
!=
null
){
criteria
.
and
(
"startTime"
).
lte
(
endTime
);
}
Query
query
=
Query
.
query
(
criteria
);
long
t1
=
System
.
currentTimeMillis
();
// long count = mongoTemplate.count(query, RequestLog.class);
long
count
=
500000
;
long
t2
=
System
.
currentTimeMillis
();
log
.
info
(
"total num {},spend {}"
,
count
,
t2
-
t1
);
query
.
with
(
pageable
);
List
<
RequestLog
>
list
=
mongoTemplate
.
find
(
query
,
RequestLog
.
class
);
long
t3
=
System
.
currentTimeMillis
();
log
.
info
(
"page query spend {}"
,
t3
-
t2
);
return
new
PageImpl
(
list
,
pageable
,
count
);
}
@Override
public
RequestLog
findById
(
String
id
)
{
return
requestLogRepository
.
findById
(
id
).
get
();
}
}
cloud-logging-service/src/main/java/com/yizhi/logging/util/IpUtil.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
util
;
import
cn.hutool.http.HttpUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.yizhi.core.application.cache.RedisCache
;
import
lombok.Setter
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.StringUtils
;
import
javax.annotation.PostConstruct
;
import
javax.script.ScriptEngine
;
import
javax.script.ScriptEngineManager
;
import
javax.script.ScriptException
;
/**
* @ClassName IpUtil
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/25 20:33
* @Version 1.0
*/
@Component
@ConditionalOnBean
(
RedisCache
.
class
)
public
class
IpUtil
{
private
static
final
String
IP_URL_PCONLINE
=
"http://whois.pconline.com.cn/ipJson.jsp?ip=%s&json=true"
;
private
static
final
String
IP_URL_126
=
"https://ip.ws.126.net/ipquery?ip=%s"
;
private
static
final
String
IP_URL_IPAPI
=
"http://ip-api.com/json/%s?lang=zh-CN"
;
private
static
final
String
REDIS_CACHE_KEY
=
"IP_ADDR"
;
private
static
RedisCache
redisCache
;
@Autowired
private
RedisCache
redisCacheTmp
;
@PostConstruct
public
void
init
()
{
IpUtil
.
redisCache
=
redisCacheTmp
;
}
/**
* 根据ip获取详细地址
*/
public
static
String
getHttpCityInfo
(
String
ip
)
{
String
addr
=
getFromRedis
(
ip
);
if
(!
StringUtils
.
isEmpty
(
addr
))
{
return
addr
;
}
addr
=
getFromPconline
(
ip
);
if
(
StringUtils
.
isEmpty
(
addr
))
{
addr
=
getFrom126
(
ip
);
}
if
(
StringUtils
.
isEmpty
(
addr
))
{
addr
=
getFromIpApi
(
ip
);
}
set2Redis
(
ip
,
addr
);
return
addr
;
}
private
static
String
getFromPconline
(
String
ip
)
{
try
{
String
api
=
String
.
format
(
IP_URL_PCONLINE
,
ip
);
JSONObject
json
=
JSON
.
parseObject
(
HttpUtil
.
get
(
api
));
return
String
.
valueOf
(
json
.
get
(
"addr"
));
}
catch
(
Exception
e
)
{
return
null
;
}
}
private
static
String
getFrom126
(
String
ip
)
{
try
{
String
api
=
String
.
format
(
IP_URL_126
,
ip
);
String
res
=
HttpUtil
.
get
(
api
);
//本质上获得的是Rhino的接口在 JDK6.0后被集成 详细调用方法可以查看rhino的官网
//获取脚本引擎管理器 接着获得 对应引擎的对象
ScriptEngineManager
manager
=
new
ScriptEngineManager
();
ScriptEngine
scriptEngine
=
manager
.
getEngineByName
(
"javascript"
);
scriptEngine
.
eval
(
res
);
String
addr
=
String
.
valueOf
(
scriptEngine
.
get
(
"lo"
))
+
" | "
+
String
.
valueOf
(
scriptEngine
.
get
(
"lo"
));
return
addr
;
}
catch
(
ScriptException
e
)
{
return
null
;
}
}
private
static
String
getFromIpApi
(
String
ip
)
{
try
{
String
api
=
String
.
format
(
IP_URL_IPAPI
,
ip
);
String
res
=
HttpUtil
.
get
(
api
);
JSONObject
jsonObject
=
JSON
.
parseObject
(
res
);
return
jsonObject
.
get
(
"city"
)
+
" | "
+
jsonObject
.
get
(
"isp"
);
}
catch
(
Exception
e
)
{
return
null
;
}
}
private
static
String
getFromRedis
(
String
ip
)
{
Object
object
=
redisCache
.
hget
(
REDIS_CACHE_KEY
,
ip
);
if
(
object
==
null
)
{
return
null
;
}
return
String
.
valueOf
(
object
);
}
public
static
void
set2Redis
(
String
ip
,
String
addr
)
{
redisCache
.
hset
(
REDIS_CACHE_KEY
,
ip
,
addr
,
24
*
60
*
60
);
}
}
cloud-logging-service/src/main/java/com/yizhi/logging/util/ListUtil.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
util
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.beans.BeanUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @ClassName ListUtil
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/25 17:57
* @Version 1.0
*/
public
class
ListUtil
{
}
cloud-logging-service/src/main/java/com/yizhi/logging/util/PageInfoUtil.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
.
util
;
import
com.yizhi.util.application.page.PageInfo
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.data.domain.Page
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @ClassName PageInfoUtil
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/25 11:11
* @Version 1.0
*/
public
class
PageInfoUtil
{
public
static
PageInfo
of
(
Integer
pageNo
,
Integer
pageSize
,
Integer
total
,
List
list
)
{
PageInfo
pageInfo
=
new
PageInfo
();
pageInfo
.
setPageNo
(
pageNo
);
pageInfo
.
setPageSize
(
pageSize
);
pageInfo
.
setPageRecords
(
total
);
pageInfo
.
setRecords
(
list
);
return
pageInfo
;
}
public
static
PageInfo
of
(
Page
page
)
{
PageInfo
pageInfo
=
new
PageInfo
();
pageInfo
.
setPageNo
(
page
.
getNumber
()
+
1
);
pageInfo
.
setPageSize
(
page
.
getSize
());
pageInfo
.
setPageRecords
(
Math
.
toIntExact
(
page
.
getTotalElements
()));
pageInfo
.
setRecords
(
page
.
getContent
());
return
pageInfo
;
}
public
static
PageInfo
transfer
(
PageInfo
originPage
,
Class
destClass
)
{
if
(
originPage
==
null
||
CollectionUtils
.
isEmpty
(
originPage
.
getRecords
()))
{
return
originPage
;
}
List
list
=
originPage
.
getRecords
();
List
destList
=
new
ArrayList
(
list
.
size
());
try
{
Object
destObj
;
for
(
Object
origin
:
list
)
{
destObj
=
destClass
.
newInstance
();
BeanUtils
.
copyProperties
(
origin
,
destObj
);
destList
.
add
(
destObj
);
}
}
catch
(
InstantiationException
e
)
{
e
.
printStackTrace
();
}
catch
(
IllegalAccessException
e
)
{
e
.
printStackTrace
();
}
originPage
.
setRecords
(
destList
);
return
originPage
;
}
}
cloud-logging-service/src/main/resources/bootstrap.properties
0 → 100644
View file @
a07d5cf9
#server.port=35100
spring.application.name
=
cloud-logging
ACTIVE
=
${spring.profiles.active}
spring.profiles.active
=
dev
# nacos
spring.cloud.nacos.config.shared-dataids
=
common-${spring.profiles.active}.properties
spring.cloud.nacos.config.namespace
=
${spring.profiles.active}
spring.cloud.nacos.config.prefix
=
${spring.application.name}
spring.cloud.nacos.config.file-extension
=
properties
spring.cloud.nacos.config.server-addr
=
192.168.1.22:3333,192.168.1.22:4444,192.168.1.22:5555
spring.jpa.show-sql
=
true
\ No newline at end of file
cloud-logging-service/src/test/java/com/yizhi/logging/CloudLoggingApplicationTests.java
0 → 100644
View file @
a07d5cf9
package
com
.
yizhi
.
logging
;
import
com.yizhi.logging.domain.AuthResource
;
import
com.yizhi.logging.repository.AuthResourceRepository
;
import
com.yizhi.logging.repository.RequestLogRepository
;
import
com.yizhi.logging.servicve.RequestLogService
;
import
com.yizhi.util.application.page.PageInfo
;
import
org.junit.jupiter.api.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.data.domain.Page
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.time.LocalDateTime
;
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
class
CloudLoggingApplicationTests
{
@Autowired
private
RequestLogService
requestLogService
;
@Autowired
private
RequestLogRepository
requestLogRepository
;
@Autowired
private
AuthResourceRepository
authResourceRepository
;
@Test
void
contextLoads
()
{
// Page page = requestLogService.page(
// LocalDateTime.of(2020, 1, 1, 0, 0, 0),
// LocalDateTime.of(2021, 2, 1, 0, 0, 0),
// 1, 10
// );
// System.out.println(page);
//
// page = requestLogService.page(null, null, 1, 100);
//
// RequestLog requestLog = requestLogRepository.findFirstByRequestUriEquals("http://linshi-gateway/web-student/student/siteLanguage/record/international/selectLanguage/get");
// System.out.println(requestLog);
// Page p = requestLogRepository.findAllByStartTimeAfterAndEndTimeBefore(
// LocalDateTime.of(2021, 1, 1, 0, 0, 0),
// LocalDateTime.of(2021, 2, 1, 0, 0, 0),
// PageRequest.of(0, 100));
// System.out.println(p);
// Page p = requestLogRepository.findAllByStartTimeBetween(Range
// .from(Range.Bound.inclusive(DateUtil.parse("2020-01-01").getTime()))
// .to(Range.Bound.inclusive(DateUtil.parse("2020-02-01").getTime())), PageRequest.of(0, 100));
// System.out.println(p);
// Optional<RequestLog> optionalRequestLog = requestLogRepository.findById("5ffeb2b008d4e03c513ec2fe");
// requestLog = optionalRequestLog.get();
// System.out.println(requestLog);
AuthResource
authResource
=
authResourceRepository
.
findFirstByUrl
(
"/manage/role/manager/edit"
);
System
.
out
.
println
(
authResource
);
}
}
pom.xml
0 → 100644
View file @
a07d5cf9
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<packaging>
pom
</packaging>
<modules>
<module>
cloud-logging-api
</module>
<module>
cloud-logging-service
</module>
</modules>
<parent>
<groupId>
com.yizhi
</groupId>
<artifactId>
wmy-parent
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<relativePath/>
</parent>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-logging
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<name>
cloud-logging
</name>
<repositories>
<repository>
<!-- <id>wmy4.0</id>
<url>http://mvn.km365.pw/nexus/content/groups/wmy4.0-group/</url> -->
<id>
yzkj-my-4.0-group
</id>
<url>
http://mvn.km365.pw/nexus/content/groups/yzkj-wmy-4.0-group/
</url>
<releases>
<enabled>
true
</enabled>
</releases>
<snapshots>
<enabled>
true
</enabled>
</snapshots>
</repository>
</repositories>
</project>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment