Skip to content

Commit e3c5b3c

Browse files
author
vison.cao
committed
log and responsse
1 parent 49e0c1c commit e3c5b3c

File tree

11 files changed

+315
-12
lines changed

11 files changed

+315
-12
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
</properties>
1818

1919
<dependencies>
20+
<dependency>
21+
<groupId>com.google.code.gson</groupId>
22+
<artifactId>gson</artifactId>
23+
<version>2.8.6</version>
24+
<type>jar</type>
25+
</dependency>
2026
<dependency>
2127
<groupId>javax.websocket</groupId>
2228
<artifactId>javax.websocket-api</artifactId>
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.vison.webmvc;
2+
3+
/**
4+
*
5+
* @author vison.cao <visonforcoding@gmail.com>
6+
*/
7+
import com.vison.webmvc.config.App;
8+
import java.util.Optional;
9+
import java.util.HashMap;
10+
11+
/**
12+
*
13+
* @author vison.cao <vison.cao@huolala.cn>
14+
*/
15+
public class Response {
16+
17+
private int code;
18+
private String msg;
19+
private Object data;
20+
private String _uniq_req_no = App._uniq_req_no;
21+
22+
public Response(int code, String msg, Object data) {
23+
this.code = code;
24+
this.msg = msg;
25+
this.data = data;
26+
if (data == null) {
27+
this.data = new HashMap<>();
28+
}
29+
if (data instanceof Optional) {
30+
Optional d = (Optional) data;
31+
if (!d.isPresent()) {
32+
this.data = new HashMap();
33+
}
34+
}
35+
}
36+
37+
public Response(int code, String msg) {
38+
this.code = code;
39+
this.msg = msg;
40+
Object d = new HashMap<>();
41+
this.data = d;
42+
}
43+
44+
public void setCode(int code) {
45+
this.code = code;
46+
}
47+
48+
public void setMsg(String msg) {
49+
this.msg = msg;
50+
}
51+
52+
public void setData(Object data) {
53+
this.data = data;
54+
}
55+
56+
public int getCode() {
57+
return code;
58+
}
59+
60+
public String getMsg() {
61+
return msg;
62+
}
63+
64+
public Object getData() {
65+
return data;
66+
}
67+
68+
public String getUniq_req_no() {
69+
return App._uniq_req_no;
70+
}
71+
72+
public void setUniq_req_no(String _uniq_req_no) {
73+
this._uniq_req_no = _uniq_req_no;
74+
}
75+
76+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package com.vison.webmvc;
7+
8+
/**
9+
*
10+
* @author vison.cao <visonforcoding@gmail.com>
11+
*/
12+
public class ResponseCode {
13+
14+
public static Integer success = 0;
15+
public static Integer dbInsertFail = 101;
16+
public static Integer parametrErrror = 510;
17+
18+
/**
19+
* 未登录
20+
*/
21+
public static Integer unLogin = 401;
22+
23+
public static Integer loginFail = 402;
24+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.vison.webmvc.config;
2+
3+
/**
4+
*
5+
* @author vison.cao <visonforcoding@gmail.com>
6+
*/
7+
public class App {
8+
9+
public static final String SESSION_USER = "user"; // 用户对象
10+
public static String _uniq_req_no = null;
11+
public static String OrderNoIncKey = ":order:no";
12+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package com.vison.webmvc.config;
2+
3+
import org.apache.logging.log4j.Logger;
4+
import org.apache.logging.log4j.LogManager;
5+
6+
/**
7+
*
8+
* @author vison.cao <visonforcoding@gmail.com>
9+
*/
10+
public class Log {
11+
12+
private static String msgTraceNo;
13+
14+
public static void setMsgTraceNo(String msgTraceNo) {
15+
Log.msgTraceNo = msgTraceNo;
16+
}
17+
18+
public static StackTraceElement findCaller() {
19+
// 获取堆栈信息
20+
StackTraceElement[] callStack = Thread.currentThread().getStackTrace();
21+
if (null == callStack) {
22+
return null;
23+
}
24+
25+
// 最原始被调用的堆栈信息
26+
StackTraceElement caller = null;
27+
// 日志类名称
28+
String logClassName = Log.class.getName();
29+
// 循环遍历到日志类标识
30+
boolean isEachLogClass = false;
31+
32+
// 遍历堆栈信息,获取出最原始被调用的方法信息
33+
for (StackTraceElement s : callStack) {
34+
// 遍历到日志类
35+
if (logClassName.equals(s.getClassName())) {
36+
isEachLogClass = true;
37+
}
38+
// 下一个非日志类的堆栈,就是最原始被调用的方法
39+
if (isEachLogClass) {
40+
if (!logClassName.equals(s.getClassName())) {
41+
isEachLogClass = false;
42+
caller = s;
43+
break;
44+
}
45+
}
46+
}
47+
48+
return caller;
49+
}
50+
51+
private static Logger logger() {
52+
// 最原始被调用的堆栈对象
53+
StackTraceElement caller = findCaller();
54+
if (null == caller) {
55+
return LogManager.getLogger(Log.class);
56+
}
57+
Logger log = LogManager.getLogger(caller.getClassName() + "." + caller.getMethodName() + "() Line: " + caller.getLineNumber());
58+
59+
return log;
60+
}
61+
62+
public static void debug(String msg, Object o) {
63+
logger().debug(String.format("%s %s %s", msgTraceNo, msg, o.toString()));
64+
}
65+
66+
public static void debug(String msg) {
67+
logger().debug(String.format("%s %s", msgTraceNo, msg));
68+
}
69+
70+
public static void error(String msg, Object o) {
71+
logger().error(String.format("%s %s %s", msgTraceNo, msg, o.toString()));
72+
}
73+
74+
public static void error(String msg) {
75+
logger().error(String.format("%s %s", msgTraceNo, msg));
76+
}
77+
78+
public static void info(String msg, Object o) {
79+
logger().info(String.format("%s %s %s", msgTraceNo, msg, o.toString()));
80+
}
81+
82+
public static void info(String msg) {
83+
logger().info(String.format("%s %s", msgTraceNo, msg));
84+
}
85+
86+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.vison.webmvc.config;
2+
3+
import java.util.UUID;
4+
import javax.servlet.ServletRequestEvent;
5+
import javax.servlet.ServletRequestListener;
6+
import javax.servlet.annotation.WebListener;
7+
8+
/**
9+
* Web application lifecycle listener.
10+
*
11+
* @author vison.cao <visonforcoding@gmail.com>
12+
*/
13+
@WebListener
14+
public class ServletListener implements ServletRequestListener {
15+
16+
@Override
17+
public void requestDestroyed(ServletRequestEvent sre) {
18+
}
19+
20+
@Override
21+
public void requestInitialized(ServletRequestEvent sre) {
22+
App._uniq_req_no = UUID.randomUUID().toString();
23+
Log.setMsgTraceNo(App._uniq_req_no);
24+
}
25+
}
Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.vison.webmvc.controller;
22

3+
import com.vison.webmvc.entity.User;
34
import com.vison.webmvc.framework.GetMapping;
5+
import com.vison.webmvc.Response;
6+
import com.vison.webmvc.config.Log;
47
import javax.servlet.http.HttpServletRequest;
58
import javax.servlet.http.HttpServletResponse;
69

@@ -9,14 +12,23 @@
912
* @author vison.cao <visonforcoding@gmail.com>
1013
*/
1114
public class UserController {
12-
15+
1316
public UserController() {
1417
}
15-
18+
1619
@GetMapping(path = "/user/profile")
1720
public String profile(HttpServletRequest request, HttpServletResponse response) {
1821
System.out.print(request.getCookies());
1922
return "i am user profile";
2023
}
21-
24+
25+
@GetMapping(path = "/user")
26+
public Response user() {
27+
User user = new User();
28+
user.setEmail("visonforcoding@gmail.com");
29+
user.setName("曹麦穗");
30+
Log.debug("request user", user);
31+
return new Response(0, "获取成功", user);
32+
}
33+
2234
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.vison.webmvc.entity;
2+
3+
/**
4+
*
5+
* @author vison.cao <visonforcoding@gmail.com>
6+
*/
7+
public class User {
8+
9+
private int id;
10+
11+
private String name;
12+
13+
private String email;
14+
15+
public int getId() {
16+
return id;
17+
}
18+
19+
public void setId(int id) {
20+
this.id = id;
21+
}
22+
23+
public String getName() {
24+
return name;
25+
}
26+
27+
public void setName(String name) {
28+
this.name = name;
29+
}
30+
31+
public String getEmail() {
32+
return email;
33+
}
34+
35+
public void setEmail(String email) {
36+
this.email = email;
37+
}
38+
39+
}

src/main/java/com/vison/webmvc/framework/DispatchServlet.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.vison.webmvc.framework;
22

3+
import com.google.gson.Gson;
4+
import com.vison.webmvc.config.Log;
35
import com.vison.webmvc.framework.exception.NullRouteException;
46
import java.io.IOException;
57
import java.lang.reflect.Method;
@@ -16,8 +18,6 @@
1618
import org.reflections.util.ClasspathHelper;
1719
import org.reflections.util.ConfigurationBuilder;
1820
import org.reflections.util.FilterBuilder;
19-
import org.apache.logging.log4j.Logger;
20-
import org.apache.logging.log4j.LogManager;
2121

2222
/**
2323
*
@@ -26,8 +26,6 @@
2626
@WebServlet(name = "DispatchServlet", urlPatterns = {"/"})
2727
public class DispatchServlet extends HttpServlet {
2828

29-
private static final Logger log = LogManager.getLogger(DispatchServlet.class.getName());
30-
3129
@Override
3230
public void init() throws ServletException {
3331
ViewEngine.load(this.getServletContext());
@@ -46,6 +44,7 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
4644
res = "404 Not Found";
4745
}
4846
String responseBody = this.handInvokeRes(res);
47+
Log.info("返回信息", responseBody);
4948
resp.getWriter().write(responseBody);
5049
resp.getWriter().flush();
5150
}
@@ -58,7 +57,7 @@ private Object dispatch(String path, HttpServletRequest request, HttpServletResp
5857
Object[] arguments = new Object[parameters.length];
5958
for (int i = 0; i < parameters.length; i++) {
6059
Parameter parameter = parameters[i];
61-
log.info(parameter.getType());
60+
Log.info("参数类型", parameter.getType());
6261
Class<?> parameterClass = parameter.getType();
6362
String parameterName = parameter.getName();
6463
if (parameterClass == HttpServletRequest.class) {
@@ -84,7 +83,7 @@ private Object dispatch(String path, HttpServletRequest request, HttpServletResp
8483
obj = method.getDeclaringClass().getDeclaredConstructor().newInstance();
8584
res = method.invoke(obj, arguments);
8685
} catch (Exception e) {
87-
log.error("方法invoke失败", e);
86+
Log.error("方法invoke失败", e);
8887
}
8988
return res;
9089
}
@@ -94,11 +93,19 @@ private String getOrDefault(HttpServletRequest request, String name, String defa
9493
return s == null ? defaultValue : s;
9594
}
9695

96+
/**
97+
* 处理actionx
98+
*
99+
* @param obj
100+
* @return
101+
*/
97102
private String handInvokeRes(Object obj) {
98103
if (obj instanceof String) {
99104
return (String) obj;
100105
}
101-
return "";
106+
Gson gson = new Gson();
107+
String jsonRes = gson.toJson(obj);
108+
return jsonRes;
102109
}
103110

104111
private Method getMaps(String path) throws NullRouteException {

0 commit comments

Comments
 (0)