log4js日志
安装log4js:npm install log4js
express中配置log4js中间件:
var log = require("./modules/utils/logUtil.js");
log.use(app);
logUtil工具类:
/**
* Created by Administrator on 2015/9/8.
*/
"use strict"; var helper = {};
var log4js = require('log4js');
var fs = require("fs");
var path = require("path");
var dbOperate = require("./dbUtil.js");
helper.levels = {
FATAL: log4js.levels.FATAL,
ERROR: log4js.levels.ERROR,
WARN: log4js.levels.WARN,
DEBUG: log4js.levels.DEBUG,
INFO: log4js.levels.INFO
};
helper.config =
{
"appenders": [
{
"type": "console",
"category": "console"
},
{
"filename": "logs/",
"pattern": "yyyyMMdd.log",
"category": "logInfo",
"type": "dateFile",
"alwaysIncludePattern": true,
"level":"INFO"
}
],
"replaceConsole": true
}; // 加载配置文件
//var objConfig = JSON.parse(fs.readFileSync(path.join(__dirname + "/config"), "utf8"));
log4js.configure(helper.config);
var logInfo = log4js.getLogger('logInfo');
var name = null; /**
* 日志保存
* @param req request请求,用于获取ip、url等信息
* @param operateType 操作类型,例如:0000-登录,1111-退出
* @param operateData 被操作的数据
* @param category 日志类别(日志模块类别)
* @param results 操作结果
* @param msg log信息
* @param logLevel 日志level:详见helper.levels
*/
helper.saveLogFile = function (req, operateType,operateData, category, results, msg, logLevel) {
var logLevel = logLevel.toString();
var conf =
{
"appenders": [
{
"type": "console",
"category": "console"
},
{
"filename": "logs/",
"pattern": "yyyyMMdd.log",
"category": category,
"type": "dateFile",
"alwaysIncludePattern": true,
"level":logLevel
}
],
"replaceConsole": true
};
log4js.configure(conf);
name = log4js.getLogger(category);
if (msg == null)
msg = "";
var username;
if(typeof req.session.user != "undefined"){
username = req.session.user.username;
}else{
username = req.body.username;
}
switch (logLevel) {
case 'ERROR':
name.error("msg:" + msg + "user:" + username + "ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
case 'WARN':
name.warn("msg:" + msg + " user:" + username + " ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
case 'DEBUG':
name.debug("msg:" + msg + " user:" + username + " ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
case 'FATAL':
name.fatal("msg:" + msg + " user:" + username + " ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
default:
name.info("msg:" + msg + " user:" + username + " ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
}
}; /**
* 日志保存
* @param req request请求,用于获取ip等信息
* @param operateType 操作类型,例如:0000-登录,1111-退出
* @param operateData 被操作的数据
* @param category 日志类别(日志模块类别)
* @param results 操作结果
* @param msg log信息
* @param logLevel 日志level:info、debug、warn、error、fatal 0-5
*/
helper.saveLog = function (req, operateType, operateData, category, results, msg, logLevel) {
var username;
if(typeof req.session.user != "undefined"){
username = req.session.user.username;
}else{
username = req.body.username;
}
var logData = {
'category': category,
'username': username,
'agent': req.get("User-Agent"),
'operateType': operateType,
'ip': req.ip,
'operateData': operateData,
'url': req.originalUrl,
'results': results,
'msg': msg,
'logLevel': logLevel
};
dbOperate.insert(logData, "dbo.sysLog", function (results) {
console.log(results);
}, "");
}; // 配合express用的方法
exports.use = function (app) {
//页面请求日志, level用auto时,默认级别是WARN
app.use(log4js.connectLogger(logInfo, {level: 'INFO'})); //, format:':method :url'
}; exports.helper = helper;
其中helper.config里面配置log4js:
appenders:数组对象,表示log输出的路径,每一个元素都是一个appender,主要包括:console-控制台输出、dateFile-根据日期配置自动生成当前日期下的日志、file-纯粹在一个文件中输出
type:日志输出类型 pattern:日志输出格式 category:日志类别 alwaysIncludePattern:是否始终以pattern指定格式输出日志 level:日志输出级别 replaceConsole:是否以log4js格式在控制台输出控制台自身log
输出log目录(log目录必须手动先行创建):

log内容:
[2015-09-09 17:46:20.421] [INFO] logInfo - ::1 - - "GET /javascripts/jquery-easyui-1.4.3/themes/default/images/calendar_arrows.png HTTP/1.1" 304 - "http://localhost:3000/javascripts/jquery-easyui-1.4.3/themes/default/easyui.css" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:26.350] [INFO] logInfo - ::1 - - "POST /user/add HTTP/1.1" 200 16 "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:26.452] [INFO] logInfo - ::1 - - "POST /user/list HTTP/1.1" 200 1966 "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:28.872] [INFO] logInfo - ::1 - - "POST /user/list HTTP/1.1" 200 606 "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:28.883] [INFO] logInfo - ::1 - - "GET /upload/0.3529507869388908.png HTTP/1.1" 304 - "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:28.884] [INFO] logInfo - ::1 - - "GET /upload/0.09649713477119803.png HTTP/1.1" 304 - "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:28.892] [INFO] logInfo - ::1 - - "GET /upload/0.4691608641296625.png HTTP/1.1" 200 27561 "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
数据库中log表内容:

log4js日志的更多相关文章
- Node.js log4js日志记录
这次需要给之前弄的文件服务器添加日志记录,一般每天产生的日志会特别多所以安装日期来划分是最好的,这里我用了express框架,为了适应express框架这里在log.js文件中写了use方法. //日 ...
- Nodejs 使用log4js日志
一.创建log4.js文件,保存日志到log文件,并在控制台输出,如果不控制台输出,把删除红色的代码 const log4js = require('log4js'), path = require( ...
- nodejs之log4js日志记录模块简单配置使用
在我的一个node express项目中,使用了log4js来生成日志并且保存到文件里,生成的文件如下: 文件名字叫:access.log 如果在配置log4js的时候允许了同时存在多个备份log文件 ...
- log4js日志配置问题
http://blog.csdn.net/cdnight/article/details/50857268 在做项目中,我们的node日志采用的是log4js框架,使用文件方式存储,但在后面的需求中增 ...
- nodejs之日志管理
开发一个项目时,可以通过控制台输出或者debug来获取到项目的运行信息.当项目上线时,我们就需要通过日志来分析.如同Java的log4j,nodejs中也有相关的log4js.使用过log4j的同学应 ...
- express+gulp构建项目(四)env环境变量
这里的文件的作用是负责设置env环境变量和日志. index.js try { require('dotenv').load({silent: true}); //dotenv从一个.env文件中读取 ...
- node.js 接口调用示例
测试用例git地址(node.js部分):https://github.com/wuyongxian20/node-api.git 项目架构如下: controllers: 文件夹下为接口文件 log ...
- node 日志管理log4js
node 日志管理log4js 一.默认的控制台输出 我们使用express框架时,开发模式用node或者supervisor启动nodejs应用时,控制台都是显示如下的日志. GET /css/bo ...
- 玩转Nodejs日志管理log4js(转)
转自:http://blog.fens.me/nodejs-log4js/ 前言 日志对任何的应用来说都是至关重要的.在Nodejs中使用express框架并没有自带的日志模块,我们可以选择log4j ...
随机推荐
- BOI2007 Mokia | cdq分治求二维点数模板
题目链接:戳我 也没什么,其实主要就是为了存一个求二维坐标上矩形内点的个数的模板.为了之后咕咕咕地复习使用 不过需要注意的一点是,树状数组传x的时候可千万不要传0了!要不然会一直死循环的...qwqw ...
- 不得不说fdm真的好用
记忆力太差系列 挺好用的软件 下载器FDM真的很好用
- CodeForces - 396C On Changing Tree(树状数组)
题目大意 给定一棵以1为根的树,初始时所有点为0 给出树的方式是从节点2开始给出每一个点的父亲 然后是 $m$ 次操作,分为两种 $1 v,k,x$ 表示在以v为根的子树中的每一个点上添加 $x-i* ...
- miniui表单验证守则总结
1,页面效果图 2,代码实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- 北航软院2012级C#期末考试部分考题解答
博主注:本渣渣水平有限,文中若有不对的地方敬请指出,谢谢. 本文中大部分图片来自老师的PPT,感谢邵老师,想要的可以点击右边QQ联系我:) 一.选择题(2*15=30) 1.In C# what is ...
- NVIDIA Jetson TX2刷机
官方安装教程 JetPack下载 主机端环境准备 需要在PC端安装虚拟机,虚拟机中安装Ubuntu14.04系统. 按照上面的地址下载JetPack-L4T-3.1-linux-x64.run 主机端 ...
- 2017 FVDI2 ABRITES Commander with 18 Softwares FULL Version + FLY OBD Terminator + J2534 DrewTech Softwares
Highlights of FVDI2 Abrites Commander Full Version: 1.Free update online. 2.This is full version FVD ...
- Java生成树关系的菜单
1.菜单bean public class Menu { private String id; private String menuname; private String parentid; pr ...
- checkbox 框 选中判断
function checkAll(checktop){ $(":checkbox[name='id']").prop("checked",checktop.c ...
- Kettle 中生成随机数 或者GUID唯一标识符
添加步骤 "生成随机数" 英文名字叫 "Generate Random Value" 如下图..选择UUID..