pomelo-logger
pomelo-logger copied to clipboard
我在log4js.json中自定义了几个category,在代码中使用它,但日志不能生成到文件中,只输出到控制台
我在log4js.json中自定义了几个category,在代码中使用它,但日志不能生成到文件中,只输出到控制台。 请问是什么原因,还要配置什么呢
1:var rpc_logger = require('pomelo-logger').getLogger('rpc-log', __filename);
对应的category你使用了吗
2:log4js.json 怎么写的?
{ "appenders": [ { "type": "console" }, { "type": "dateFile", "filename": "./logs/spider.log", "pattern": "-yyyy-MM-dd", "maxLogSize": 1048576, "layout": { "type": "basic" } ,"backups": 5, "category":"spider" } , { "type": "dateFile", "filename": "./logs/sendprice.log", "pattern": "-yyyy-MM-dd", "maxLogSize": 1048576, "layout": { "type": "basic" } ,"backups": 5, "category":"sendprice" }, { "type": "dateFile", "filename": "./logs/process.log", "pattern": "-yyyy-MM-dd", "maxLogSize": 1048576, "layout": { "type": "basic" } ,"backups": 5, "category":"process" } ],
"levels": { "process":"DEBUG", "sendprice":"DEBUG", "spider":"DEBUG", "con-log" : "DEBUG", "admin-log" : "DEBUG", "crash-log" : "DEBUG", "pomelo" : "DEBUG", "rpc-log" : "DEBUG", "forward-log": "DEBUG" },
"replaceConsole": true,
"lineDebug": true }
这是我的log4js.json,其中pomelo的category这里我就不帖上来了
我使用的代码: var logger = require('pomelo-logger').getLogger("spider", game_code, process.pid);
var var1 = “world” logger.debug("hello %s",var1); 控制台输出hello world 但spider日志文件是空
有人出来帮助一下吗?
你 levels 不要配试试?
level配置去掉了,但还是没有写到日志文件中,日志文件还是空的 如果不配置level默认是什么级别?
而且控制台日志的输出总觉得有点怪:
[32m[2013-11-30 08:57:10.729] [INFO] console - [39m[36m[2013-11-30 08:57:10.729] [DEBUG] spider - .....
先是[INFO] console -然后是[DEBUG] spider -
我感觉应该没有[INFO] console -这一节,应该直接就是[DEBUG] spider -
升级pomelo为0.7.5问题不存在了,但有时会报 log4js.fileAppender - Writing to file logs/process.log, error happened [Error: write after end]
升级到pomelo 0.8.1后又不能写到日志文件了
情况能具体描述一下吗?哪里的日志写不到文件里。
我也碰到这个问题了~~ 会不会是因为在自己的逻辑代码中require的pomelo-logger(这个是在自己的工程中npm install的)和pomelo的代码中require的pomelo-logger不是同一份导致的?
------ 实验结果分割线 -----
已证实上面的想法: 简单测试: log4js.json中配置:
{
"type": "file",
"filename": "${opts:base}/logs/gameplay-${opts:serverId}.log",
"maxLogSize": 1048576,
"layout": {
"type": "basic"
}
,"backups": 5,
"category":"gameplay"
},
在创建的工程中引入pomelo-logger, 并在app.js于pomelo.createApp()后添加一行
require('pomelo-logger').getLogger('gameplay', __filename).info("hello world");
在pomelo的lib/application.js的init函数最后一行添加
require('pomelo-logger').getLogger('gameplay', __filename).info("this'is bad");
生成的log文件中只出现了一行:
[INFO] gameplay - 68: [/Users/bibi/SourceCode/pomelo/lib/application.js] this'is bad
------ 解决方案询问 -----
- 是否需要在自己的代码中重新进行一下logger.configure?
- 或为pomelo导出logger?
- 或者干脆不用logger而直接用log4js...
------ 临时解决方案 -----
在createApp后添加此段,即上文第一个解决方案后,文件写入正常!
var serverId = app.getServerId();
var base = app.getBase();
require('pomelo-logger').configure( base+"/config/log4js.json" , {serverId: serverId, base: base} );
pomelo 里面的日志是根据game-server/config/log4js.json进行配置;项目如果需要通过pomelo-logger打日志也可以用这个配置,只是需要重新configure一下。
同意@btspoony 所说,确实有这个问题,目前我这边0.8.0也发现自定义日志无法写入,确实由于加载的pomelo-logger包不是一个所致,建议在app里增加一个logger的api,这样就方便我们打日志了。
目前我解决方法是修改pomelo源码的\node_modules\pomelo\lib\util\log.js
下增加
/**
* Configure pomelo logger
*/
module.exports.configure = function(app, filename) {
var serverId = app.getServerId();
var base = app.getBase();
logger.configure(filename, {serverId: serverId, base: base});
app.logger = logger; //增加这个
};
使用也挺简单
var logger = this.app.logger.getLogger('pomelo-gate');
logger.error('*********************** %s', 'mylog mylog');
不知道这样会不会有问题
把logger挂在application下面是可以的,就是感觉写起来比较麻烦;其实只需要在项目中配置一下logger就可以用了。
发现个问题当node_modules/pomelo/node_modules/也存在pomelo-logger库的时候会出现这个问题。删掉这个依赖库就好了,只要node_modules/下有这个库就行了
我现在Pomelo版本是1.0.3,pomelo-logger版本是0.1.6,按照pomelo-logger的README的做法也出现日志无法写入文件的问题
@shinelazy 确实管用,谢谢 @shinelazy
@shinelazy 确实是这样的
Works! 感谢 @shinelazy
同样的问题,采用的 在app.js中 重新配置的方法
var serverId = app.getServerId(); var base = app.getBase(); require('pomelo-logger').configure( base+"/config/log4js.json" , {serverId: serverId, base: base} );
当game-server/node_modules/pomelo-logger 和 game-server/node_modules/pomelo/mode_modules/pomelo-logger同时存在时,发生此问题,删掉pomelo下的pomelo-logger试试。 参考链接:http://blog.csdn.net/ctbinzi/article/details/39231543
同问,只能输出控制台而不输出到日志文件,但日志文件有生成
调用
var pomelo = require('pomelo-logger')
pomelo.configure(path.join(__dirname, '../logger.json'))
var logger = pomelo.getLogger('log', __filename, process.pid)
配置文件
{
"appenders": [
{
"type": "console"
},
{
"type": "file",
"filename": "./logs/con-log-${opts:serverId}.log",
"pattern": "connector",
"absolute": true,
"layout": {
"type": "basic"
},
"alwaysIncludePattern": true,
"category": "logInfo"
}
],
"levels": {
"logInfo": "DEBUG"
},
"replaceConsole": true,
"lineDebug": true,
"rawMessage": true
}
@shinelazy 感谢