|
14 | 14 | limitations under the License. |
15 | 15 | */ |
16 | 16 |
|
| 17 | +import path from 'path'; |
17 | 18 | import winston, { format } from 'winston'; |
| 19 | +export let logger: winston.Logger; |
18 | 20 |
|
19 | | -export const logger = winston.createLogger({ |
20 | | - level: 'info', |
21 | | - format: format.combine( |
22 | | - format.timestamp({ |
23 | | - format: 'YYYY-MM-DD HH:mm:ss', |
24 | | - }), |
25 | | - format.errors({ stack: true }), |
26 | | - format.splat(), |
27 | | - format.json() |
28 | | - ), |
29 | | - defaultMeta: { service: 'dockerhub-mcp-server' }, |
30 | | - transports: [], |
31 | | -}); |
| 21 | +export function initLogger(logsDir?: string) { |
| 22 | + logger = winston.createLogger({ |
| 23 | + level: 'info', |
| 24 | + format: format.combine( |
| 25 | + format.timestamp({ |
| 26 | + format: 'YYYY-MM-DD HH:mm:ss', |
| 27 | + }), |
| 28 | + format.errors({ stack: true }), |
| 29 | + format.splat(), |
| 30 | + format.json() |
| 31 | + ), |
| 32 | + defaultMeta: { service: 'dockerhub-mcp-server' }, |
| 33 | + transports: [], |
| 34 | + }); |
32 | 35 |
|
33 | | -// |
34 | | -// If we're not in production then log to the `console` with the format: |
35 | | -// `${info.level}: ${info.message} JSON.stringify({ ...rest }) ` |
| 36 | + if (process.env.NODE_ENV === 'production' && !logsDir) { |
| 37 | + logsDir = '/app/logs'; |
| 38 | + console.warn(`logs dir unspecified, defaulting to ${logsDir}`); |
| 39 | + } |
36 | 40 |
|
37 | | -if (process.env.NODE_ENV !== 'production') { |
38 | | - logger.add( |
39 | | - new winston.transports.Console({ |
40 | | - format: winston.format.simple(), |
41 | | - log: (info) => { |
42 | | - console.error(info.message); |
43 | | - }, |
44 | | - }) |
45 | | - ); |
46 | | -} else { |
47 | | - logger.transports.push( |
48 | | - // |
49 | | - // - Write all logs with importance level of `error` or higher to `error.log` |
50 | | - // (i.e., error, fatal, but not other levels) |
51 | | - // |
52 | | - new winston.transports.File({ filename: 'logs/error.log', level: 'warn' }), |
53 | | - // |
54 | | - // - Write all logs with importance level of `info` or higher to `combined.log` |
55 | | - // (i.e., fatal, error, warn, and info, but not trace) |
56 | | - // |
57 | | - new winston.transports.File({ filename: 'logs/mcp.log', level: 'info' }) |
58 | | - ); |
| 41 | + if (logsDir) { |
| 42 | + logger.transports.push( |
| 43 | + new winston.transports.File({ |
| 44 | + filename: path.join(logsDir, 'error.log'), |
| 45 | + level: 'warn', |
| 46 | + }), |
| 47 | + new winston.transports.File({ filename: path.join(logsDir, 'mcp.log'), level: 'info' }) |
| 48 | + ); |
| 49 | + } else { |
| 50 | + logger.add( |
| 51 | + new winston.transports.Console({ |
| 52 | + format: winston.format.simple(), |
| 53 | + log: (info) => { |
| 54 | + console.error(info.message); |
| 55 | + }, |
| 56 | + }) |
| 57 | + ); |
| 58 | + } |
59 | 59 | } |
0 commit comments