mirror of
https://github.com/Xevion/bus-reminder.git
synced 2025-12-06 03:14:34 -06:00
Setup winston logger + loki transport
This commit is contained in:
6
src/env/schema.mjs
vendored
6
src/env/schema.mjs
vendored
@@ -9,6 +9,7 @@ const TimezoneSchema = z.enum(Intl.supportedValuesOf("timeZone"));
|
||||
* This way you can ensure the app isn't built with invalid env vars.
|
||||
*/
|
||||
export const serverSchema = z.object({
|
||||
NODE_ENV: z.string(),
|
||||
API_KEY: z.string(),
|
||||
CRONITOR_ACCOUNT_ID: z.string(),
|
||||
CRONITOR_JOB_ID: z.string(),
|
||||
@@ -21,5 +22,8 @@ export const serverSchema = z.object({
|
||||
REDIS_URL: z.string().url(),
|
||||
DISCORD_TOKEN: z.string(),
|
||||
DISCORD_TARGET_USER_ID: z.string(),
|
||||
TIMEZONE: TimezoneSchema
|
||||
TIMEZONE: TimezoneSchema,
|
||||
LOKI_HOST: z.string().url(),
|
||||
LOKI_USERNAME: z.string(),
|
||||
LOKI_PASSWORD: z.string(),
|
||||
});
|
||||
|
||||
6
src/env/server.mjs
vendored
6
src/env/server.mjs
vendored
@@ -7,6 +7,7 @@ import { serverSchema } from './schema.mjs';
|
||||
import { formatErrors } from './util.mjs';
|
||||
|
||||
const _serverEnv = serverSchema.safeParse({
|
||||
NODE_ENV: process.env.NODE_ENV,
|
||||
API_KEY: process.env.API_KEY,
|
||||
CRONITOR_ACCOUNT_ID: process.env.CRONITOR_ACCOUNT_ID,
|
||||
CRONITOR_JOB_ID: process.env.CRONITOR_JOB_ID,
|
||||
@@ -19,7 +20,10 @@ const _serverEnv = serverSchema.safeParse({
|
||||
REDIS_URL: process.env.REDIS_URL,
|
||||
DISCORD_TOKEN: process.env.DISCORD_TOKEN,
|
||||
DISCORD_TARGET_USER_ID: process.env.DISCORD_TARGET_USER_ID,
|
||||
TIMEZONE: process.env.TIMEZONE
|
||||
TIMEZONE: process.env.TIMEZONE,
|
||||
LOKI_HOST: process.env.LOKI_HOST,
|
||||
LOKI_USERNAME: process.env.LOKI_USERNAME,
|
||||
LOKI_PASSWORD: process.env.LOKI_PASSWORD,
|
||||
});
|
||||
|
||||
if (_serverEnv.success === false) {
|
||||
|
||||
47
src/logger.ts
Normal file
47
src/logger.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { createLogger, format, type Logger, transports } from 'winston';
|
||||
import LokiTransport from 'winston-loki';
|
||||
import { env } from '@/env/server.mjs';
|
||||
|
||||
const logger: Logger = createLogger({
|
||||
level: 'debug',
|
||||
format: format.combine(
|
||||
format.timestamp({
|
||||
format: 'YYYY-MM-DD HH:mm:ss'
|
||||
}),
|
||||
format.errors({ stack: true }),
|
||||
format.splat(),
|
||||
format.json()
|
||||
),
|
||||
defaultMeta: { service: 'api' },
|
||||
transports: [
|
||||
new LokiTransport({
|
||||
level: 'debug',
|
||||
json: true,
|
||||
host: env.LOKI_HOST,
|
||||
basicAuth: `${env.LOKI_USERNAME}:${env.LOKI_PASSWORD}`,
|
||||
labels: { service: 'bus-reminder', environment: env.NODE_ENV }
|
||||
}),
|
||||
new transports.Console({
|
||||
format: format.combine(
|
||||
format.colorize(),
|
||||
format.printf(
|
||||
({ level, message, timestamp, stack }) =>
|
||||
`${timestamp} ${level}: ${stack || message}`
|
||||
)
|
||||
)
|
||||
})
|
||||
],
|
||||
exceptionHandlers: [
|
||||
new transports.Console({
|
||||
format: format.combine(
|
||||
format.colorize(),
|
||||
format.printf(
|
||||
({ level, message, timestamp, stack }) =>
|
||||
`${timestamp} ${level}: ${stack || message}`
|
||||
)
|
||||
)
|
||||
})
|
||||
]
|
||||
});
|
||||
|
||||
export default logger;
|
||||
Reference in New Issue
Block a user