最新ubuntu编译log4cxx_1.2.0+apr+expat+apr-util

@最新ubuntu编译log4cxx_1.2.0+apr+expat+apr-util

最近写了一大堆代码,发现std::cout输出一点也不优雅,非常不利于debug。于是想到了黑天鹅log4j的同源产物:log4cxx。

开源软件总在改,特此更新一下原链接文章的内容

下载log4cxx:http://logging.apache.org/log4cxx/download.html
下载expat:https://github.com/libexpat/libexpat/releases

ubuntu 22+
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0(可以用自带的gcc版本)
需要安装:cmake 3.13+, g++, apr 1.x, apr-util 1.x, gzip and zip.

apt-get install make cmake build-essential libapr1-dev libaprutil1-dev gzip zip

tar expat-2.2.10.tar.gz
cd expat-2.2.10
./configure --prefix=/usr/local
make
sudo make install

cd ..
tar -zxvf apache-log4cxx-0.11.0.tar.gz
cd apache-log4cxx-1.2.0
mkdir build
cd build
cmake ..
make
sudo make install

testlog4cxx.cpp 源码:

#include <log4cxx/logger.h>
#include <log4cxx/logstring.h>
#include <log4cxx/xml/domconfigurator.h>
#include <log4cxx/mdc.h>
#include <log4cxx/ndc.h>
 
int main(int argc, char *argv[])
{
    using namespace log4cxx;
 
    // 读取配置文件
    xml::DOMConfigurator::configure("log4cxx.xml");
 
    // 建立两个logger
    LoggerPtr logger = Logger::getLogger("root");
 
    MDC::put("key", "value");
    MDC::put("key2", "value2");
    NDC::push("context 1");
    NDC::push("context 2");
    LOG4CXX_DEBUG(logger, "this is debug log");
    logger->debug("this is an other log");
 
    NDC::clear();
    MDC::clear();
    return 0;
}

配置文件log4cxx.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="false" xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
        <param name="threshold" value="debug" />
        <param name="file" value="output.xml" />
        <param name="maxBackupIndex" value="5" />
        <param name="append" value="true" />
        <layout class="org.apache.log4j.xml.XMLLayout">
            <param name="LocationInfo" value="true" />
            <param name="Properties" value="true" />
        </layout>
        <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
            <param name="maxFileSize" value="10MB" />
        </triggeringPolicy>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="FILE" />
    </root>
</log4j:configuration>

写一个优雅的Makefile

CC = g++
CFLAGS = -I/usr/local/include
LDFLAGS = -L/usr/local/lib -llog4cxx -lexpat

all: testlog4cxx

testlog4cxx: testlog4cxx.cpp
	$(CC) -o $@ $< $(CFLAGS) $(LDFLAGS)

clean:
	rm -f testlog4cxx

Makefile编译:

make

也可以用命令编译:

g++ -o testlog4cxx testlog4cxx.cpp -I/usr/local/include -L/usr/local/lib -llog4cxx -lexpat

运行代码:

LD_LIBRARY_PATH=/usr/local/lib ./testlog4cxx

output.xml文件输出为:

<log4j:event logger="root" timestamp="1725278892933" level="DEBUG" thread="0x7f14edb90b40">
<log4j:message><![CDATA[this is debug log]]></log4j:message>
<log4j:NDC><![CDATA[context 1 context 2]]></log4j:NDC>
<log4j:locationInfo class="" method="main" file="testlog4cxx.cpp" line="21"/>
<log4j:properties>
<log4j:data name="key" value="value"/>
<log4j:data name="key2" value="value2"/>
</log4j:properties>
</log4j:event>

<log4j:event logger="root" timestamp="1725278892933" level="DEBUG" thread="0x7f14edb90b40">
<log4j:message><![CDATA[this is an other log]]></log4j:message>
<log4j:NDC><![CDATA[context 1 context 2]]></log4j:NDC>
<log4j:locationInfo class="?" method="?" file="?" line="-1"/>
<log4j:properties>
<log4j:data name="key" value="value"/>
<log4j:data name="key2" value="value2"/>
</log4j:properties>
</log4j:event>

原文链接:https://blog.csdn.net/KiteRunner/article/details/112689268

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值