2013-04-01 42 views
3

如何使用C++中的FireBreath构建的NPAPI插件输出日志消息。
日志在开发和测试期间和/或在Debug版本中应该可用。Firebreath NPAPI插件如何登录


修改

的FireBreath地记录与Log4cplus,我试图尽可能接近我可以实现这些指令。
我将add_firebreath_library(log4cplus)添加到“PluginConfig.cmake”的底部。

我还没有能够创造,我可以在Windows 8.读我已经通过其他资源,比如这个浏览日志文件:FBLOG_TRACE() No logging to Logfile -- FBLOG_INFO() logging OK -- What is the DIFFERENCE

到目前为止,都是我的日志尝试如下:

#include "logging.h" 
... 
FBLOG_INFO("my function name", "and some text"); 

可选调试级别

我不知道如果我要重写getLogLevel(),因为我很高兴与默认级别,我不知道究竟把它放在哪里,如果我做覆盖它:

FB::Log::LogLevel getLogLevel(){ 
    return FB::Log::LogLevel_Trace; // Now Trace and above is logged. 
} 

日志文件路径

我也不确定正确的路径来写日志文件在窗口中。我曾尝试:

- outMethods.push_back(std::make_pair(FB::Log::LogMethod_File, "C:/logs/XXXX/yyyy.log")); 
- outMethods.push_back(std::make_pair(FB::Log::LogMethod_File, "C:\logs\XXXX\yyyy.log")); 
- outMethods.push_back(std::make_pair(FB::Log::LogMethod_File, "/logs/XXXX/yyyy.log")); 
etc. 

准备脚本错误

在“PluginConfig.cmake”使Log4cplus后与add_firebreath_library(log4cplus),我得到了我的prep在Windows脚本一些“未找到”的错误,但脚本似乎成功完成,并且我的插件没有错误地构建,所以我选择了迄今为止忽略这些错误。但是,它们是:

注意:部分路径替换为'XXXXX'。

Z:\XXXXX\firebreath>firebreath-dev\prep2010.cmd projects fbbuildwin 
A subdirectory or file fbbuildwin already exists. 
Using projects in: "Z:\XXXXX\firebreath\projects" 
Generating build files in: "Z:\XXXXX\firebreath\fbbuildwin" 
NOTE: The build files in "Z:\XXXXX\firebreath\fbbuildwin" should *NEVER* be modified directly. 
When needed, make project changes in cmake files and re-run this script. 
    Project-specific cmake files are found in [plugin dir]\CMakeLists.txt and 
    [plugin dir]\Win\projectDef.cmake. 
