nodejs(express)中输出打印的⽇志保存到本地磁盘nodejs打印的⽇志都会在控制台中打印处理,要把这些⽇志保存到本地,可以借助 log4js 依赖
1. 安装依赖
npm i log4js
2. 在⼊⼝⽂件引⼊setLog.js
var express = require("express");
var app = express();
var con = require('./setlog.js');
app.use(conLog()); //netLog⽅法的参数为 "none"(默认), "debug", "info", "warn", "error", "fatal"
console.log("打印log")//logs\log\none\所有打印的⽇志⽂件
console.debug("打印debug")//logs\log\debug\所有打印的⽇志⽂件
console.info("打印info")//logs\log\info\所有打印的⽇志⽂件
console.warn("打印warn")//logs\log\warn\所有打印的⽇志⽂件
<("打印error")//logs\log\error\所有打印的⽇志⽂件
console.fatal("打印fatal")//logs\log\fatal\所有打印的⽇志⽂件
setLog.js:
const log4js = require('log4js');
var LogType = {
NONE: "none",
DEBUG: "debug",
INFO: "info",
WARN: "warn",
ERROR: "error",
FATAL: "fatal",
}
var LogTypeOrder = {
NONE: 0,
DEBUG: 1,
INFO: 2,
WARN: 3,
ERROR: 4,
FATAL: 5,
}
var Kinds = ["log"];
function appenderFull(filename){
return {
type: "dateFile",
filename: filename, //⽇志⽂件的存储路径
alwaysIncludePattern: true, //(可选,默认false)将模式包含在当前⽇志⽂件的名称以及备份中
pattern: "yyyy-MM-dd.log", //(可选,默认为-yyyy-MM-dd)确定何时滚动⽇志的模式。格式:.yyyy-MM-dd-hh:mm:ss.log
encoding: 'utf-8', //(可选,默认为utf-8)⽂件数据的存储编码
maxLogSize: "1M" //⽂件最⼤存储空间,当⽂件内容超过⽂件存储空间会⾃动⽣成⼀个⽂件xxx.log.1的序列⾃增长的⽂件, 单位:K M G
}
}
var appenders = {default: appenderFull("./logs/default")};
var categories = {default: {appenders: ["default"], level: log4js.levels.ALL}};
for(const kind of Kinds){
for(let type in LogType){
if(LogType.hasOwnProperty(type)){
type = LogType[type];
let key = kind + "_" + type;
appenders[key] = appenderFull(`./logs/${type}/${type}`);
categories[key] = {appenders: [key], level: type === LogType.NONE ? log4js.levels.ALL : type}
}
}
}
appenders: appenders,
categories: categories,
});
/**
* 添加⽇志接⼝,对应的⽇志类型将指定⽇志的输出⽂件,例如"none"类型的⽇志,将把⽇志内容指定输出到'./logs/business/none/none.log'⽂件,
* "error"类型的⽇志,将把⽇志内容指定输出到'./logs/business/error/error.log'⽂件。
* @param {LogType|String} type -- ⽇志的类型:"none", "debug", "info", "warn", "error", "fatal"。
* 如果该值不为枚举中的值,那么⽇志的类型默认设置为"none"类型,且将该参数
* 作为⽇志内容的开头部分。
* @param {...} arguments -- ⽇志内容,参数个数不定(⼀个或者多个,如果不填,那么默认将type作为⽇志内容参数)
* @return {undefined}
*/
var KindIndex = 0;
exports.log = function(type){
try {
if(arguments.length === 0) return;
let more = "";
for(let i = 1; i < arguments.length; i++){
more += (more === "" ? arguments[i] : " " + arguments[i]);
}
if(typeof(type) === "string" && arguments.length > 1 && UpperCase()]){
type = LowerCase();
}
else{
more = type + more;
}
} catch (error) {
<(error);
}
};
function _registerLogFunc(type){
return function(){
if(arguments.length === 0) return;
let args = [type];
for(let i = 0; i < arguments.length; i++){
args.push(arguments[i]);
}
exports.log.apply(null, args);
}
}
const DEFAULT_FORMAT = ':remote-addr - -'
+ ' ":method :url HTTP/:http-version"'
+ ' :status :content-length ":referrer"'
+ ' ":user-agent"';
/**
* 添加⽹络通讯⽇志接⼝,如果⽇志类型为"none",那么所有的⽇志内容指定输出到'./logs/net/none/none.log'⽂件,
* 如果是其他类型的⽇志,那么相应类型的⽇志将记录到对应名字的⽂件,例如"error"类型的⽇志,将把⽇志内容指定输出到'./logs/net/error/error.log'⽂件。
* @param {LogType} type -- ⽇志的类型:"none", "debug", "info", "warn", "error", "fatal"。
* 如果该值不为枚举中的值,那么⽇志的类型默认设置为"none"类型。
* @return {function}
*/
exportsLog = function(type){
try {
type = typeof(type) === "string" && UpperCase()] ? LowerCase() : LogType.NONE;
Logger(Kinds[1] + "_" + LogType.NONE), {level: 'auto', format: function(req, res, callback){ try {
let level = LogType.INFO;
js argumentsif(res.statusCode){
if (res.statusCode >= 300) level = LogType.WARN;
if (res.statusCode >= 400) level = LogType.ERROR;
}
let record = callback(DEFAULT_FORMAT);
let category = type === LogType.NONE ? type : level;
KindIndex = 1;
UpperCase()] >= UpperCase()] && exports.log(category, record);
KindIndex = 0;
} catch (error) {
<(error);
}
return;
}});
} catch (error) {
<(error);
}
}
/**
* exports.debug, exports.info, exports.warn, , exports.fatal参数传⽇志内容,参数个数不限。
*/
exports.debug = _registerLogFunc(LogType.DEBUG);
exports.info = _registerLogFunc(LogType.INFO);
exports.warn = _registerLogFunc(LogType.WARN);
< = _registerLogFunc(LogType.ERROR);
exports.fatal = _registerLogFunc(LogType.FATAL);
3. 在需要输出⽇志的地⽅直接使⽤console.log("XXX")或者上⾯列出的其他5种⽅法即可
4. 输出的⽇志⽂件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论