当前位置: 首页 > news >正文

建设部监理网站官网网络营销的核心是用户吗

建设部监理网站官网,网络营销的核心是用户吗,如何seo推广,哈尔滨网站设计SpringBoot使用log4j2 在Spring Boot中所有的starter 都是基于spring-boot-starter-logging的&#xff0c;默认使用Logback。使用Log4j2的话&#xff0c;你需要排除 spring-boot-starter-logging 的依赖&#xff0c;并添加 spring-boot-starter-log4j2的依赖。 配置依赖 <…

SpringBoot使用log4j2

在Spring Boot中所有的starter 都是基于spring-boot-starter-logging的,默认使用Logback。使用Log4j2的话,你需要排除 spring-boot-starter-logging 的依赖,并添加 spring-boot-starter-log4j2的依赖。

配置依赖

        <!-- 自定义验证注解 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>

OpenFeign日志配置

feign的配置类

public class BaseFeignConfig {@BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL;}
}

单个服务应用配置类

@FeignClient(value = "crm-base",configuration = BaseFeignConfig.class )
public interface BaseFeign {@GetMapping("/getAppInfo")ResponseEx<Object> getAppInfo(@RequestParam(name = "appId") Integer appId);
}

日志级别配置

logging.level.com.charles.feign.BaseFeign=debug

打印效果

