NetEase / pomelo-logger

logger wrapper of log4js for pomelo logger system
MIT License
25 stars 47 forks source link

我在log4js.json中自定义了几个category,在代码中使用它,但日志不能生成到文件中,只输出到控制台 #1

Open ydhl opened 10 years ago

ydhl commented 10 years ago

我在log4js.json中自定义了几个category,在代码中使用它,但日志不能生成到文件中,只输出到控制台。 请问是什么原因,还要配置什么呢

fantasyni commented 10 years ago

1:var rpc_logger = require('pomelo-logger').getLogger('rpc-log', __filename);
对应的category你使用了吗
2:log4js.json 怎么写的?

ydhl commented 10 years ago

{ "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日志文件是空

ydhl commented 10 years ago

有人出来帮助一下吗?

fantasyni commented 10 years ago

你 levels 不要配试试?

ydhl commented 10 years ago

level配置去掉了,但还是没有写到日志文件中,日志文件还是空的 如果不配置level默认是什么级别?

ydhl commented 10 years ago

而且控制台日志的输出总觉得有点怪:

[2013-11-30 08:57:10.729] [INFO] console - [2013-11-30 08:57:10.729] [DEBUG] spider - .....

先是[INFO] console -然后是[DEBUG] spider -

我感觉应该没有[INFO] console -这一节,应该直接就是[DEBUG] spider -

ydhl commented 10 years ago

升级pomelo为0.7.5问题不存在了,但有时会报 log4js.fileAppender - Writing to file logs/process.log, error happened [Error: write after end]

ydhl commented 10 years ago

升级到pomelo 0.8.1后又不能写到日志文件了

py8765 commented 10 years ago

情况能具体描述一下吗?哪里的日志写不到文件里。

btspoony commented 10 years ago

我也碰到这个问题了~~ 会不会是因为在自己的逻辑代码中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

------ 解决方案询问 -----

------ 临时解决方案 -----

在createApp后添加此段,即上文第一个解决方案后,文件写入正常!

var serverId = app.getServerId();
var base = app.getBase();
require('pomelo-logger').configure( base+"/config/log4js.json" , {serverId: serverId, base: base} );
py8765 commented 10 years ago

pomelo 里面的日志是根据game-server/config/log4js.json进行配置;项目如果需要通过pomelo-logger打日志也可以用这个配置,只是需要重新configure一下。

DoubleSpout commented 10 years ago

同意@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');

不知道这样会不会有问题

py8765 commented 10 years ago

把logger挂在application下面是可以的,就是感觉写起来比较麻烦;其实只需要在项目中配置一下logger就可以用了。

shinelazy commented 10 years ago

发现个问题当node_modules/pomelo/node_modules/也存在pomelo-logger库的时候会出现这个问题。删掉这个依赖库就好了,只要node_modules/下有这个库就行了

ctbinzi commented 10 years ago

我现在Pomelo版本是1.0.3,pomelo-logger版本是0.1.6,按照pomelo-logger的README的做法也出现日志无法写入文件的问题

ctbinzi commented 10 years ago

@shinelazy 确实管用,谢谢 @shinelazy

zhaoyier commented 9 years ago

@shinelazy 确实是这样的

Lellansin commented 9 years ago

Works! 感谢 @shinelazy

jipan25 commented 8 years ago

同样的问题,采用的 在app.js中 重新配置的方法

var serverId = app.getServerId(); var base = app.getBase(); require('pomelo-logger').configure( base+"/config/log4js.json" , {serverId: serverId, base: base} );

ztidal commented 8 years ago

当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

jeff-ccj commented 8 years ago

同问,只能输出控制台而不输出到日志文件,但日志文件有生成

调用

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
}
smilence86 commented 7 years ago

@shinelazy 感谢