背景:为何从这个最简单的 例子写起呢?
那是因为我们的管理后台之类的都是别人写的,我也听说了大家说:只用Post请求就足够了,但是却发现,在浏览器中测试时,默认是GET请求,如果直接写的@PostMapping,则提示此请求不支持。
有了SpringBoot,开发部署一个Web项目是非常加单的。对比ASP.Net Core 和go的繁琐(因为很多东西需要自己从头做),SpringBoot是做到了开箱即用,我们引入需要的starter,使用依赖注入即可引入我们需要的service类,结合dubbo,我们可以轻松的实现微服务(也就是这个接口的实现是别的服务做的)。不管是同步还是异步,都是非常的简单的。
1)我们的游戏服务器是从“平台”账号注册开始的,那么我们就从这里开始:
package com.example.springbootdemo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/account")
public class AccountController {
/**
* @param username
* @param password
*/
@RequestMapping("/register")
public void register(String username, String password) {
log.info("新用户注册,username={}, password={}", username, password);
}
}
/*
2024-01-11T11:10:10.421+08:00 INFO 32040 --- [nio-8080-exec-5] c.e.s.controller.AccountController : 新用户注册,username="xx", password="aa"
2024-01-11T11:10:10.647+08:00 INFO 32040 --- [nio-8080-exec-6] c.e.s.controller.AccountController : 新用户注册,username="xx", password="aa"
2024-01-11T11:10:10.850+08:00 INFO 32040 --- [nio-8080-exec-7] c.e.s.controller.AccountController : 新用户注册,username="xx", password="aa"
2024-01-11T11:10:11.014+08:00 INFO 32040 --- [nio-8080-exec-8] c.e.s.controller.AccountController : 新用户注册,username="xx", password="aa"
2024-01-11T11:10:11.187+08:00 INFO 32040 --- [nio-8080-exec-2] c.e.s.controller.AccountController : 新用户注册,username="xx", password="aa"
2024-01-11T11:10:11.362+08:00 INFO 32040 --- [io-8080-exec-10] c.e.s.controller.AccountController : 新用户注册,username="xx", password="aa"
2024-01-11T11:10:13.562+08:00 INFO 32040 --- [nio-8080-exec-9] c.e.s.controller.AccountController : 新用户注册,username="xx", password="aa"
2024-01-11T11:15:47.588+08:00 INFO 32040 --- [nio-8080-exec-5] c.e.s.controller.AccountController : 新用户注册,username="xx", password="aa"
*/
2)日志肯定是少不了的
在pom.xml中引入下logback日志包 // 注意:不要带版本号,不然打包时就会提示logback版本号冲突了,我们使用继承过来的版本即可
org.slf4j
slf4j-api
org.slf4j
jcl-over-slf4j
ch.qos.logback
logback-classic
ch.qos.logback
logback-core
接着把zfoo的logback.xml粘贴过来放到resources下面即可:
${PATTERN_CONSOLE}
UTF-8
${LOG_HOME}/debug.log
false
${PATTERN_FILE}
UTF-8
debug
ACCEPT
DENY
${LOG_HOME}/info.log
${LOG_HOME}/info.%d{yyyy-MM-dd}.%i.log
100MB
30
40GB
${PATTERN_FILE}
UTF-8
info
0
512
${LOG_HOME}/error.log
${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log
100MB
30
20GB
${PATTERN_FILE}
UTF-8
error
ACCEPT
DENY
3)结合lombok的@Slf4j注解,我们可以很轻松打印的日志(想想go或者asp.net core的话,自己不是太熟悉,还是得折腾半天)
4)测试
浏览器中发起下请求:
http://localhost:8080/account/register?username="xx"&password="aa"
注意从浏览器中粘贴下来可能不是这样子了,这是因为进行了编码
http://localhost:8080/account/register?username=%22xx%22&password=%22aa%22
观察下idea下的日志,可以看出来这个日志是非常清楚的
时间,日志级别,线程,日志是从哪个类打印出的,跳转,信息等非常清楚
5)打包也很容易了开箱即用。
-------------另外一个用到的-----------
%d{yyyy-MM-dd HH:mm:ss} [%highlight(%-5level)] [%thread] %logger{30}.%M\(%F:%L\) - %msg%n
${LOG_DIR}/game.log
${LOG_DIR}/game.%d{yyyyMMdd}.log
30
[%-5level][%d{HH:mm:ss.SSS}][%thread][%logger][%L] - %msg%n
${LOG_DIR}/monitor.log
${LOG_DIR}/monitor.%d{yyyyMMdd}.log
30
[%-5level][%d{HH:mm:ss.SSS}][%thread][%logger][%L] - %msg%n
${LOG_DIR}/game-perf.log
${LOG_DIR}/game-perf.%d{yyyyMMdd}.log
30
%msg%n%ex
60000
1024
3000
1024
3000