Plugin Firebreath NPAPI Cara Masuk

Cara mengeluarkan pesan log dengan plugin NPAPI yang dibuat dengan FireBreath di C++.
Log harus tersedia selama pengembangan dan pengujian dan/atau dalam pembuatan Debug.


Dimodifikasi:

Cara FireBreath untuk mencatat adalah dengan Log4cplus, dan saya telah mencoba menerapkannya semaksimal mungkin Saya dapat mengikuti petunjuk ini.
Saya menambahkan add_firebreath_library(log4cplus) ke bagian bawah "PluginConfig.cmake".

Saya belum bisa membuat file log yang bisa saya baca di Windows 8. Saya telah menelusuri sumber lain, seperti ini: FBLOG_TRACE() Tidak ada logging ke Logfile -- FBLOG_INFO() logging OK -- Apa PERBEDAannya

Sejauh ini, semua upaya logging saya adalah sebagai berikut:

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

Tingkat Debug Opsional:

Saya tidak yakin apakah saya harus mengganti getLogLevel() karena saya senang dengan level default INFO, dan saya tidak yakin tepatnya di mana harus meletakkannya jika saya menggantinya:

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

Jalur File Log:

Saya juga tidak yakin tentang jalur yang tepat untuk menulis file log di windows. Saya telah mencoba:

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

Kesalahan Skrip Persiapan:

Setelah mengaktifkan Log4cplus di "PluginConfig.cmake" dengan add_firebreath_library(log4cplus), saya mendapatkan beberapa "tidak ditemukan " kesalahan dalam skrip prep saya di Windows, namun skrip tersebut tampaknya berhasil diselesaikan, dan plugin saya dibuat tanpa kesalahan, jadi sejauh ini saya memilih untuk mengabaikan kesalahan ini. Tapi, ini dia:

Catatan: Penggantian sebagian jalur dengan '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

Lingkungan Saya:

Saat ini saya sedang membangun plugin saya di Mac dan Windows (Mountain Lion dan Windows 8).

Saya sedang menguji di browser berikut:

  1. Mac: Safari & Chrome.
  2. Windows: IE 10 dan Chrome.

FWIW: Instalasi Win saya untuk pengembangan ada di Mac VMWare Fusion v5.0 Guest.

Ringkasan:

Tolong bantu saya membuat Log4cplus berfungsi di plugin saya dengan file log yang dapat diakses.


person David Manpearl    schedule 01.04.2013    source sumber


Jawaban (1)


Sepertinya Anda berada di jalur yang benar, tetapi Anda melewatkan bagian yang sangat penting -- Anda tidak dapat menulis ke C:\logs, karena hanya admin yang memiliki izin untuk melakukannya.

Mengenai "kesalahan" "tidak ditemukan", itu bukanlah kesalahan... hanya pesan status. Itu bagian dari membangun log4cplus, untuk melihat apa yang didukung platform Anda. Anda dapat mengabaikannya dengan aman.

Jika Anda melihat halaman Tips dan Trik, Anda akan menemukan beberapa contoh berguna.

Yang utama yang saya maksud berasal dari inti yang saya buat beberapa waktu lalu; Anda harus menambahkan_boost_library(filesystem) tetapi Anda kemudian dapat menggunakan kode ini untuk menemukan lokasi yang valid untuk memasukkan log Anda. Kode saat ini mendeteksi apakah jalur log (yang akan berada di %AppData%\LocalLow\CompanyName\logs dengan kode ini) ada dan hanya menulis log jika ada. Itu juga menggunakan stempel waktu dan id proses untuk memastikan keunikan pada instance plugin.

#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
}


// ...
person taxilian    schedule 02.04.2013
comment
bagaimana dengan linux? - person kangear; 27.10.2019
comment
Saat ini saya tidak ingat; kemungkinan besar ini akan berfungsi di linux juga, karena menurut saya fungsi getLocalAppDataPath juga berfungsi di linux. - person taxilian; 30.10.2019