简体   繁体   English

Firebreath NPAPI插件如何记录

[英]Firebreath NPAPI Plugin How to Log

How to output log messages with an NPAPI plugin built with FireBreath in C++. 如何使用C ++中的FireBreath内置的NPAPI插件输出日志消息
The log should be available during development and test and/or in Debug builds. 在开发和测试期间和/或在Debug版本中,日志应该可用。


Modified : 已修改

The FireBreath way to log is with Log4cplus , and I have attempted to implement as closely as I can to these instructions. FireBreath的记录方式是使用Log4cplus ,并且我已尝试尽可能接近这些说明来实施。
I appended add_firebreath_library(log4cplus) to the bottom of "PluginConfig.cmake". 我将add_firebreath_library(log4cplus)附加到“ PluginConfig.cmake”的底部。

I have not yet been able to create a log file that I can read on Windows 8. I have browsed through other resources, such as this: FBLOG_TRACE() No logging to Logfile -- FBLOG_INFO() logging OK -- What is the DIFFERENCE 我尚未能够创建可在Windows 8上读取的日志文件。我浏览了其他资源,例如: FBLOG_TRACE()未记录到日志文件-FBLOG_INFO()正在记录OK-区别是什么

So far, all of my logging attempts are as follows: 到目前为止,我所有的日志记录尝试如下:

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

Optional Debug Level : 可选的调试级别

I am not sure if I have to override getLogLevel() because I am happy with the default level of INFO , and I am not sure exactly where to put it if I do override it: 我不知道如果我要重写getLogLevel()因为我很高兴的默认级别INFO ,我不知道究竟放在哪里,如果我做覆盖它:

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

Log File Path : 日志文件路径

I am also uncertain about the proper path to writing the log file in windows. 我也不确定在Windows中写入日志文件的正确路径。 I have tried: 我试过了:

- 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.

Prep Script Errors : 准备脚本错误

After enabling Log4cplus in "PluginConfig.cmake" with add_firebreath_library(log4cplus) , I get some "not found" errors in my prep script on Windows, but the script otherwise appears to complete successfully, and my plugin builds without error, so I have chosen to so far ignore these errors. 在使用add_firebreath_library(log4cplus)在“ PluginConfig.cmake”中启用Log4cplus之后,我在Windows上的prep脚本中遇到一些“未找到”错误,但是该脚本似乎已成功完成,并且我的插件构建没有错误,所以我选择了到目前为止,请忽略这些错误。 But, here they are: 但是,它们是:

Note: Partial path replacement with 'XXXXX'. 注意:用“ 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

My Environment : 我的环境

I am currently building my plugin on Mac and Windows (Mountain Lion and Windows 8). 我目前正在Mac和Windows(Mountain Lion和Windows 8)上构建我的插件。

I am testing in the following browsers: 我正在以下浏览器中进行测试:

  1. Mac: Safari & Chrome. Mac:Safari和Chrome。
  2. Windows: IE 10 and Chrome. Windows:IE 10和Chrome。

FWIW: My Win installation for development is in a Mac VMWare Fusion v5.0 Guest. FWIW:我的Win开发安装在Mac VMWare Fusion v5.0 Guest中。

Summary : 总结

Please help me get Log4cplus working in my plugin with an accessible log file. 请帮助我让Log4cplus在可访问日志文件中的插件中正常工作。

It looks like you're on the right track, but you're missing a very important piece -- you can't write to C:\\logs, since only an admin has permissions to do that. 看来您走在正确的道路上,但是您却错过了一个非常重要的部分-您无法写入C:\\ logs,因为只有管理员有权执行此操作。

As to the "not found" "errors", those aren't errors... just status messages. 至于“未找到”“错误”,这些不是错误,只是状态消息。 That's part of building log4cplus, it's looking to see what your platform supports. 那是构建log4cplus的一部分,它正在寻找您的平台支持什么。 You can safely ignore those. 您可以放心地忽略这些。

If you look on the Tips and Tricks page you'll find some useful examples . 如果您在“ 技巧和窍门”页面上查找,则会找到一些有用的示例

The main one I'm referring to comes from a gist I created some time back ; 我指的主要是我前段时间创造的要点 ; you'll need to add_boost_library(filesystem) but you can then use this code to find a valid location to put your logs in. The code currently detects if the log path (which will be in %AppData%\\LocalLow\\CompanyName\\logs with this code) exists and only writes the log if it does. 您将需要add_boost_library(filesystem),但随后您可以使用此代码查找放置日志的有效位置。该代码当前会检测日志路径(将位于%AppData%\\ LocalLow \\ CompanyName \\ logs中,此代码)存在,并且仅在存在时才写入日志。 It also uses a timestamp and a process id to ensure uniqueness to plugin instance. 它还使用时间戳和进程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
}


// ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM