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 ...
随机推荐
- 算法 UVA 11300
例3:题目描述 圆桌旁边坐着n个人,每个人有一定数量的金币,金币的总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数量相等.你的任务是求出被转手的金币的数量的最小值. 输入格式 ...
- 【题解】 [NOI1999]生日蛋糕
题面 传送门 Solution 搜索每一层的半径和高度,然后加入一些剪枝就好了. #include<stdio.h> #include<stdlib.h> #include&l ...
- pandas set_index() reset_index()
set_index() 官方定义: 使用一个或多个现有列设置索引, 默认情况下生成一个新对象 DataFrame.set_index(keys, drop=True, append=False, ...
- 使用ActiveMQ实现简易聊天功能
一 什么是消息队列 我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用.消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰. ...
- 在Java中如何优雅地判空
判空灾难 作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointerException. 不过NullPointerException对于很多猿们来 ...
- C# Winform下一个热插拔的MIS/MRP/ERP框架14(自动更新)
对于软件来说,启用自动更新是非常必要的. 根据软件的应用场景,我们可以设计不同的更新模型. 目前,IMES框架运行在.Net framework 4.0下面,使用的Win系统版本在Win7,域内管控, ...
- iptables总结
iptables: 包过滤型防火墙 Firewall: 防火墙,隔离工具:工作于主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所匹配到 ...
- vue-cli中的webpack打包配置
如下: assetsSubDirectory: 'static', assetsPublicPath: '/projectName/', 其中assetsSubDirectory是代表服务器上的实际路 ...
- POJ3321 Apple Tree (JAVA)
树形数组题,有一定难度. 首先得搞清楚树形数组是什么 - 它是建立在原始数组上的统计数组 - 目的:方便对原始数组进行切片统计,主要用于统计切片的累加和 其实你可以对切片进行扫描,把元素一个一个加起来 ...
- Netty 5 获取客户端IP(非HTTP)
使用Netty 5.0.0.Alpha2时,想知道客户端的ip以区分客户端,发现网上都是通过解析HTTP头域完成的,这里提供一种比较简单的方法. System.out.println("Cl ...