Note that parameters for cmake should be enclosed in double quotes, e.g. "-DVERBOSE=1" 
CMAKE parameters: 
Z:\XXXXX\firebreath\fbbuildwin>cmake -G "Visual Studio 10" -DFB_PROJECTS_DIR="Z:\dmanpearl On My Mac\pixelmonks\LaasTech\firebreath\projects" "Z:\XXXXX\firebreath\firebreath-dev" 
-- Balanced size/speed optimization project dir: Z:/XXXXX/firebreath/projects 
-- Looking for include file pthread.h 
-- Looking for include file pthread.h - not found 
-- Found Threads: TRUE 
-- Threads: 
-- Looking for include file dlfcn.h 
-- Looking for include file dlfcn.h - not found 
-- Looking for include file errno.h 
-- Looking for include file errno.h - found 
-- Looking for include file iconv.h 
-- Looking for include file iconv.h - not found 
-- Looking for include file limits.h 
-- Looking for include file limits.h - found 
-- Looking for include file sys/types.h 
-- Looking for include file sys/types.h - found 
-- Looking for include file sys/socket.h 
-- Looking for include file sys/socket.h - not found 
-- Looking for include file sys/syscall.h 
-- Looking for include file sys/syscall.h - not found 
-- Looking for include file sys/time.h 
-- Looking for include file sys/time.h - not found 
-- Looking for include file sys/timeb.h 
-- Looking for include file sys/timeb.h - found 
-- Looking for include file sys/stat.h 
-- Looking for include file sys/stat.h - found 
-- Looking for include file sys/file.h 
-- Looking for include file sys/file.h - not found 
-- Looking for include file syslog.h 
-- Looking for include file syslog.h - not found 
-- Looking for include file arpa/inet.h 
-- Looking for include file arpa/inet.h - not found 
-- Looking for include file netinet/in.h 
-- Looking for include file netinet/in.h - not found 
-- Looking for include file netinet/tcp.h 
-- Looking for include file netinet/tcp.h - not found 
-- Looking for include file netdb.h 
-- Looking for include file netdb.h - not found 
-- Looking for include file unistd.h 
-- Looking for include file unistd.h - not found 
-- Looking for include file fcntl.h 
-- Looking for include file fcntl.h - found 
-- Looking for include file stdio.h 
-- Looking for include file stdio.h - found 
-- Looking for include file stdarg.h 
-- Looking for include file stdarg.h - found 
-- Looking for include file stdlib.h 
-- Looking for include file stdlib.h - found 
-- Looking for include file time.h 
-- Looking for include file time.h - found 
-- Looking for include file wchar.h 
-- Looking for include file wchar.h - found 
-- Looking for include file inttypes.h 
-- Looking for include file inttypes.h - not found 
-- Looking for include file memory.h 
-- Looking for include file memory.h - found 
-- Looking for include file stdint.h 
-- Looking for include file stdint.h - found 
-- Looking for include file strings.h 
-- Looking for include file strings.h - not found 
-- Looking for include file string.h 
-- Looking for include file string.h - found 
-- Looking for 5 include files stdlib.h, ..., float.h 
-- Looking for 5 include files stdlib.h, ..., float.h - found 
-- Looking for gmtime_r 
-- Looking for gmtime_r - not found 
-- Looking for localtime_r 
-- Looking for localtime_r - not found 
-- Looking for gettimeofday 
-- Looking for gettimeofday - not found 
-- Looking for getpid 
-- Looking for getpid - found 
-- Looking for ftime 
-- Looking for ftime - found 
-- Looking for stat 
-- Looking for stat - found 
-- Looking for lstat 
-- Looking for lstat - not found 
-- Looking for fcntl 
-- Looking for fcntl - not found 
-- Looking for lockf 
-- Looking for lockf - not found 
-- Looking for flock 
-- Looking for flock - not found 
-- Looking for htons 
-- Looking for htons - not found 
-- Looking for ntohs 
-- Looking for ntohs - not found 
-- Looking for htonl 
-- Looking for htonl - not found 
-- Looking for ntohl 
-- Looking for ntohl - not found 
-- Looking for vsnprintf 
-- Looking for vsnprintf - found 
-- Looking for _vsnprintf 
-- Looking for _vsnprintf - found 
-- Looking for vsprintf_s 
-- Looking for vsprintf_s - found 
-- Looking for vswprintf_s 
-- Looking for vswprintf_s - found 
-- Looking for vfprintf_s 
-- Looking for vfprintf_s - found 
-- Looking for vfwprintf_s 
-- Looking for vfwprintf_s - found 
-- Looking for _vsnprintf_s 
-- Looking for _vsnprintf_s - found 
-- Looking for _vsnwprintf_s 
-- Looking for _vsnwprintf_s - found 
-- Looking for mbstowcs 
-- Looking for mbstowcs - found 
-- Looking for wcstombs 
-- Looking for wcstombs - found 
-- Looking for ENAMETOOLONG 
-- Looking for ENAMETOOLONG - found 
-- Looking for SYS_gettid 
-- Looking for SYS_gettid - not found 
-- Looking for __FUNCTION__ 
-- Looking for __FUNCTION__ - found 
-- Looking for __PRETTY_FUNCTION__ 
-- Looking for __PRETTY_FUNCTION__ - not found 
-- Looking for __func__ 
-- Looking for __func__ - not found 
-- Performing Test LOG4CPLUS_HAVE___SYNC_ADD_AND_FETCH 
-- Performing Test LOG4CPLUS_HAVE___SYNC_ADD_AND_FETCH - Failed 
-- Performing Test LOG4CPLUS_HAVE___SYNC_SUB_AND_FETCH 
-- Performing Test LOG4CPLUS_HAVE___SYNC_SUB_AND_FETCH - Failed 
-- Performing Test LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS 
-- Performing Test LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS - Failed 
-- Performing Test LOG4CPLUS_HAVE_C99_VARIADIC_MACROS 
-- Performing Test LOG4CPLUS_HAVE_C99_VARIADIC_MACROS - Success 
-- Looking for clock_gettime 
-- Looking for clock_gettime - not found 
-- Looking for clock_nanosleep 
-- Looking for clock_nanosleep - not found 
-- Looking for nanosleep 
-- Looking for nanosleep - not found 
-- Looking for gethostbyname_r 
-- Looking for gethostbyname_r - not found 
-- Looking for getaddrinfo 
-- Looking for getaddrinfo - not found 
-- Performing Test HAVE_ATTRIBUTE_VISIBILITY 
-- Performing Test HAVE_ATTRIBUTE_VISIBILITY - Failed 
-- Performing Test HAVE_DECLSPEC_DLLEXPORT 
-- Performing Test HAVE_DECLSPEC_DLLEXPORT - Success 
-- Performing Test HAVE_CXX11_THREAD_LOCAL 
-- Performing Test HAVE_CXX11_THREAD_LOCAL - Failed 
-- Performing Test HAVE_GCC_THREAD_EXTENSION 
-- Performing Test HAVE_GCC_THREAD_EXTENSION - Failed 
-- Performing Test HAVE_DECLSPEC_THREAD 
-- Performing Test HAVE_DECLSPEC_THREAD - Success 
-- Performing Test LOG4CPLUS_HAVE_CXX11_ATOMICS 
-- Performing Test LOG4CPLUS_HAVE_CXX11_ATOMICS - Failed 
-- Looking for sys/types.h 
-- Looking for sys/types.h - found 
-- Looking for stddef.h 
-- Looking for stddef.h - found 
-- Check size of socklen_t 
-- Check size of socklen_t - failed 
Adding library log4cplus 
Generating plugin configuration files in Z:/XXXXX/firebreath/fbbuildwin/projects/LaasTech/gen 
-- Configuring done 
-- Generating done 
-- Build files have been written to: Z:/XXXXX/firebreath/fbbuildwin 

