generated from gitea_admin/default
update a lot of change since a while
This commit is contained in:
17
server/api/log.post.js
Normal file
17
server/api/log.post.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import logger from '~~/server/utils/logger';
|
||||
|
||||
const ALLOWED_LEVELS = ['info', 'warn', 'error'];
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody(event);
|
||||
const { level, message, meta } = body || {};
|
||||
|
||||
const logLevel = ALLOWED_LEVELS.includes(level) ? level : 'info';
|
||||
|
||||
logger[logLevel](message, {
|
||||
label: 'front-end',
|
||||
...meta,
|
||||
});
|
||||
|
||||
return { status: 'ok' };
|
||||
});
|
||||
30
server/plugins/logger_global.js
Normal file
30
server/plugins/logger_global.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import { getRequestIP } from 'h3';
|
||||
import logger from '~~/server/utils/logger';
|
||||
|
||||
export default defineNitroPlugin((nitroApp) => {
|
||||
nitroApp.hooks.hook('request', (event) => {
|
||||
// 1. On ignore les requêtes internes de Nuxt Image
|
||||
if (event.path.startsWith('/_ipx')) return;
|
||||
|
||||
// 2. On ignore l’endpoint de log, qui est déjà tracé par logger client_log
|
||||
if (event.path === '/api/log') return;
|
||||
// message: 'logger_global',
|
||||
logger.info('logger_global', {
|
||||
label: 'back-end',
|
||||
internal: event._internal,
|
||||
method: event.method,
|
||||
url: event.path,
|
||||
ip: getRequestIP(event) || 'unknown',
|
||||
});
|
||||
});
|
||||
|
||||
nitroApp.hooks.hook('error', (error, { event }) => {
|
||||
logger.error('Unhandled error', {
|
||||
message: error.message,
|
||||
stack: error.stack,
|
||||
internal: event._internal,
|
||||
method: event?.method,
|
||||
url: event?.path,
|
||||
});
|
||||
});
|
||||
});
|
||||
6
server/services/test.js
Normal file
6
server/services/test.js
Normal file
@@ -0,0 +1,6 @@
|
||||
import logger from '~~/server/utils/logger';
|
||||
import path from 'path';
|
||||
|
||||
const filename = path.basename(new URL(import.meta.url).pathname);
|
||||
|
||||
logger.info('test de log avec winston', { label: filename });
|
||||
81
server/utils/logger.js
Normal file
81
server/utils/logger.js
Normal file
@@ -0,0 +1,81 @@
|
||||
import winston from 'winston';
|
||||
import DailyRotateFile from 'winston-daily-rotate-file';
|
||||
|
||||
const { createLogger, format, transports } = winston;
|
||||
const { combine, timestamp, label, printf } = format;
|
||||
|
||||
|
||||
const myFormatFile = printf((info) => {
|
||||
const { level, message, timestamp, ...meta } = info;
|
||||
const label = meta.label || 'toto';
|
||||
delete meta.label; // pour ne pas le répéter dans le JSON
|
||||
const base = `${timestamp} ${level} [${label}] ${message}`;
|
||||
|
||||
const metaString = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
|
||||
return base + metaString;
|
||||
});
|
||||
|
||||
const myFormatConsole = printf(({ level, message, label, timestamp }) => {
|
||||
return `${timestamp} ${level} [${label}] ${message}`;
|
||||
});
|
||||
|
||||
|
||||
|
||||
const logger = winston.createLogger({
|
||||
//level: 'info',
|
||||
format: combine(
|
||||
timestamp({format: 'YYYY-MM-DD HH:mm:ss'}),
|
||||
myFormatFile
|
||||
),
|
||||
defaultMeta: { service: 'user-service' },
|
||||
transports: [
|
||||
new DailyRotateFile({
|
||||
dirname: 'logs',
|
||||
filename: 'log_global-%DATE%.log',
|
||||
datePattern: 'YYYY-MM-DD',
|
||||
zippedArchive: true,
|
||||
maxFiles: '14d',
|
||||
}),
|
||||
],
|
||||
exceptionHandlers: [
|
||||
new DailyRotateFile({
|
||||
dirname: 'logs',
|
||||
filename: 'log_global-%DATE%.log',
|
||||
datePattern: 'YYYY-MM-DD',
|
||||
zippedArchive: true,
|
||||
maxFiles: '14d',
|
||||
}),
|
||||
new winston.transports.Console()
|
||||
],
|
||||
rejectionHandlers: [
|
||||
new DailyRotateFile({
|
||||
dirname: 'logs',
|
||||
filename: 'log_global-%DATE%.log',
|
||||
datePattern: 'YYYY-MM-DD',
|
||||
zippedArchive: true,
|
||||
maxFiles: '14d',
|
||||
}),
|
||||
new winston.transports.Console()
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
if (process.env.ENV !== 'production' ) {
|
||||
logger.add(new winston.transports.Console(
|
||||
{
|
||||
format: combine(
|
||||
label({ label: '' }),
|
||||
timestamp({format: 'YYYY-MM-DD HH:mm:ss'}),
|
||||
myFormatConsole
|
||||
),
|
||||
handleExceptions: true //pour afficher également les exceptions dans la console
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
|
||||
/////////////////////////////////////////////////
|
||||
export default logger;
|
||||
Reference in New Issue
Block a user