hotelme-nuxt-logger 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.cjs
CHANGED
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
declare module 'h3' {
|
|
2
2
|
interface H3EventContext {
|
|
3
3
|
reqid?: string;
|
|
4
|
-
userId?: string;
|
|
5
4
|
}
|
|
6
5
|
}
|
|
7
6
|
/**
|
|
@@ -9,34 +8,28 @@ declare module 'h3' {
|
|
|
9
8
|
*
|
|
10
9
|
* Виконує наступні функції:
|
|
11
10
|
*
|
|
12
|
-
* 1.
|
|
13
|
-
* - Зчитує user_id з cookie або генерує новий UUID
|
|
14
|
-
* - Зберігає user_id в cookie на 1 рік
|
|
15
|
-
* - Використовується для відстеження користувачів між запитами
|
|
16
|
-
*
|
|
17
|
-
* 2. Отримання reqid:
|
|
11
|
+
* 1. Отримання reqid:
|
|
18
12
|
* - Бере reqid з header X-Request-ID
|
|
19
13
|
* - Якщо header відсутній, генерує новий UUID
|
|
20
14
|
* - Зберігається в event.context для доступу в інших middleware та API handlers
|
|
21
15
|
*
|
|
22
|
-
*
|
|
16
|
+
* 2. Вимірювання часу виконання:
|
|
23
17
|
* - Засікає початок запиту через performance.now()
|
|
24
18
|
* - В кінці запиту (event 'finish') логує статистику
|
|
25
19
|
*
|
|
26
|
-
*
|
|
20
|
+
* 3. Логування завершення запиту:
|
|
27
21
|
* - Виводить лог з msg="api request" для API запитів
|
|
28
22
|
* - Виводить лог з msg="stats" для інших запитів
|
|
29
23
|
* - Включає: URL, метод, час виконання, статус-код, домен
|
|
30
24
|
* - Формат сумісний з бекенд-логами для єдиної системи моніторингу
|
|
31
25
|
*
|
|
32
|
-
*
|
|
26
|
+
* 4. Захист від дублювання:
|
|
33
27
|
* - Перевіряє event.context.reqid - якщо існує, middleware пропускається
|
|
34
28
|
* - Використовує _loggerAttached flag для запобігання множинним listener'ам
|
|
35
29
|
*
|
|
36
|
-
*
|
|
30
|
+
* 5. Error handling:
|
|
37
31
|
* - Всі помилки логуються але не блокують виконання запиту
|
|
38
32
|
* - Middleware ніколи не викидає exception
|
|
39
|
-
* - Fallback механізми для cookie операцій
|
|
40
33
|
*/
|
|
41
34
|
declare const _default: any;
|
|
42
35
|
export default _default;
|
|
@@ -1,34 +1,15 @@
|
|
|
1
1
|
import { logger } from "../logger.js";
|
|
2
2
|
import { v4 as uuidv4 } from "uuid";
|
|
3
|
-
import { getCookie, setCookie } from "h3";
|
|
4
3
|
export default defineEventHandler(async (event) => {
|
|
5
4
|
if (event.context.reqid) {
|
|
6
5
|
return;
|
|
7
6
|
}
|
|
8
7
|
try {
|
|
9
|
-
let userId = getCookie(event, "user_id");
|
|
10
|
-
if (!userId) {
|
|
11
|
-
try {
|
|
12
|
-
userId = uuidv4().replace(/-/g, "");
|
|
13
|
-
setCookie(event, "user_id", userId, {
|
|
14
|
-
maxAge: 60 * 60 * 24 * 365,
|
|
15
|
-
httpOnly: true,
|
|
16
|
-
secure: process.env.NODE_ENV === "production",
|
|
17
|
-
sameSite: "strict"
|
|
18
|
-
});
|
|
19
|
-
} catch (cookieError) {
|
|
20
|
-
logger.warn("cookie_error", {
|
|
21
|
-
error: cookieError instanceof Error ? cookieError.message : String(cookieError)
|
|
22
|
-
});
|
|
23
|
-
userId = uuidv4().replace(/-/g, "");
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
8
|
let reqid = event.node.req.headers["x-request-id"];
|
|
27
9
|
if (!reqid) {
|
|
28
10
|
reqid = uuidv4().replace(/-/g, "");
|
|
29
11
|
}
|
|
30
12
|
event.context.reqid = reqid;
|
|
31
|
-
event.context.userId = userId;
|
|
32
13
|
const url = getRequestURL(event);
|
|
33
14
|
const fullUrl = url.pathname + (url.search ? url.search : "");
|
|
34
15
|
const method = event.node.req.method || "UNKNOWN";
|
|
@@ -51,8 +32,7 @@ export default defineEventHandler(async (event) => {
|
|
|
51
32
|
request: fullUrl,
|
|
52
33
|
request_time: requestTime,
|
|
53
34
|
method,
|
|
54
|
-
response: statusCode
|
|
55
|
-
user_id: userId
|
|
35
|
+
response: statusCode
|
|
56
36
|
});
|
|
57
37
|
} catch (logError) {
|
|
58
38
|
logger.error("log_error", {
|