增加日志
This commit is contained in:
parent
dccb88b60d
commit
09d6edca13
@ -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",
|
||||||
|
@ -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
17
src/model/Logs.js
Normal 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)
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
110
src/utils/logger.js
Normal 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);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user