import { Router , Request , Response , NextFunction } from 'express' ; import { Container } from 'typedi' ; import { Logger } from 'winston' ; import * as fs from 'fs' ; import config from '../config' ; import { getFileContentByName } from '../config/util' ; const route = Router ( ) ; export default ( app ) => { app . use ( '/logs' , route ) ; route . get ( '/' , async ( req , res , next ) => { const logger = Container . get ( 'logger' ) ; try { const fileList = fs . readdirSync ( config . logPath , 'utf-8' ) ; const dirs = [ ] ; for ( let i = 0 ; i < fileList . length ; i ++ ) { const stat = fs . lstatSync ( config . logPath + fileList [ i ] ) ; if ( stat . isDirectory ( ) ) { const fileListTmp = fs . readdirSync ( `${ config . logPath }/${ fileList [ i ] }` , 'utf-8' ) ; dirs . push ( { name : fileList [ i ] , isDir : true , files : fileListTmp . reverse ( ) , } ) ; } else { dirs . push ( { name : fileList [ i ] , isDir : false , files : [ ] , } ) ; } } res . send ( { code : 200 , dirs } ) ; } catch ( e ) { logger . error ( '🔥 error: %o' , e ) ; return next ( e ) ; } } ) ; route . get ( '/:dir/:file' , async ( req , res , next ) => { const logger = Container . get ( 'logger' ) ; try { const { dir , file } = req . params ; const content = getFileContentByName ( `${ config . logPath }/${ dir }/${ file }` ) ; res . send ( { code : 200 , data : content } ) ; } catch ( e ) { logger . error ( '🔥 error: %o' , e ) ; return next ( e ) ; } } ) ; route . get ( '/:file' , async ( req , res , next ) => { const logger = Container . get ( 'logger' ) ; try { const { file } = req . params ; const content = getFileContentByName ( `${ config . logPath }/${ file }` ) ; res . send ( { code : 200 , data : content } ) ; } catch ( e ) { logger . error ( '🔥 error: %o' , e ) ; return next ( e ) ; } } ) ; } ;