我的环境

我目前正在建设我在Mac和Windows(山狮和Windows 8)的插件。

我在以下浏览器测试:

  1. 的Mac:Safari浏览器Chrome的&。
  2. Windows:IE 10和Chrome。

FWIW:My Win开发安装位于Mac VMWare Fusion v5.0 Guest中。

摘要

请帮我拿Log4cplus在我的插件工作与访问日志文件。

回答

3

看起来你是在正确的轨道上,但是你错过了一个非常重要的一块 - 你不能写入到C:\日志,因为只有管理员有权这样做。

至于“未找到”的“错误”,这些都不是错误的...只是状态消息。这是构建log4cplus的一部分,它希望看到你的平台支持什么。你可以放心地忽略这些。

如果你看看Tips and Tricks页面上,你会发现一些useful examples

主要一个我指的是来自from a gist I created some time back;您需要使用add_boost_library(文件系统),但是您可以使用此代码来查找将日志放入其中的有效位置。代码当前会检测日志路径(它将在%AppData%\ LocalLow \ CompanyName \ logs中)这个代码)存在,并且只有写入日志。它还使用时间戳和进程ID来确保插件实例的唯一性。

#include <boost/filesystem.hpp> 
#include "SystemHelpers.h" 
using namespace boost::filesystem; 

/// ... 


void getLoggingMethods(FB::Log::LogMethodList& outMethods) 
{ 
    path appDataPath = FB::System::getLocalAppDataPath("CompanyName"); 

    path logDirPath = appDataPath/"logs"; 
    if (exists(logDirPath) && is_directory(logDirPath)) { 
     std::stringstream ss; 
     time_t seconds = time(NULL); 
     boost::thread::id threadId = boost::this_thread::get_id(); 
     ss << seconds << "_" << threadId << ".log"; 

     path logPath = logDirPath/ss.str(); 

     fprintf(stderr, "logging to %s", logPath.string().c_str()); 
     outMethods.push_back(std::make_pair(FB::Log::LogMethod_File, logPath.string())); 
    } 
#ifndef NDEBUG 
    outMethods.push_back(std::make_pair(FB::Log::LogMethod_Console, std::string())); 
#endif 
} 


// ... 
+0

感谢RB!日志记录现在运行良好。 –