change existing logs format

This commit is contained in:
Ordis 2024-01-06 16:23:05 +01:00
parent 91a48b2d7d
commit b5e6191688
10 changed files with 60 additions and 37 deletions

View File

@ -2,7 +2,7 @@ import { logger } from "@/src/utils/logger";
import { RequestHandler } from "express"; import { RequestHandler } from "express";
const rerollRandomModController: RequestHandler = (_req, res) => { const rerollRandomModController: RequestHandler = (_req, res) => {
logger.debug("RerollRandomMod Request", _req.body.toString("hex").replace(/(.)(.)/g, "$1$2 ")); logger.debug("RerollRandomMod Request", { info: _req.body.toString("hex").replace(/(.)(.)/g, "$1$2 ") });
res.json({}); res.json({});
}; };

View File

@ -13,8 +13,8 @@ const options = {
}; };
// const server = http.createServer(app).listen(80); // const server = http.createServer(app).listen(80);
http.createServer(app).listen(80, () => logger.info("server started on port 80")); http.createServer(app).listen(80, () => logger.info("cache server started on port 80"));
const server = https.createServer(options, app).listen(443, () => logger.info("server started on port 443")); const server = https.createServer(options, app).listen(443, () => logger.info("game server started on port 443"));
// server.keepAliveTimeout = 60 * 1000 + 1000; // server.keepAliveTimeout = 60 * 1000 + 1000;
// server.headersTimeout = 60 * 1000 + 2000; // server.headersTimeout = 60 * 1000 + 2000;

View File

