增加日志

This commit is contained in:
yulixing 2019-11-04 20:33:44 +08:00
parent dccb88b60d
commit 09d6edca13
7 changed files with 147 additions and 9 deletions

View File

@ -16,9 +16,12 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"bunyan": "^1.8.12",
"cheerio": "^1.0.0-rc.3", "cheerio": "^1.0.0-rc.3",
"cross-env": "^6.0.0", "cross-env": "^6.0.0",
"express": "^4.17.1", "express": "^4.17.1",
"file-stream-rotator": "^0.5.5",
"fs-extra": "^8.1.0",
"moment": "^2.24.0", "moment": "^2.24.0",
"mongoose": "^5.7.1", "mongoose": "^5.7.1",
"node-schedule": "^1.3.2", "node-schedule": "^1.3.2",

View File

@ -4,10 +4,12 @@ import schedule from 'node-schedule'
import config from '../config/config' import config from '../config/config'
import getCate from './spider/cate' import getCate from './spider/cate'
import logger from '../src/utils/logger'
const db = mongoose.connection const db = mongoose.connection
db.on('error', function(err) { db.on('error', function(err) {
console.log(err) logger.error(err)
process.exit(1) process.exit(1)
}) })
db.once('open', function() { db.once('open', function() {
@ -20,7 +22,8 @@ mongoose.connect(config.db_taptap, {
const scheduleCronstyle = () => { const scheduleCronstyle = () => {
console.log('TapTap爬虫正在运行') console.log('TapTap爬虫正在运行')
const timer = schedule.scheduleJob('0 0 10 * * *', () => { logger.info({}, new Date() + '开始收集数据!')
const timer = schedule.scheduleJob('0 0 9 * * *', () => {
console.log(new Date() + '开始收集数据!') console.log(new Date() + '开始收集数据!')
getAllData() getAllData()
}) })

17
src/model/Logs.js Normal file
View File

@ -0,0 +1,17 @@
'use strict'
import mongoose from 'mongoose'
/**
* 游戏信息
*/
const Logs = new mongoose.Schema(
{
errmsg: {type: Object}
},
{
collection: 'logs',
timestamps: true,
}
)
export default mongoose.model('Logs', Logs)

View File

@ -7,16 +7,17 @@ import config from '../../config/config'
import {clearInterval} from 'timers' import {clearInterval} from 'timers'
import parseHtml from '../utils/parseHtml' import parseHtml from '../utils/parseHtml'
import getDetails from './details' import getDetails from './details'
import logger from '../utils/logger'
let next = '' let next = ''
let timer = '' let timer = ''
let data = [] let data = []
function getCate(cateName) { function getCate(cateName) {
next = config.taptap[cateName] next = config.taptap[cateName]
timer = setInterval(getData, 3000, cateName) timer = setInterval(getData, 2000, cateName)
} }
async function getData(cateName) { async function getData(cateName) {
@ -31,7 +32,7 @@ async function getData(cateName) {
data = [] data = []
} }
} catch (err) { } catch (err) {
console.log(err) logger.error(err)
} }
} }
@ -103,6 +104,7 @@ function analyze(str, cateName) {
data.push(info) data.push(info)
}) })
} catch (err) { } catch (err) {
logger.error(err)
console.log(err) console.log(err)
} }
} }

View File

@ -4,6 +4,7 @@ require('superagent-proxy')(request)
import formWatch from '../utils/formWatch' import formWatch from '../utils/formWatch'
import saveData from '../utils/saveData' import saveData from '../utils/saveData'
import logger from '../utils/logger'
import {clearInterval} from 'timers' import {clearInterval} from 'timers'
@ -14,7 +15,7 @@ let allData = []
function getDetails(cateName, data) { function getDetails(cateName, data) {
allData = [] allData = []
curIdx = 0 curIdx = 0
timer = setInterval(getData, 3000, {cateName, data}) timer = setInterval(getData, 2000, {cateName, data})
} }
async function getData({cateName, data}) { async function getData({cateName, data}) {
@ -31,7 +32,7 @@ async function getData({cateName, data}) {
allData = [] allData = []
} }
} catch (err) { } catch (err) {
console.log(err) logger.error(err)
} }
} }
@ -48,7 +49,7 @@ function analyze(str, cateName, info) {
info.topic = parseInt($('a[data-taptap-tab="topic"] small').text()) || 0 info.topic = parseInt($('a[data-taptap-tab="topic"] small').text()) || 0
allData.push(info) allData.push(info)
} catch (err) { } catch (err) {
console.log(err) logger.error(err)
} }
} }

110
src/utils/logger.js Normal file
View File

@ -0,0 +1,110 @@
'use strict';
import fs from 'fs-extra';
import FileStreamRotator from 'file-stream-rotator';
import bunyan from 'bunyan';
import config from '../../config/config'
import Logs from '../model/Logs'
const env = process.env.NODE_ENV || 'development';
const isDev = env === 'development';
const logDir = config.logs_path;
fs.existsSync(logDir) || fs.mkdirSync(logDir);
let logger = null;
const createLogger = function(appName) {
const streams = [{
level: 'info',
stream: FileStreamRotator.getStream({
date_format: 'YYYYMMDD',
filename: `${logDir}/${'taptap'}-%DATE%.log`,
frequency: 'daily',
verbose: false,
}),
}];
if (isDev) {
streams.push({
level: 'debug',
stream: process.stdout,
});
}
return bunyan.createLogger({
name: appName,
serializers: bunyan.stdSerializers,
streams: streams,
src: false,
});
};
export default {
info(obj, msg) {
if (!logger) {
logger = createLogger('taptap');
}
if (msg) {
logger.info(obj, msg);
} else {
logger.info(obj);
}
},
error(obj, msg) {
if (!logger) {
logger = createLogger('taptap');
}
if (msg) {
logger.error(obj, msg);
} else {
logger.error(obj);
}
},
warn(obj, msg) {
if (!logger) {
logger = createLogger('taptap');
}
if (msg) {
logger.warn(obj, msg);
} else {
logger.warn(obj);
}
},
debug(obj, msg) {
if (!logger) {
logger = createLogger('taptap');
}
if (msg) {
logger.debug(obj, msg);
} else {
logger.debug(obj);
}
},
trace(obj, msg) {
if (!logger) {
logger = createLogger('taptap');
}
if (msg) {
logger.trace(obj, msg);
} else {
logger.trace(obj);
}
},
fatal(obj, msg) {
if (!logger) {
logger = createLogger('taptap');
}
if (msg) {
logger.fatal(obj, msg);
} else {
logger.fatal(obj);
}
},
db(err) {
const obj = new Logs({
errmsg: err
});
obj.save().then(()=>{}).catch((err)=> {
logger.error(err);
});
},
};

View File

@ -1,10 +1,12 @@
import Game from '../model/Game' import Game from '../model/Game'
import logger from '../utils/logger'
export default function saveData(data) { export default function saveData(data) {
try { try {
Game.insertMany(data) Game.insertMany(data)
logger.info({}, `${data.length}条数据已保存`)
console.log(`${data.length}条数据已保存`) console.log(`${data.length}条数据已保存`)
} catch (err) { } catch (err) {
console.log(err) logger.error(err)
} }
} }