SOUI官方论坛

 找回密码
 立即注册
查看: 47|回复: 0

【新手入门】【soui日志】soui log设置属性但是不生效

[复制链接]

该用户从未签到

36

主题

75

帖子

355

积分

02:00元婴期

Rank: 3Rank: 3

积分
355
发表于 2019-12-9 22:10:15 | 显示全部楼层 |阅读模式
soui提供了基本的日志功能,但是有时候需要自己做一些改变,比如改变日志的等级和日志的路径。
之前我自己试了下,没有成功,先放下失败的代码
  1. if(pComMgr->CreateLog4z((IObjRef**)&pLogMgr))
  2.                         {
  3.                                 if(pLogMgr)
  4.                                 {
  5.                                         LoggerId logId = pLogMgr->createLogger(LOG_NAME);//support output soui trace infomation to log
  6.                                        
  7.                                         //从配置文件中加载日志的等级
  8.                                         int loglevel = PocoModuleWrapper::config()->getInt(ci_log_level, LOG_LEVEL_WARN);
  9.                                         string app_dir = app::util::get_app_dir_a();
  10.                                         app_dir += "log\";
  11.                                         bool setpathret = pLogMgr->setLoggerPath(logId, app_dir.c_str());                        

  12.                                         //默认的level不是trace等级,这边手动设置下(但是似乎没有成功)
  13.                                         bool ret = pLogMgr->setLoggerLevel(logId, loglevel);
  14.                                         if (!ret)
  15.                                         {
  16.                                                 SMessageBox(NULL, L"设置日志等级失败", L"系统错误", MB_ICONWARNING);
  17.                                         }
  18.                                        
  19.                                         pLogMgr->start();
  20.                                 }
  21.                         }

  22.                         theApp->SetLogManager(pLogMgr);
  23.                         SLOG_TRACE("日志初始化成功");
  24.                 }
复制代码

上面的代码就是设置下日志的路径,别的也没啥了,但是我实际使用(slog_debug)的时候还是不行,日志还是在以前的目录。
后来,去群里问了下,大佬说自己看代码,那就自己查了下,下面说下是什么情况。
我们常用的日志输出宏是slog_debug这类宏,至少我是,这个实际上是指明了logid为多少的log进行输出。

  1. #define SLOG_DEBUG(log) LOGD(LOG_FILTER, log)

  2. #define LOGD(filter, log ) LOG_DEBUG(SOUI::LOG4Z_MAIN_LOGGER_ID, filter,log )
复制代码

上面实际是指定logid为 SOUI::LOG4Z_MAIN_LOGGER_ID 的logger进行输入。

但是我们实际设置路径的logger的id是多少呢?我这边是1,实际情况看你自己create了多少个log。
我们设置logid为1的logger,指定他的路径,但是我们去输出的时候却还是使用id为0的logger,当然达不到想要的效果。

2个解决办法:
1.自己定义实际使用的宏,并且指定正确的logid
2.不创建新的logger,使用系统现有的logger,就像下面这种

  1. LoggerId logId = SOUI::LOG4Z_MAIN_LOGGER_ID; //pLogMgr->createLogger(LOG_NAME);//support output soui trace infomation to log
复制代码

然后,log4z这个似乎不更新了,作者好像又搞了个fnlog,用C++11写的,奈何我是 vs2008的环境,没法用,没多少了解。
log4z的这个项目现在用C++03/98的编译器好像编译不了了,作者提供的编译好的解决方案是vs2015的,看看别的日志库吧。

放个链接:
log4z项目github主页:https://github.com/zsummer/log4z

github上还有个awsome-cpp的项目,有兴趣的可以去看下。


谢谢。






您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|SOUI官方论坛 ( 粤ICP备18103663号-2 )

GMT+8, 2020-1-23 18:48

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表