@ -49,7 +49,7 @@ function getSession(sessionIdOrRequest: string | IFindSessionRequest): any[] {
if (typeof sessionIdOrRequest === "string") { if (typeof sessionIdOrRequest === "string") {
const session = sessions.find(session => session.sessionId === sessionIdOrRequest); const session = sessions.find(session => session.sessionId === sessionIdOrRequest);
if (session) { if (session) {
logger.debug("Found Sessions:", session); logger.debug("Found Sessions:", { session });
return [ return [
{ {
createdBy: session.creatorId, createdBy: session.creatorId,
@ -67,7 +67,7 @@ function getSession(sessionIdOrRequest: string | IFindSessionRequest): any[] {
return false; return false;
} }
} }
logger.debug("Found Matching Sessions:", matchingSessions); logger.debug("Found Matching Sessions:", { matchingSessions });
return true; return true;
}); });
return matchingSessions.map(session => ({ return matchingSessions.map(session => ({

View File

@ -2,5 +2,5 @@ import morgan from "morgan";
import { logger } from "@/src/utils/logger"; import { logger } from "@/src/utils/logger";
export const requestLogger = morgan("dev", { export const requestLogger = morgan("dev", {
stream: { write: message => logger.http(message.trim()) } stream: { write: message => logger.http(message) }
}); });

View File

@ -108,7 +108,7 @@ export const updateCurrency = async (price: number, usePremium: boolean, account
currencyChanges[path as currencyKeys] = -price; currencyChanges[path as currencyKeys] = -price;
}); });
logger.debug(`currency changes ${JSON.stringify(currencyChanges)}`); logger.debug(`currency changes `, { currencyChanges });
//let changes = {} as keyof currencyKeys; //let changes = {} as keyof currencyKeys;

View File

@ -239,7 +239,7 @@ const _missionRewardsCheckAllNamings = () => {
.filter(reward => !blueprintNames[reward.name]) .filter(reward => !blueprintNames[reward.name])
.filter(reward => !reward.name.includes(" Endo")) .filter(reward => !reward.name.includes(" Endo"))
.filter(reward => !reward.name.includes(" Credits Cache") && !reward.name.includes("Return: ")); .filter(reward => !reward.name.includes(" Credits Cache") && !reward.name.includes("Return: "));
logger.debug(tempRewards); logger.debug(`temp rewards`, { tempRewards });
}; };
// _missionRewardsCheckAllNamings(); // _missionRewardsCheckAllNamings();

View File

@ -12,11 +12,11 @@ if (url === undefined) {
const connectDatabase = async () => { const connectDatabase = async () => {
try { try {
await mongoose.connect(url); await mongoose.connect(`${url}`);
logger.info("connected to MongoDB"); logger.info("connected to MongoDB");
} catch (error: unknown) { } catch (error: unknown) {
if (error instanceof Error) { if (error instanceof Error) {
logger.error("error connecting to MongoDB", error.message); logger.error(`error connecting to MongoDB ${error.message}`);
} }
} }
}; };

View File

@ -32,7 +32,7 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI
logger.debug("purchase request", purchaseRequest); logger.debug("purchase request", purchaseRequest);
const storeCategory = getStoreItemCategory(purchaseRequest.PurchaseParams.StoreItem); const storeCategory = getStoreItemCategory(purchaseRequest.PurchaseParams.StoreItem);
const internalName = purchaseRequest.PurchaseParams.StoreItem.replace("/StoreItems", ""); const internalName = purchaseRequest.PurchaseParams.StoreItem.replace("/StoreItems", "");
logger.debug("Store category", storeCategory); logger.debug(`store category ${storeCategory}`);
let inventoryChanges; let inventoryChanges;
switch (storeCategory) { switch (storeCategory) {
@ -88,32 +88,26 @@ export const slotPurchaseNameToSlotName: SlotPurchase = {
// // new frame = slots -1 // // new frame = slots -1
// // number of frames = extra - slots + 2 // // number of frames = extra - slots + 2
const handleSlotPurchase = async (slotPurchaseNameFull: string, accountId: string) => { const handleSlotPurchase = async (slotPurchaseNameFull: string, accountId: string) => {
logger.debug("slot name", slotPurchaseNameFull); logger.debug(`slot name ${slotPurchaseNameFull}`);
const slotPurchaseName = parseSlotPurchaseName( const slotPurchaseName = parseSlotPurchaseName(
slotPurchaseNameFull.substring(slotPurchaseNameFull.lastIndexOf("/") + 1) slotPurchaseNameFull.substring(slotPurchaseNameFull.lastIndexOf("/") + 1)
); );
logger.debug(slotPurchaseName, "slot purchase name"); logger.debug(`slot purchase name ${slotPurchaseName}`);
await updateSlots( const slotName = slotPurchaseNameToSlotName[slotPurchaseName].name;
accountId, const slotsPerPurchase = slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase;
slotPurchaseNameToSlotName[slotPurchaseName].name,
slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase,
slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase
);
logger.debug( await updateSlots(accountId, slotName, slotsPerPurchase, slotsPerPurchase);
slotPurchaseNameToSlotName[slotPurchaseName].name,
slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase, logger.debug(`added ${slotsPerPurchase} slot ${slotName}`);
"slots added"
);
return { return {
InventoryChanges: { InventoryChanges: {
[slotPurchaseNameToSlotName[slotPurchaseName].name]: { [slotName]: {
count: 0, count: 0,
platinum: 1, platinum: 1,
Slots: slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase, Slots: slotsPerPurchase,
Extra: slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase Extra: slotsPerPurchase
} }
} }
}; };
@ -170,7 +164,7 @@ const handlePowersuitPurchase = async (powersuitName: string, accountId: string)
//TODO: change to getInventory, apply changes then save at the end //TODO: change to getInventory, apply changes then save at the end
const handleTypesPurchase = async (typesName: string, accountId: string) => { const handleTypesPurchase = async (typesName: string, accountId: string) => {
const typeCategory = getStoreItemTypesCategory(typesName); const typeCategory = getStoreItemTypesCategory(typesName);
logger.debug("type category", typeCategory); logger.debug(`type category ${typeCategory}`);
switch (typeCategory) { switch (typeCategory) {
case "SuitCustomizations": case "SuitCustomizations":
return await handleSuitCustomizationsPurchase(typesName, accountId); return await handleSuitCustomizationsPurchase(typesName, accountId);

View File

@ -39,10 +39,10 @@ export const handleInventoryItemConfigChange = async (
case "AdultOperatorLoadOuts": { case "AdultOperatorLoadOuts": {
const operatorConfig = equipment as IOperatorConfigEntry; const operatorConfig = equipment as IOperatorConfigEntry;
const operatorLoadout = inventory[equipmentName]; const operatorLoadout = inventory[equipmentName];
logger.debug("operator loadout received", equipmentName, operatorConfig); logger.debug(`operator loadout received ${equipmentName} `, operatorConfig);
// all non-empty entries are one loadout slot // all non-empty entries are one loadout slot
for (const [loadoutId, loadoutConfig] of Object.entries(operatorConfig)) { for (const [loadoutId, loadoutConfig] of Object.entries(operatorConfig)) {
// logger.debug("loadoutId", loadoutId, "loadoutconfig", loadoutConfig); logger.debug(`loadoutId ${loadoutId} loadoutConfig`, { config: loadoutConfig });
const loadout = operatorLoadout.find(loadout => loadout._id?.toString() === loadoutId); const loadout = operatorLoadout.find(loadout => loadout._id?.toString() === loadoutId);
// if no config with this id exists, create a new one // if no config with this id exists, create a new one
@ -127,7 +127,7 @@ export const handleInventoryItemConfigChange = async (
case "DrifterMelee": case "DrifterMelee":
case "Sentinels": case "Sentinels":
case "Horses": { case "Horses": {
logger.debug("general Item config saved", equipmentName, equipment); logger.debug(`general Item config saved of type ${equipmentName}`, { config: equipment });
const itemEntries = equipment as IItemEntry; const itemEntries = equipment as IItemEntry;
for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) { for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) {
@ -154,7 +154,7 @@ export const handleInventoryItemConfigChange = async (
break; break;
} }
default: { default: {
logger.error("category not implemented", equipmentName, equipment); logger.error(`category not implemented: ${equipmentName}`, { config: equipment });
} }
//case "OperatorAmps": //case "OperatorAmps":
// case "SentinelWeapons": // case "SentinelWeapons":

View File

@ -1,24 +1,51 @@
import { createLogger, format, transports, Logger, LeveledLogMethod, addColors } from "winston"; import { createLogger, format, transports, Logger, LeveledLogMethod, addColors } from "winston";
import "winston-daily-rotate-file"; import "winston-daily-rotate-file";
import * as dotenv from "dotenv"; import * as dotenv from "dotenv";
import { inspect } from "util"; import * as util from "util";
import { isEmptyObject } from "@/src/helpers/general"; import { isEmptyObject } from "@/src/helpers/general";
dotenv.config(); dotenv.config();
//TODO: in production utils.inspect might be slowing down requests // const combineMessageAndSplat = () => {
// return {
// transform: (info: any, _opts: any) => {
// //combine message and args if any
// info.message = util.format(info.message, ...(info[Symbol.for("splat")] || []));
// return info;
// }
// };
// };
// const alwaysAddMetadata = () => {
// return {
// transform(info: any) {
// if (info[Symbol.for("splat")] === undefined) return info;
// info.meta = info[Symbol.for("splat")]; //[0].meta;
// return info;
// }
// };
// };
//TODO: in production utils.inspect might be slowing down requests see utils.inspect
const consolelogFormat = format.printf(info => { const consolelogFormat = format.printf(info => {
if (!isEmptyObject(info.metadata)) { if (!isEmptyObject(info.metadata)) {
return `${info.timestamp} [${info.version}] ${info.level}: ${info.message} ${inspect(info.metadata, { const metadataString = util.inspect(info.metadata, {
showHidden: false, showHidden: false,
depth: null, depth: null,
colors: true colors: true
})}`; });
return `${info.timestamp} [${info.version}] ${info.level}: ${info.message} ${metadataString}`;
} }
return `${info.timestamp} [${info.version}] ${info.level}: ${info.message}`; return `${info.timestamp} [${info.version}] ${info.level}: ${info.message}`;
}); });
const fileFormat = format.combine(format.uncolorize(), format.timestamp(), format.json()); const fileFormat = format.combine(
format.uncolorize(),
//combineMessageAndSplat(),
format.timestamp(),
format.json()
);
const errorLog = new transports.DailyRotateFile({ const errorLog = new transports.DailyRotateFile({
filename: "logs/error.log", filename: "logs/error.log",
@ -36,6 +63,8 @@ const consoleLog = new transports.Console({
format: format.combine( format: format.combine(
format.colorize(), format.colorize(),
format.timestamp({ format: "YYYY-MM-DDTHH:mm:ss:SSS" }), // uses local timezone format.timestamp({ format: "YYYY-MM-DDTHH:mm:ss:SSS" }), // uses local timezone
//combineMessageAndSplat(),
//alwaysAddMetadata(),
format.errors({ stack: true }), format.errors({ stack: true }),
format.align(), format.align(),
format.metadata({ fillExcept: ["message", "level", "timestamp", "version"] }), format.metadata({ fillExcept: ["message", "level", "timestamp", "version"] }),