NodeJS 로그 미들웨어 log4js 사용 패키지
우선 npm 명령 을 통 해 log4js 미들웨어 를 프로젝트 의 작업 디 렉 터 리 에 설치 해 야 합 니 다.
그리고 새 파일 (예 를 들 어 FLogger. js) 을 만 들 고 이 파일 에서 log4js 미들웨어 를 사용 하여 패키지 합 니 다.
코드 는 다음 과 같 습 니 다:
//
// Author: Fanrncho
// Date: 2019/06/24
// Desc: log4js
//
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 = ["business", "net"];
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/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/${kind}/${type}/${type}`);
categories[key] = {appenders: [key], level: type === LogType.NONE ? log4js.levels.ALL : type}
}
}
}
log4js.configure({
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 && LogType[type.toUpperCase()]){
type = type.toLowerCase();
log4js.getLogger(Kinds[KindIndex] + "_" + type)[type === LogType.NONE ? LogType.DEBUG : type](more);
}
else{
more = type + more;
log4js.getLogger(Kinds[KindIndex] + "_" + LogType.NONE)[LogType.DEBUG](more);
}
} catch (error) {
console.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}
*/
exports.netLog = function(type){
try {
type = typeof(type) === "string" && LogType[type.toUpperCase()] ? type.toLowerCase() : LogType.NONE;
return log4js.connectLogger(log4js.getLogger(Kinds[1] + "_" + LogType.NONE), {level: 'auto', format: function(req, res, callback){
try {
let level = LogType.INFO;
if(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;
LogTypeOrder[category.toUpperCase()] >= LogTypeOrder[type.toUpperCase()] && exports.log(category, record);
KindIndex = 0;
} catch (error) {
console.error(error);
}
return;
}});
} catch (error) {
console.error(error);
}
}
/**
* exports.debug, exports.info, exports.warn, exports.error, exports.fatal , 。
*/
exports.debug = _registerLogFunc(LogType.DEBUG);
exports.info = _registerLogFunc(LogType.INFO);
exports.warn = _registerLogFunc(LogType.WARN);
exports.error = _registerLogFunc(LogType.ERROR);
exports.fatal = _registerLogFunc(LogType.FATAL);
다음은 로그 모듈 의 사용 예 코드 입 니 다:
var app = require('express')(); //web
const FLogger = require('./FLogger');
FLogger.log(" none not paramters!", 111, "uuuuuuuuu", null, {jj: 188, name: "hello"});
FLogger.log("none", " none");
FLogger.log("debug", " debug!");
FLogger.log("info", " info!", "jjjjjjj", 8888, 0.8, null, "hhhhhhh");
FLogger.log("warn", " warn", "jjjjfd");
FLogger.log("error", " error!", 66);
FLogger.log("fatal", " fatal");
FLogger.debug("debug", " debug111111111!");
FLogger.info("info", " info11111111!", "777", null);
FLogger.warn("warn", " warn111111111111", 1123);
FLogger.error("error", " error11111111111!", null);
FLogger.fatal("fatal", " fatal111111111111", "kkkkkkkkkkkk");
app.listen(9000); // web
app.use(FLogger.netLog());
//app.use(FLogger.netLog("debug"));
//app.use(FLogger.netLog("info"));
//app.use(FLogger.netLog("warn"));
//app.use(FLogger.netLog("error"));
//app.use(FLogger.netLog("fatal"));
로그 의 출력 은 자신 이 설정 한 로그 형식 에 따라 작업 디 렉 터 리 의. / logs 폴 더 를 볼 수 있 습 니 다. express 프레임 워 크 에 등 록 된 로그 출력 이 라면. / logs / net 폴 더 를 보십시오.FLogger. log / debug / info /. warn /. error /. fatal 을 통 해 출력 된 로그 라면. / logs / business 폴 더 를 보십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.