dnsweeper
Version:
Advanced CLI tool for DNS record risk analysis and cleanup. Features CSV import for Cloudflare/Route53, automated risk assessment, and parallel DNS validation.
89 lines (79 loc) • 1.97 kB
text/typescript
/**
* Logger Utility
*/
import winston from 'winston';
// ログレベルの定義
const levels = {
error: 0,
warn: 1,
info: 2,
http: 3,
debug: 4,
};
// ログレベルに対応する色
const colors = {
error: 'red',
warn: 'yellow',
info: 'green',
http: 'magenta',
debug: 'white',
};
winston.addColors(colors);
// ログフォーマットの定義
const format = winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }),
winston.format.colorize({ all: true }),
winston.format.printf(
(info) => `${info.timestamp} ${info.level}: ${info.message}`,
),
);
// ファイル用フォーマット(色なし)
const fileFormat = winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }),
winston.format.errors({ stack: true }),
winston.format.json(),
);
// トランスポート設定
const transports = [
// コンソール出力
new winston.transports.Console({
format,
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
}),
];
// 本番環境ではファイルログも追加
if (process.env.NODE_ENV === 'production') {
transports.push(
// エラーログファイル
new winston.transports.File({
filename: 'logs/error.log',
level: 'error',
format: fileFormat,
maxsize: 5242880, // 5MB
maxFiles: 5,
}),
// 結合ログファイル
new winston.transports.File({
filename: 'logs/combined.log',
format: fileFormat,
maxsize: 5242880, // 5MB
maxFiles: 5,
})
);
}
// ロガーの作成
export const logger = winston.createLogger({
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
levels,
format: fileFormat,
transports,
exitOnError: false,
});
// ログディレクトリの作成
if (process.env.NODE_ENV === 'production') {
import('fs').then(fs => {
if (!fs.existsSync('logs')) {
fs.mkdirSync('logs');
}
});
}