{"id":1853,"date":"2024-12-10T20:20:05","date_gmt":"2024-12-10T12:20:05","guid":{"rendered":"https:\/\/www.madbull.site\/?p=1853"},"modified":"2025-07-22T10:21:15","modified_gmt":"2025-07-22T02:21:15","slug":"log4cxx%e5%9c%a8c%e8%af%ad%e8%a8%80%e7%9a%84%e4%bd%bf%e7%94%a8","status":"publish","type":"post","link":"https:\/\/www.madbull.site\/?p=1853","title":{"rendered":"log4cxx\u5728C\u8bed\u8a00\u4e2d\u4f7f\u7528"},"content":{"rendered":"\n<p class=\"has-large-font-size\"><strong>\u4ecb\u7ecd<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>log4cxx \u662f\u4e00\u4e2a\u57fa\u4e8e Apache log4j \u7684 C++ \u65e5\u5fd7\u6846\u67b6\uff0c\u4f7f\u7528 Apache Portable Runtime\uff08APR\uff09\uff0c\u5728\u6240\u6709\u652f\u6301 APR \u7684\u5e73\u53f0\u90fd\u53ef\u4ee5\u4f7f\u7528\u3002log4cxx \u662f\u5f00\u6e90\u4ee3\u7801\uff0c\u9075\u5b88 Apache License \u5f00\u6e90\u534f\u8bae\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>log4cxx \u53ef\u4ee5\u6839\u636e\u914d\u7f6e\u6587\u4ef6\u7075\u6d3b\u914d\u7f6e\u65e5\u5fd7\u7684\u8f93\u51fa\u683c\u5f0f\u3001\u8f93\u51fa\u5730\u5740\u3001\u65e5\u5fd7\u7b49\u7ea7\u3001\u7f51\u7edc\u914d\u7f6e\u7b49\u76f8\u5173\u53c2\u6570\uff1b<\/p>\n\n\n\n<p>\u8fd8\u53ef\u4ee5\u7ed9\u65e5\u5fd7\u5212\u5206\u6a21\u5757\uff0c\u5e76\u7ed9\u5404\u4e2a\u6a21\u5757\u8d77\u540d\u5b57\uff0c\u4ee5\u65b9\u4fbf\u4f7f\u7528\uff1b<\/p>\n\n\n\n<p>log4cxx \u652f\u6301 \u666e\u901a\u65e5\u5fd7\u6587\u4ef6\u3001\u6309\u7167\u6587\u4ef6\u5927\u5c0f\u8f6e\u8f6c\u7684\u65e5\u5fd7\u3001\u6309\u7167\u65e5\u671f\u8f6e\u8f6c\u7684\u65e5\u5fd7\u3001syslog\u65e5\u5fd7\u3001\u63a7\u5236\u7ec8\u7aef\u3001smtp\u3001socket\u3001\u6570\u636e\u6d41\u591a\u79cd\u65b9\u5f0f\u8bb0\u5f55\u65e5\u5fd7\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u6700\u65b0\u53d1\u884c\u7248\u8bf4\u660e\u6587\u6863\u5730\u5740\uff1a<a href=\"https:\/\/logging.apache.org\/log4cxx\/1.3.1\/index.html\">https:\/\/logging.apache.org\/log4cxx\/1.3.1\/index.html<\/a><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u4f46\u662f\uff0clog4cxx \u4e0d\u80fd\u76f4\u63a5\u5728 C\u8bed\u8a00 \u4e2d\u4f7f\u7528\uff0c\u9700\u8981\u5355\u72ec\u5f00\u53d1\u4e00\u4e2a\u652f\u6301 C\u8bed\u8a00 \u7684\u63a5\u53e3\u3002\u672c\u6b21\u793a\u4f8b\u5305\u62ec C\u8bed\u8a00 \u63a5\u53e3\u7684\u5f00\u53d1\u548c\u6d4b\u8bd5\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u7f16\u8bd1\u5b89\u88c5<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>log4cxx \u4ee3\u7801\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/apache\/logging-log4cxx\">https:\/\/github.com\/apache\/logging-log4cxx<\/a><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u4ece\u4ee3\u7801\u5e93\u62c9\u53d6\u6700\u65b0\u7684 tag \u4ee3\u7801\uff1a<code>git clone --branch v1.3.1-RC1 https:\/\/github.com\/apache\/logging-log4cxx.git<\/code><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"130\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-17.png\" alt=\"\" class=\"wp-image-1857\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-17.png 775w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-17-300x50.png 300w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-17-768x129.png 768w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u751f\u6210Makefile\u6587\u4ef6\uff1a<code>mkdir build &amp;&amp; cd build &amp;&amp; cmake .. -DCMAKE_BUILD_TYPE=Release -DWITH_SOCK=ON -DLOG4CXX_ENABLE_ESMTP=ON -DLOG4CXX_ENABLE_THREADSAFE=ON<\/code><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"151\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-14-1024x151.png\" alt=\"\" class=\"wp-image-1854\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-14-1024x151.png 1024w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-14-300x44.png 300w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-14-768x114.png 768w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-14.png 1271w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u7f16\u8bd1\u5b89\u88c5\uff1a<code>make clean &amp;&amp; make -j 8 &amp;&amp; make install<\/code><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"878\" height=\"141\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-15.png\" alt=\"\" class=\"wp-image-1855\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-15.png 878w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-15-300x48.png 300w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-15-768x123.png 768w\" sizes=\"auto, (max-width: 878px) 100vw, 878px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u52a8\u6001\u5e93 \u548c \u5934\u6587\u4ef6 \u9ed8\u8ba4\u5b89\u88c5\u5728 \/usr\/local\/ \u76ee\u5f55\u4e0b\u3002\u9996\u6b21\u5b89\u88c5\u540e\uff0c\u5df2\u7ecf\u6253\u5f00\u7684\u7ec8\u7aef\u53ef\u80fd\u627e\u4e0d\u5230\u5bf9\u5e94\u7684\u52a8\u6001\u5e93\uff0c<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">\u6700\u597d\u6267\u884c\u4e00\u4e0b ldconfig \u547d\u4ee4\uff0c\u66f4\u65b0\u5f53\u524d\u7ec8\u7aef\u7684\u94fe\u63a5\u7f13\u5b58<\/mark><\/strong>\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"830\" height=\"337\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-16.png\" alt=\"\" class=\"wp-image-1856\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-16.png 830w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-16-300x122.png 300w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-16-768x312.png 768w\" sizes=\"auto, (max-width: 830px) 100vw, 830px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u7f16\u5199C\u8bed\u8a00\u63a5\u53e3<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u6b64\u5904\u4e3a\u4e86\u5f00\u53d1 liblog4c.so \u5e93\uff0c\u7ed9 C\u8bed\u8a00 \u7f16\u7a0b\u63d0\u4f9b\u63a5\u53e3\u3002\u5305\u62ec\u4e24\u4e2a\u6587\u4ef6\uff1alog4c.cpp\u662f\u5bf9 log4cxx \u7684\u5c01\u88c5\uff1blog4c.h \u662f\u88ab\u8c03\u7528\u7684\u5934\u6587\u4ef6\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u8fd9\u91cc\u7684\u601d\u8def\u662f\u8fd9\u6837\u7684\uff1a<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">\u76ee\u7684\u662f\u751f\u6210 .so \u5e93 \u548c .h \u5934\u6587\u4ef6\uff0c\u63d0\u4f9b \u94fe\u63a5\u6587\u4ef6 \u548c include \u6587\u4ef6 \u7ed9 C\u8bed\u8a00\u4ee3\u7801 \u4f7f\u7528\uff1b<\/mark><\/strong><\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">\u8bbe\u7f6e\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf LoggerPtr _logger\uff0c\u521d\u59cb\u5316\u4e3a NULL\uff1b<\/mark><\/strong><\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">\u5bf9\u6b64\u5168\u5c40\u53d8\u91cf\u53ea\u521d\u59cb\u5316\u4e00\u6b21\uff0c\u4ee5\u6b64\u5b9e\u73b0\u5355\u4f8b\u64cd\u4f5c\uff1b<\/mark><\/strong><\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">\u5168\u5c40\u53d8\u91cf _logger \u53ea\u5728 log4c \u5e93\u5185\u90e8\u4f7f\u7528\uff0c\u4e0d\u5bf9\u5916\u663e\u793a\u5176\u5b58\u5728\uff1b<\/mark><\/strong><\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">C\u8bed\u8a00 \u8c03\u7528 C++ \u7684\u5e93\u53ea\u80fd\u4ee5\u51fd\u6570\u7684\u65b9\u5f0f\u3010<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#3d89d9\" class=\"has-inline-color\">C++\u4e0d\u53ef\u80fd\u4ee5\u5b8f\u51fd\u6570\u7684\u65b9\u5f0f\u7ed9C\u63d0\u4f9b\u63a5\u53e3<\/mark>\uff0c\u5373\u4f7f\u63d0\u4f9b\u5b8f\u63a5\u53e3\uff0c\u90a3\u4e48\u5b8f\u5185\u90e8\u7684\u51fd\u6570\u4e00\u5b9a\u5168\u90e8\u90fd\u662fextern &#8220;C&#8221;\u4fee\u9970\u540e\u7f16\u8bd1\u7684<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">\u3011\uff0c\u6240\u4ee5\u8fd9\u91cc\u5fc5\u987b\u628a C++ \u7684\u63a5\u53e3\uff08\u4f8b\u5982\uff1aLOG4CXX_ERROR\u7b49\uff09\u7f16\u7a0b\u6210\u51fd\u6570\u5bf9\u5916\u63d0\u4f9b\uff0c\u5728 C\u8bed\u8a00 \u94fe\u63a5\u9636\u6bb5\u5c31\u53ef\u4ee5\u7528\u5230\u4e86\u3002<\/mark><\/strong><\/li>\n<\/ol>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u4f7f\u7528 \u5168\u5c40\u53d8\u91cf _logger \u5355\u4f8b\u7684\u5b9e\u73b0\u63a5\u53e3\uff0c\u6709\u597d\u5904\u4e5f\u6709\u5f0a\u7aef\u3002<strong>\u597d\u5904\u662f\uff1a\u6bd4\u8f83\u5bb9\u6613\u4f7f\u7528\uff0c\u4e5f\u597d\u7406\u89e3\uff1b\u5f0a\u7aef\u662f\uff1a\u5728\u4e00\u4e2a\u8fdb\u7a0b\u4e2d\u53ea\u80fd\u5b9e\u73b0\u4e00\u4e2a _logger \u5bf9\u8c61\uff0c\u5931\u53bb\u4e86 log4cxx \u539f\u6765\u7684\u7075\u6d3b\u6027\u3002<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u4e0d\u8fc7\u8fd9\u4e2a\u4e5f\u53ef\u4ee5\u5f88\u5bb9\u6613\u4fee\u6539\uff0c\u5982\u679c\u9700\u8981\u591a\u4e2a _logger \u5bf9\u8c61\uff0c\u53ea\u9700\u8981\u4fee\u6539\u4e0b\u9762\u7684\u4ee3\u7801\uff0c\u751f\u6210\u591a\u4e2a\u5168\u5c40\u53d8\u91cf\u5c31\u53ef\u4ee5\u3002\u53e6\u5916\uff0c\u8fd8\u9700\u8981\u5bf9\u6bcf\u4e00\u4e2a _logger \u5bf9\u8c61\u7f16\u5199\u5bf9\u5e94\u7684 \u65e5\u5fd7\u63a5\u53e3\u51fd\u6570\uff08\u6307\u7684\u662f\u4e0b\u65b9\u4ee3\u7801\u4e2d\u7684\u5b8f\u548c\u51fd\u6570\uff0c\u4f8b\u5982\uff1aLOGGER_ERROR\u3001logger_error\u7b49\uff09\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u4e24\u4e2a\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>log4c.cpp<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;sys\/prctl.h&gt;\n#include &lt;log4cxx\/logger.h&gt;\n#include &lt;log4cxx\/basicconfigurator.h&gt;\n#include &lt;log4cxx\/propertyconfigurator.h&gt;\n#include &lt;log4cxx\/logmanager.h&gt; \n#include &lt;cstdarg&gt;\n\n#include \"log4c.h\"\n\nusing namespace log4cxx;\n\nLoggerPtr _logger = NULL ;\n\nvoid int_logger (const char * log_conf_file_path, const char * name) {\n    if ( _logger != NULL ) {\n        LOGGER_WARN(\"logger inited, do not init again!\") ;\n        return ;\n    }\n    if (PropertyConfigurator::configure(log_conf_file_path) == spi::ConfigurationStatus::NotConfigured)\n        BasicConfigurator::configure();\n\n    _logger = LogManager::getLogger(name);\n}\n\n#define ARGS2MESSAGE(file, lineno, func, fmt) \\\n    char buffer&#91;10240]; \\\n    memset(buffer, 0x00, sizeof(buffer) ) ; \\\n    do { \\\n        char tname&#91;24] = {0}; \\\n        memset(tname, 0x00, sizeof(tname)); \\\n        prctl(PR_GET_NAME, tname, 0, 0, 0); \\\n        snprintf(buffer, sizeof(buffer), \"&#91;%s:%lu] &#91;%s:(%ld):%s] \", tname, pthread_self(), file, lineno, func); \\\n        va_list args; \\\n        va_start(args, fmt); \\\n        vsnprintf(buffer+strlen(buffer), sizeof(buffer)-strlen(buffer), fmt, args); \\\n        va_end(args);  \\\n    } while(0) \\\n\nvoid logger_debug(const char* file, long lineno, const char* func, const char * fmt, ...) {\n    ARGS2MESSAGE(file, lineno, func, fmt) ;\n    LOG4CXX_DEBUG(_logger, buffer); \n}\n\nvoid logger_info(const char* file, long lineno, const char* func, const char * fmt, ...) {\n    ARGS2MESSAGE(file, lineno, func, fmt) ;\n    LOG4CXX_INFO(_logger, buffer) ;\n}\n\nvoid logger_warn(const char* file, long lineno, const char* func, const char * fmt, ...) {\n    ARGS2MESSAGE(file, lineno, func, fmt) ;\n    LOG4CXX_WARN(_logger, buffer) ;\n}\nvoid c(const char* file, long lineno, const char* func, const char * fmt, ...) {\n    ARGS2MESSAGE(file, lineno, func, fmt) ;\n    LOG4CXX_ERROR(_logger, buffer) ;\n}\n\nvoid logger_fatal(const char* file, long lineno, const char* func, const char * fmt, ...) {\n    ARGS2MESSAGE(file, lineno, func, fmt) ;\n    LOG4CXX_FATAL(_logger, buffer) ;\n}\n\nvoid logger_trace(const char* file, long lineno, const char* func, const char * fmt, ...) {\n    ARGS2MESSAGE(file, lineno, func, fmt) ;\n    LOG4CXX_TRACE(_logger, buffer ) ;\n}<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>log4c.h<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#ifndef __LOG4C_H__\n#define __LOG4C_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid int_logger (const char * log_conf_file_path, const char * name) ;\n\nvoid logger_debug(const char* file, long lineno, const char* func, const char * fmt, ...) ;\nvoid logger_info(const char* file, long lineno, const char* func, const char * fmt, ...) ;\nvoid logger_warn(const char* file, long lineno, const char* func, const char * fmt, ...) ;\nvoid logger_error(const char* file, long lineno, const char* func, const char * fmt, ...) ;\nvoid logger_fatal(const char* file, long lineno, const char* func, const char * fmt, ...) ;\nvoid logger_trace(const char* file, long lineno, const char* func, const char * fmt, ...) ;\n\n#define LOGGER_DEBUG(fmt, ...) logger_debug( __FILE__, __LINE__, __FUNCTION__, fmt, ##__VA_ARGS__ )\n#define LOGGER_INFO(fmt, ...) logger_info( __FILE__, __LINE__, __FUNCTION__, fmt, ##__VA_ARGS__ )\n#define LOGGER_WARN(fmt, ...) logger_warn( __FILE__, __LINE__, __FUNCTION__, fmt, ##__VA_ARGS__ )\n#define LOGGER_ERROR(fmt, ...) logger_error( __FILE__, __LINE__, __FUNCTION__, fmt, ##__VA_ARGS__ )\n#define LOGGER_FATAL(fmt, ...) logger_fatal( __FILE__, __LINE__, __FUNCTION__, fmt, ##__VA_ARGS__ )\n#define LOGGER_TRACE(fmt, ...) logger_trace( __FILE__, __LINE__, __FUNCTION__, fmt, ##__VA_ARGS__ )\n\n#ifdef __cplusplus\n} \/\/ extern \"C\"\n#endif\n\n#endif<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u6d4b\u8bd5\u4ee3\u7801\u548c\u914d\u7f6e<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u8fd9\u91cc\u63d0\u4f9b\u4e86\u4e24\u79cd\u65e5\u5fd7\u4e66\u5199\u65b9\u5f0f\uff1a\u65e5\u5fd7\u6587\u4ef6\u8f6e\u8f6c\u3001SMTP\u3002\u6253\u5370\u5230\u7ec8\u7aef\u8f93\u7684\u65b9\u5f0f\uff0c\u5728\u914d\u7f6e\u6587\u4ef6 log.properties \u4e2d\u63d0\u4f9b\u4e86\u76f8\u5173\u914d\u7f6e CONSOLE \u914d\u7f6e\u6a21\u5757\uff0c\u56e0\u4e3a\u592a\u7b80\u5355\u4e86\u6ca1\u5199\u4ee3\u7801\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u914d\u7f6e\u6587\u4ef6 log.properties<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code># \u5b9a\u4e49\u6839 logger\nlog4j.rootLogger=TRACE, CONSOLE, file, smtp\n\n# \u5b9a\u4e49 CONSOLE \u547d\u540d\u7684 logger \nlog4j.logger.CONSOLE=DEBUG, CONSOLE\n# \u8bbe\u7f6e CONSOLE \u7684 additivity \u4e3a false\uff0c\u9632\u6b62\u5b83\u7ee7\u627f\u7236 rootLogger \u7684 Appenders\nlog4j.additivity.CONSOLE=false\n\nlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender\nlog4j.appender.CONSOLE.Target=System.out\nlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout\nlog4j.appender.CONSOLE.layout.ConversionPattern=%d &#91;%t] %-5p %c - %m%n\n\n# \u5b9a\u4e49 file \u547d\u540d\u7684 logger \nlog4j.logger.file=TRACE, file \n# \u8bbe\u7f6e file \u7684 additivity \u4e3a false\uff0c\u9632\u6b62\u5b83\u7ee7\u627f\u7236 rootLogger \u7684 Appenders\nlog4j.additivity.file =false\n\nlog4j.appender.file=org.apache.log4j.RollingFileAppender\nlog4j.appender.file.File=file.log\nlog4j.appender.file.MaxFileSize=2MB\nlog4j.appender.file.MaxBackupIndex=3\nlog4j.appender.file.layout=org.apache.log4j.PatternLayout\nlog4j.appender.file.layout.ConversionPattern=%d{ISO8601} &#91;%t] %-5p %c %x - %m%n\n\n# \u5b9a\u4e49 smtp \u547d\u540d\u7684 logger \nlog4j.logger.smtp=TRACE, smtp \n# \u8bbe\u7f6e smtp \u7684 additivity \u4e3a false\uff0c\u9632\u6b62\u5b83\u7ee7\u627f\u7236 rootLogger \u7684 Appenders\nlog4j.additivity.smtp =false\n\nlog4j.appender.smtp=org.apache.log4j.net.SMTPAppender\nlog4j.appender.smtp.layout=org.apache.log4j.PatternLayout\nlog4j.appender.smtp.layout.ConversionPattern=%d{ISO8601} &#91;%t] %-5p %c %x - %m%n\nlog4j.appender.smtp.BufferSize=5\nlog4j.appender.smtp.SMTPPort=25\nlog4j.appender.smtp.From=xxx@xxx.com\nlog4j.appender.smtp.To=zzzz@zzz.com\nlog4j.appender.smtp.Subject=log4c.smtp.log\nlog4j.appender.smtp.Threshold=INFO\nlog4j.appender.smtp.SMTPDebug=false\nlog4j.appender.smtp.SMTPHost=mx00.zzz.com\n## log4j.appender.SMTP.SMTPSSL=true\n## log4j.appender.smtp.SMTPUsername=xxx@xxx.com\n## log4j.appender.smtp.SMTPPassword=YYYYUUUUIIII<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>SMTP\u914d\u7f6e\u81ea\u5df1\u505a\u4e86\u4e00\u4e9b\u8131\u654f\u5904\u7406\uff0c\u53ef\u67e5\u770b\u53c2\u6570\u542b\u4e49\u81ea\u884c\u4fee\u6539\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u6d4b\u8bd5\u6587\u4ef6\u65e5\u5fd7\uff1atest_file.c<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include \"log4c.h\"\n\nint main() {\n    int_logger(\"log.properties\", \"file\") ;\n    LOGGER_DEBUG(\"NNNNNNNNNNNNNNNNNNNNNNNNN\") ;\n    LOGGER_ERROR(\"EEEEEEEEEEEEEEEEEEEEEEEEEEEE\") ;\n    LOGGER_TRACE(\"TTTTTTTTTTTTTTTTT\") ;\n}<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u6d4b\u8bd5smtp\u65e5\u5fd7\uff1atest_smtp.c<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include \"log4c.h\"\n\nint main() {\n    int_logger(\"log.properties\", \"smtp\") ;\n    LOGGER_TRACE(\"TTTTTTTTTTTTTTTTT\") ;\n    LOGGER_DEBUG(\"DDDDDDDDDDDDDDDDDDDDDDDDDD\") ;\n    LOGGER_INFO(\"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\") ;\n    LOGGER_WARN(\"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW7\") ;\n    LOGGER_WARN(\"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW6\") ;\n    LOGGER_WARN(\"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW5\") ;\n    LOGGER_WARN(\"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW4\") ;\n    LOGGER_WARN(\"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW3\") ;\n    LOGGER_TRACE(\"TTTTTTTTTTTTTTTTT\") ;\n    LOGGER_WARN(\"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW2\") ;\n    LOGGER_DEBUG(\"DDDDDDDDDDDDDDDDDDDDDDDDDD\") ;\n    LOGGER_INFO(\"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\") ;\n    LOGGER_WARN(\"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW1\") ;\n    LOGGER_ERROR(\"EEEEEEEEEEEEEEEEEEEEEEEEEEEE\") ;\n    LOGGER_ERROR(\"EEEEEEEEEEEEEEEEEEEEEEEEEEEE\") ;\n    LOGGER_TRACE(\"TTTTTTTTTTTTTTTTT\") ;\n    LOGGER_DEBUG(\"DDDDDDDDDDDDDDDDDDDDDDDDDD\") ;\n    LOGGER_INFO(\"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\") ;\n    LOGGER_INFO(\"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\") ;\n    LOGGER_ERROR(\"EEEEEEEEEEEEEEEEEEEEEEEEEEEE\") ;\n    LOGGER_ERROR(\"EEEEEEEEEEEEEEEEEEEEEEEEEEEE\") ;\n    LOGGER_TRACE(\"TTTTTTTTTTTTTTTTT\") ;\n    LOGGER_DEBUG(\"DDDDDDDDDDDDDDDDDDDDDDDDDD\") ;\n    LOGGER_INFO(\"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\") ;\n    LOGGER_FATAL(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\") ;\n}<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\"><strong>\u8bf4\u660e<\/strong><\/mark>\uff1aSMTP\u65b9\u5f0f\u5199\u65e5\u5fd7\u652f\u6301\u4e24\u79cd\u65b9\u5f0f\uff1a\u767b\u5f55\u8d26\u53f7\u5199\u90ae\u4ef6\uff08\u81ea\u5df1\u4f5c\u4e3aMUA\uff09 \u548c \u76f4\u63a5\u63a8\u9001\uff08\u81ea\u5df1\u4f5c\u4e3aMTA\uff09\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>\u767b\u5f55\u8d26\u53f7\u5199\u90ae\u4ef6\u3002<\/strong>\u4e3e\u4f8b\u8bf4\u660e\uff1a\u901a\u8fc7 \u767b\u5f55 aaa@aaa.com \u8d26\u53f7\uff0c\u7136\u540e\u7528 aaa@aaa.com \u8d26\u53f7\u7ed9 bbb@bbb.com \u53d1\u9001\u65e5\u5fd7\u3002\u8fd9\u91cc\u9700\u8981\u589e\u52a0\u4e24\u4e2a\u53c2\u6570\u914d\u7f6e <code>log4j.appender.smtp.SMTPUsername<\/code> \u548c <code>log4j.appender.smtp.SMTPPassword<\/code> \uff1b\u5e76\u4e14 <code>log4j.appender.smtp.SMTPHost<\/code> \u914d\u7f6e\u7684\u662f aaa@aaa.com \u8d26\u53f7\u7684\u767b\u5f55\u5730\u5740\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>\u76f4\u63a5\u63a8\u9001\u3002<\/strong>\u4e3e\u4f8b\u8bf4\u660e\uff1a\u4f7f\u7528 SMTP \u534f\u8bae\u5411 bbb@bbb.com \u90ae\u7bb1\u8d26\u53f7\u4e2d\u76f4\u63a5\u63a8\u9001\u90ae\u4ef6\u3002\u4e0d\u9700\u8981\u767b\u5f55 \u53e6\u5916\u7684 aaa@aaa.com \u8d26\u53f7\u5c31\u53ef\u4ee5\u3002\u8fd9\u91cc <code>log4j.appender.smtp.SMTPHost<\/code> \u914d\u7f6e\u7684\u662f bbb.com \u57df\u540d MX\u8bb0\u5f55 \u89e3\u6790\u540e\u7684\u5730\u5740\u3002\u53e6\u5916\u5bf9\u4e8e\u516c\u7f51\u90ae\u7bb1\u53ef\u80fd\u4f1a\u505a\u4e00\u4e9b\u57fa\u672c\u7684\u5783\u573e\u90ae\u4ef6\u62e6\u622a\u7b56\u7565\uff0c\u6240\u4ee5\u9700\u8981\u505a\u4e00\u4e9b\u57fa\u672c\u7684 DNS \u8bbe\u7f6e\uff0c\u81f3\u5c11\u8bbe\u7f6e\u81ea\u5df1\u7684 \u516c\u7f51IP \u4e3a\u4e00\u4e2a\u5408\u6cd5\u7684 MX \u8bb0\u5f55\u503c\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u5173\u4e8eDNS\u76f8\u5173\u77e5\u8bc6\uff0c\u53c2\u770b\u5f80\u671f\u6587\u7ae0\uff1a<a href=\"https:\/\/www.madbull.site\/?p=1719\">https:\/\/www.madbull.site\/?p=1719<\/a><\/p>\n\n\n\n<p>\u83b7\u53d6\u81ea\u5df1\u7684\u5916\u7f51IP\uff0c\u53c2\u770b\u5f80\u671f\u6587\u7ae0\uff1a<a href=\"https:\/\/www.madbull.site\/?p=763\">https:\/\/www.madbull.site\/?p=763<\/a><\/p>\n\n\n\n<p>\u5173\u4e8e\u90ae\u4ef6\u6295\u9012\u548c\u63a5\u6536\u7684\u76f8\u5173\u652f\u6301\uff0c\u53c2\u770b\u5f80\u671f\u6587\u7ae0\uff1a<a href=\"https:\/\/www.madbull.site\/?p=769\">https:\/\/www.madbull.site\/?p=769<\/a><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u7f16\u8bd1\u6d4b\u8bd5<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Makefile\u6587\u4ef6<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>.PHONY: all\n\n.PHONY: install\n\n.PHONY: clean\n\nall: liblog4c.so test_file test_smtp\n\nliblog4c.so: log4c.cpp\n        g++ -shared -fPIC -o $@ $^ -llog4cxx\n\ninstall: liblog4c.so\n        \\cp -f liblog4c.so \/usr\/local\/lib\/\n        \\cp -f log4c.h \/usr\/local\/include\/\n\ntest_file: test_file.c install\n        gcc -o $@ $&lt; -llog4cxx -llog4c\n\ntest_smtp: test_smtp.c install\n        gcc -o $@ $&lt; -llog4cxx -llog4c\n\nclean:\n        \\rm -f test_file.o test_file test_smtp.o test_smtp liblog4c.o liblog4c.so file.log<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u7f16\u8bd1\u5b89\u88c5<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u9996\u6b21\u5b89\u88c5\u540e\uff0c\u5df2\u7ecf\u6253\u5f00\u7684\u7ec8\u7aef\u53ef\u80fd\u627e\u4e0d\u5230\u5bf9\u5e94\u7684\u52a8\u6001\u5e93\uff0c\u6700\u597d\u6267\u884c\u4ee5\u4e0b ldconfig \u547d\u4ee4\uff0c\u66f4\u65b0\u5f53\u524d\u7ec8\u7aef\u7684\u94fe\u63a5\u7f13\u5b58\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"889\" height=\"211\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-18.png\" alt=\"\" class=\"wp-image-1858\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-18.png 889w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-18-300x71.png 300w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-18-768x182.png 768w\" sizes=\"auto, (max-width: 889px) 100vw, 889px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u6d4b\u8bd5\u6587\u4ef6\u65e5\u5fd7<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"170\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-19-1024x170.png\" alt=\"\" class=\"wp-image-1859\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-19-1024x170.png 1024w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-19-300x50.png 300w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-19-768x127.png 768w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-19.png 1129w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u6d4b\u8bd5SMTP\u65e5\u5fd7<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"288\" height=\"75\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-21.png\" alt=\"\" class=\"wp-image-1861\"\/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"695\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-20-1024x695.png\" alt=\"\" class=\"wp-image-1860\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-20-1024x695.png 1024w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-20-300x204.png 300w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-20-768x521.png 768w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/12\/\u56fe\u7247-20.png 1215w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>log4cxx \u662f\u4e00\u4e2a\u57fa\u4e8e Apache log4j \u7684 C++ \u65e5\u5fd7\u6846\u67b6\uff0c\u4f7f\u7528 Apache Portable Runtime\uff08APR\uff09\uff0c\u5728\u6240\u6709\u652f\u6301 APR \u7684\u5e73\u53f0\u90fd\u53ef\u4ee5\u4f7f\u7528\u3002log4cxx \u662f\u5f00\u6e90\u4ee3\u7801\uff0c\u9075\u5b88 Apache License \u5f00\u6e90\u534f\u8bae\u3002<\/p>\n<p>log4cxx \u53ef\u4ee5\u6839\u636e\u914d\u7f6e\u6587\u4ef6\u7075\u6d3b\u914d\u7f6e\u65e5\u5fd7\u7684\u8f93\u51fa\u683c\u5f0f\u3001\u8f93\u51fa\u5730\u5740\u3001\u65e5\u5fd7\u7b49\u7ea7\u3001\u7f51\u7edc\u914d\u7f6e\u7b49\u76f8\u5173\u53c2\u6570\uff1b<\/p>\n<p>\u8fd8\u53ef\u4ee5\u7ed9\u65e5\u5fd7\u5212\u5206\u6a21\u5757\uff0c\u5e76\u7ed9\u5404\u4e2a\u6a21\u5757\u8d77\u540d\u5b57\uff0c\u4ee5\u65b9\u4fbf\u4f7f\u7528\uff1b<\/p>\n<p>log4cxx \u652f\u6301 \u666e\u901a\u65e5\u5fd7\u6587\u4ef6\u3001\u6309\u7167\u6587\u4ef6\u5927\u5c0f\u8f6e\u8f6c\u7684\u65e5\u5fd7\u3001\u6309\u7167\u65e5\u671f\u8f6e\u8f6c\u7684\u65e5\u5fd7\u3001syslog\u65e5\u5fd7\u3001\u63a7\u5236\u7ec8\u7aef\u3001smtp\u3001socket\u3001\u6570\u636e\u6d41\u591a\u79cd\u65b9\u5f0f\u8bb0\u5f55\u65e5\u5fd7\u3002<\/p>\n<p>\u6700\u65b0\u53d1\u884c\u7248\u8bf4\u660e\u6587\u6863\u5730\u5740\uff1ahttps:\/\/logging.apache.org\/log4cxx\/1.3.1\/index.html<\/p>\n<p>\u4f46\u662f\uff0clog4cxx \u4e0d\u80fd\u76f4\u63a5\u5728 C\u8bed\u8a00 \u4e2d\u4f7f\u7528\uff0c\u9700\u8981\u5355\u72ec\u5f00\u53d1\u4e00\u4e2a\u652f\u6301 C\u8bed\u8a00 \u7684\u63a5\u53e3\u3002\u672c\u6b21\u793a\u4f8b\u5305\u62ec C\u8bed\u8a00 \u63a5\u53e3\u7684\u5f00\u53d1\u548c\u6d4b\u8bd5\u3002<\/p>\n","protected":false},"author":1,"featured_media":559,"comment_status":"open","ping_status":"open","sticky":false,"template":"single-with-sidebar","format":"standard","meta":{"footnotes":""},"categories":[156,154],"tags":[612,607,610,608,611,604,605,606,609,320,470,273],"class_list":["post-1853","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-c","category-154","tag-h","tag-apache","tag-cmake","tag-g","tag-gcc","tag-log4c","tag-log4cxx","tag-log4j","tag-makefile","tag-smtp","tag-so","tag-273"],"_links":{"self":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1853","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1853"}],"version-history":[{"count":7,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1853\/revisions"}],"predecessor-version":[{"id":2188,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1853\/revisions\/2188"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/media\/559"}],"wp:attachment":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}