23-04-18 15:01:04 DEBUG http-nio-8080-exec-1 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] ---> GET http://crm-base/getAppInfo?appId=-1 HTTP/1.1 
2023-04-18 15:01:04 DEBUG http-nio-8080-exec-1 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] ---> END HTTP (0-byte body) 
2023-04-18 15:02:37 DEBUG http-nio-8080-exec-3 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] ---> END HTTP (0-byte body) 
2023-04-18 15:02:38 DEBUG http-nio-8080-exec-3 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] <--- HTTP/1.1 200 (205ms) 
2023-04-18 15:02:38 DEBUG http-nio-8080-exec-3 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] connection: keep-alive 
2023-04-18 15:02:38 DEBUG http-nio-8080-exec-3 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] content-type: application/json 
2023-04-18 15:02:38 DEBUG http-nio-8080-exec-3 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] date: Tue, 18 Apr 2023 07:02:38 GMT 
2023-04-18 15:02:38 DEBUG http-nio-8080-exec-3 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] keep-alive: timeout=60 
2023-04-18 15:02:38 DEBUG http-nio-8080-exec-3 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] transfer-encoding: chunked 
2023-04-18 15:02:38 DEBUG http-nio-8080-exec-3 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo]  
2023-04-18 15:02:38 DEBUG http-nio-8080-exec-3 crm-emergency traceId- userId- com.linjiu.feign.BaseFeign.log:72:[BaseFeign#getAppInfo] {"data":[{ ...

源码解析

SynchronousMethodHandler#executeAndDecode,发送请求。如果日志级别不是Logger.Level.NONE,打印日志。

  Object executeAndDecode(RequestTemplate template, Options options) throws Throwable {Request request = targetRequest(template);if (logLevel != Logger.Level.NONE) {logger.logRequest(metadata.configKey(), logLevel, request);}Response response;long start = System.nanoTime();try {response = client.execute(request, options);// ensure the request is set. TODO: remove in Feign 12response = response.toBuilder().request(request).requestTemplate(template).build();} catch (IOException e) {if (logLevel != Logger.Level.NONE) {logger.logIOException(metadata.configKey(), logLevel, e, elapsedTime(start));}throw errorExecuting(request, e);}long elapsedTime = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start);if (decoder != null)return decoder.decode(response, metadata.returnType());CompletableFuture<Object> resultFuture = new CompletableFuture<>();asyncResponseHandler.handleResponse(resultFuture, metadata.configKey(), response,metadata.returnType(),elapsedTime);try {if (!resultFuture.isDone())throw new IllegalStateException("Response handling not done");return resultFuture.join();} catch (CompletionException e) {Throwable cause = e.getCause();if (cause != null)throw cause;throw e;}}

Slf4jLogger#logRequest,判断是否允许debug日志输出

    protected void logRequest(String configKey, Level logLevel, Request request) {if (this.logger.isDebugEnabled()) {super.logRequest(configKey, logLevel, request);}}

Logger#logRequest,打印具体的请求日志。

  protected void logRequest(String configKey, Level logLevel, Request request) {log(configKey, "---> %s %s HTTP/1.1", request.httpMethod().name(), request.url());if (logLevel.ordinal() >= Level.HEADERS.ordinal()) {for (String field : request.headers().keySet()) {for (String value : valuesOrEmpty(request.headers(), field)) {log(configKey, "%s: %s", field, value);}}int bodyLength = 0;if (request.body() != null) {bodyLength = request.length();if (logLevel.ordinal() >= Level.FULL.ordinal()) {String bodyText =request.charset() != null? new String(request.body(), request.charset()): null;log(configKey, ""); // CRLFlog(configKey, "%s", bodyText != null ? bodyText : "Binary data");}}log(configKey, "---> END HTTP (%s-byte body)", bodyLength);}}

AsyncResponseHandler#handleResponse,处理响应。打印日志用的是logger.logAndRebufferResponse

  void handleResponse(CompletableFuture<Object> resultFuture,String configKey,Response response,Type returnType,long elapsedTime) {// copied fairly liberally from SynchronousMethodHandlerboolean shouldClose = true;try {if (logLevel != Level.NONE) {response = logger.logAndRebufferResponse(configKey, logLevel, response,elapsedTime);}} catch (final Exception e) {resultFuture.completeExceptionally(e);}}

Logger实体类创建,FeignClientFactoryBean#feign创建Feign。

    protected Builder feign(FeignContext context) {FeignLoggerFactory loggerFactory = (FeignLoggerFactory)this.get(context, FeignLoggerFactory.class);Logger logger = loggerFactory.create(this.type);Builder builder = ((Builder)this.get(context, Builder.class)).logger(logger).encoder((Encoder)this.get(context, Encoder.class)).decoder((Decoder)this.get(context, Decoder.class)).contract((Contract)this.get(context, Contract.class));this.configureFeign(context, builder);return builder;}

DefaultFeignLoggerFactory#create,创建日志类。

    public Logger create(Class<?> type) {return (Logger)(this.logger != null ? this.logger : new Slf4jLogger(type));}

使用slf4j进行创建,类型是com.linjiu.feign.BaseFeign。这也解释了需要配置logging.level.com.charles.feign.BaseFeign=debug才能输出日志。有时间专门来一篇博客,看看slf4j日志的生效逻辑和Springboot日志生效的逻辑。

    public Slf4jLogger(Class<?> clazz) {this(LoggerFactory.getLogger(clazz));}

在这里插入图片描述

http://www.mmbaike.com/news/74852.html

相关文章:

  • 政府网站建设与对策分析推广一个产品有哪些方式
  • 如何做产品众筹网站it菜鸡网seo
  • 电子商务网站规划书东莞做网站的公司有哪些
  • 网站建设与制作教程北华大学网络营销公司网络推广
  • 青海省住房和建设厅网站企业站seo
  • 连城县建设局网站如何优化seo技巧
  • 北京市网站设计公司网址杭州市优化服务
  • 网站项目建设策划书昆山网站建设公司
  • 哈尔滨网站建设公司oeminc湛江百度seo公司
  • aspnet网站开发技术网络营销企业网站推广
  • 学网站建设能赚钱吗快速建站教程
  • 做设计挣钱的网站公司注册流程
  • 商务网站建设方案搜索引擎优化的内部优化
  • 湖北建设银行招标在哪个网站看友情链接只有链接
  • 澄海网站建设公司舆情监测系统排名
  • 长沙网站创建seo网络推广
  • 网站怎么做才有百度权重成都计算机培训机构排名前十
  • 个人网站推广方法百度一下官网首页百度
  • 品牌建设 政府做什么网站如何进行优化
  • iis7.0 asp网站配置seo工作流程图
  • 织梦技术网站模版网络竞价推广托管公司
  • app和微网站的区别微信指数官网
  • 网站定位分析是什么如何快速优化网站排名
  • 宁夏手机网站建设免费大数据分析网站
  • 只做av搬运工的网站聊城网站推广公司
  • wordpress个人网站模板seo运营专员
  • 海口专业网站搭建批发自己怎么创建网站
  • 软件开发兼职网站营销推广seo
  • 开封 网站建设站内推广有哪些方式
  • 建网站商城在哪做网络营销中的seo是指