log4cpp基础测试
// log4cplus.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <log4cpp/Category.hh>
#include <log4cpp/Appender.hh>
#include "log4cpp/FileAppender.hh"
#include <log4cpp/OstreamAppender.hh>
#include "log4cpp/NTEventLogAppender.hh"
#include <log4cpp/StringQueueAppender.hh>
#include <log4cpp/RollingFileAppender.hh>
//#include "log4cpp/SyslogAppender.hh"
#include <log4cpp/Layout.hh>
#include <log4cpp/BasicLayout.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/BasicConfigurator.hh>
#include <log4cpp/PropertyConfigurator.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/NDC.hh>
#include <string>
#include <queue>
using namespace std;
using namespace log4cpp;
#pragma comment(lib,".\\Result\\log4cpp.lib")
void TestFileAppender();
void TestOstreamAppender();
void TestSyslogAppender();
void Ndc();
void TestNTEventAppender();
void TestPatternLayout();
void TestPropConfig();
void TestStringQueue();
void TestRollingFile();
int _tmain(int argc, _TCHAR* argv[])
{
TestFileAppender();
TestOstreamAppender();
//TestSyslogAppender(); //#include <syslog.h> 不存在
Ndc();
TestNTEventAppender();
TestPatternLayout();
TestPropConfig();
TestStringQueue();
TestRollingFile();
system("puase");
return 0;
}
void testLogva(log4cpp::Category& category,log4cpp::Priority::Value priority, const char* stringFormat,...)
{
va_list va;
va_start(va, stringFormat);
category.logva(priority, stringFormat, va);
va_end(va);
}
void TestFileAppender()
{
log4cpp::Appender* appender = new log4cpp::FileAppender("default", "fileappender.log");
log4cpp::Layout* layout = new log4cpp::BasicLayout();
appender->setLayout(layout);
log4cpp::Category& root = log4cpp::Category::getRoot();
root.addAppender(appender);
root.setPriority(log4cpp::Priority::INFO);
root.log(log4cpp::Priority::INFO, "reopen log");
if (appender->reopen()) //reopenAll()
{
root.info("log reopened");
}
else
{
root.warn("could not reopen log");
}
root.log(log4cpp::Priority::ERROR, "reopen log");
if (appender->reopen()) //reopenAll()
{
root.info("log reopened");
}
else
{
root.warn("could not reopen log");
}
log4cpp::Category::shutdown();
}
void TestOstreamAppender()
{
log4cpp::Appender* appender = new log4cpp::OstreamAppender("appender", &std::cout);
log4cpp::Layout* layout = new log4cpp::BasicLayout();
appender->setLayout(layout);
log4cpp::Category& root = log4cpp::Category::getRoot();
root.setPriority(log4cpp::Priority::ERROR);
root.removeAllAppenders();
root.addAppender(appender);
root.error("root error #1");
root.warn("root error #2"); //不能被输出
log4cpp::Appender* subappender = new log4cpp::OstreamAppender("appender", &std::cout);
log4cpp::Category& sub = log4cpp::Category::getInstance(std::string("sub1"));
sub.addAppender(subappender);
sub.error("root error #3"); //输出两次
std::cout<<(root.getAppender() == appender)<<std::endl;
std::cout<<(root.getAppender() == subappender)<<std::endl;
root.removeAllAppenders();
sub.removeAllAppenders();
root.error("root error #4"); //不能被输出
sub.error("root error #5"); //不能被输出
std::cout<<(root.getAppender() == subappender)<<std::endl;
//root.addAppender(appender); //直接中断错误
root.error("root error #6"); //不能被显示
root.removeAllAppenders();
appender = new log4cpp::OstreamAppender("appender", &std::cout);
root.addAppender(appender);
root.error("root error #6");
subappender = new log4cpp::OstreamAppender("appender", &std::cout);
sub.addAppender(subappender);
sub.setAdditivity(false); //false覆盖,true添加又一端口
sub.error("root error #7"); //只显示一次
std::cout << " root priority = " << root.getPriority() << std::endl;
std::cout << " sub priority = " << sub.getPriority() << std::endl;
sub.setPriority(log4cpp::Priority::INFO);
std::cout << " root priority = " << root.getPriority() << std::endl;
std::cout << " sub priority = " << sub.getPriority() << std::endl;
testLogva(root, log4cpp::Priority::EMERG, "This contains %d %s", 2, "variable arguments");
testLogva(root, log4cpp::Priority::ALERT, "This contains %d %s", 2, "variable arguments");
testLogva(root, log4cpp::Priority::CRIT, "This contains %d %s", 2, "variable arguments");
testLogva(root, log4cpp::Priority::ERROR, "This contains %d %s", 2, "variable arguments");
testLogva(root, log4cpp::Priority::WARN, "This contains %d %s", 2, "variable arguments");
testLogva(root, log4cpp::Priority::INFO, "This contains %d %s", 2, "variable arguments");
testLogva(root, log4cpp::Priority::NOTICE, "This contains %d %s", 2, "variable arguments");
testLogva(root, log4cpp::Priority::DEBUG, "This contains %d %s", 2, "variable arguments");
sub.warn("sub2 warn");
sub.error("%s %s %d", "test", "vform", 123);
sub.warnStream() << "streamed warn";
sub << log4cpp::Priority::WARN << "warn2.." << "..warn3..value=" << 0
<< log4cpp::eol << "..warn4";
/*root.removeAllAppenders();
sub.removeAllAppenders();*/
std::vector<log4cpp::Category*>* allCats;
std::vector<log4cpp::Category*>::const_iterator iter;
allCats = log4cpp::Category::getCurrentCategories();
// remove all appenders from all categories
for (iter = allCats->begin(); iter != allCats->end(); iter++) {
(*iter)->removeAllAppenders();
}
log4cpp::Category::shutdown();
}
void TestSyslogAppender()
{
/*log4cpp::SyslogAppender* syslogAppender;
syslogAppender = new log4cpp::SyslogAppender("syslog", "log4cpp");*/
log4cpp::Appender*syslogAppender = new log4cpp::FileAppender("default", "fileappender");
syslogAppender->setLayout(new log4cpp::BasicLayout());
log4cpp::Category& root = log4cpp::Category::getRoot();
root.addAppender(syslogAppender);
root.setPriority(log4cpp::Priority::ERROR);
root.log(log4cpp::Priority::NOTICE, "reopen log");
if (log4cpp::Appender::reopenAll())
{
root.info("log reopened");
}
else
{
root.warn("could not reopen log");
}
log4cpp::Category::shutdown();
}
void Ndc()
{
std::cout << "1. empty NDC: " << NDC::get() << std::endl;
NDC::push("context1");
std::cout << "2. push context1: " << NDC::get() << std::endl;
NDC::push("context2");
std::cout << "3. push context2: " << NDC::get() << std::endl;
NDC::push("context3");
std::cout << "4. push context3: " << NDC::get() << std::endl;
std::cout << "5. get depth: " << NDC::getDepth() << std::endl;
std::cout << "6. pop: " << NDC::pop() << std::endl;
NDC::clear();
std::cout << "7. clear: " << NDC::get() << std::endl;
for(int i = 0; i < 100; i++)
{
char ndc2[20];
sprintf(ndc2, "i=%d", i);
log4cpp::NDC::push(ndc2);
std::cout << i<<" : " << NDC::get() << std::endl;
log4cpp::NDC::pop();
}
log4cpp::Category::shutdown();
}
void TestNTEventAppender()
{
log4cpp::Appender* appender = new log4cpp::NTEventLogAppender("default", "testNTEventAppender.Log");
log4cpp::Category& sub1 = log4cpp::Category::getInstance(std::string("sub1"));
sub1.addAppender(appender);
sub1.setPriority(log4cpp::Priority::DEBUG);
sub1.emerg("sub1 emerg");
sub1.fatal("sub1 fatal");
sub1.alert("sub1 alert");
sub1.crit("sub1 crit");
sub1.error("sub1 error");
sub1.warn("sub1 warn");
sub1.notice("sub1 notice");
sub1.info("sub1 info");
sub1.debug("sub1 debug");
sub1.log(log4cpp::Priority::NOTSET, "sub1 notset");
sub1.log(log4cpp::Priority::ERROR, "sub1 error");
log4cpp::Category::shutdown();
}
void TestPatternLayout()
{
/*log4cpp::Appender* appender = new log4cpp::OstreamAppender("appender", &std::cout);
log4cpp::PatternLayout* layout = new log4cpp::PatternLayout();
appender->setLayout(layout);
log4cpp::Category& root = log4cpp::Category::getRoot();
root.addAppender(appender);*/
log4cpp::BasicConfigurator::configure(); //初始化
log4cpp::PatternLayout* layout = new log4cpp::PatternLayout();
layout->setConversionPattern("%d: %p %c %x: %m%n");
log4cpp::Category::getRoot().getAppender()->setLayout(layout);
log4cpp::Category& root = log4cpp::Category::getRoot();
log4cpp::NDC::push("ndc1");
root.error("message");
std::string format = "%% %r %c:%d (%R / %r) [%p] %x %m %% (%u) %n";
layout->setConversionPattern(format);
root.error("message");
// test date format
format = "%d{%d %b %Y %H:%M:%S.%l} %m %n";
layout->setConversionPattern(format);
root.error("message");
format = "%d{%d %b %Y %H:%M:%S.%l";
layout->setConversionPattern(format);
root.error("message");
format = "%d%n";
layout->setConversionPattern(format);
root.error("message");
format = "%.32m %d%n";
layout->setConversionPattern(format);
int i;
for (i = 0; i < 10; i++)
{
root.error("%d message", i);
}
format = "%32m %d{%H:%M:%S.%l %d %b %Y}%n";
layout->setConversionPattern(format);
for (i = 0; i < 10; i++)
{
root.error("%d message", i);
}
}
void TestPropConfig()
{
std::string initFileName;
initFileName = ".\\include\\tests\\log4cpp.nt.property";
log4cpp::PropertyConfigurator::configure(initFileName);
log4cpp::Category& root = log4cpp::Category::getRoot();
log4cpp::Category& sub1 =
log4cpp::Category::getInstance(std::string("sub1"));
log4cpp::Category& sub2 =
log4cpp::Category::getInstance(std::string("sub1.sub2"));
root.error("root error");
root.warn("root warn");
sub1.error("sub1 error");
sub1.warn("sub1 warn");
// the following 2 should only be in A1, not A2
sub1.info("sub1 info");
sub1.debug("sub1 debug");
// do a few so that the log rolls over
sub2.warn("sub2 warn 1");
sub2.warn("sub2 warn 2");
sub2.warn("sub2 warn 3");
sub2.warn("sub2 warn 4");
sub2.warn("sub2 warn 5");
sub2.warn("sub2 warn 6");
sub2.warn("sub2 warn 7");
#if defined(WIN32)
log4cpp::Category& nt = log4cpp::Category::getInstance(std::string("subNT"));
nt.error("subNT error");
nt.warn("subNT warn");
nt.debug("subNT debug");
#endif
log4cpp::Category::shutdown();
}
void TestStringQueue()
{
log4cpp::StringQueueAppender* strQAppender = new log4cpp::StringQueueAppender("strQAppender");
strQAppender->setLayout(new log4cpp::BasicLayout());
log4cpp::Category& root = log4cpp::Category::getRoot();
root.addAppender(strQAppender);
root.setPriority(log4cpp::Priority::DEBUG);
root.error("Hello log4cpp in a Error Message!");
root.warn("Hello log4cpp in a Warning Message!");
cout<<"Get message from Memory Queue!"<<endl;
cout<<"-------------------------------------------"<<endl;
queue<string>& myStrQ = strQAppender->getQueue();
while(!myStrQ.empty())
{
cout<<myStrQ.front();
myStrQ.pop();
}
}
void TestRollingFile()
{
log4cpp::PatternLayout* pLayout1 = new log4cpp::PatternLayout();
pLayout1->setConversionPattern("%d: %p %c %x: %m%n");
log4cpp::PatternLayout* pLayout2 = new log4cpp::PatternLayout();
pLayout2->setConversionPattern("%d: %p %c %x: %m%n");
log4cpp::Appender* fileAppender = new log4cpp::FileAppender("fileAppender","wxb.log");
fileAppender->setLayout(pLayout1);
log4cpp::RollingFileAppender* rollfileAppender = new log4cpp::RollingFileAppender( "rollfileAppender","rollwxb.log",5*1024,1);
rollfileAppender->setLayout(pLayout2);
log4cpp::Category& root = log4cpp::Category::getRoot().getInstance("RootName");
root.addAppender(fileAppender);
root.addAppender(rollfileAppender);
root.setPriority(log4cpp::Priority::DEBUG);
for (int i = 0; i < 100; i++)
{
string strError;
ostringstream oss;
oss<<i<<":Root Error Message!";
strError = oss.str();
root.error(strError);
}
log4cpp::Category::shutdown();
}
/*
# property configurator test file
log4cpp.rootCategory=DEBUG, rootAppender
log4cpp.category.sub1=DEBUG, A1, A2
log4cpp.category.sub1.sub2=DEBUG, A3
log4cpp.appender.rootAppender=ConsoleAppender
log4cpp.appender.rootAppender.layout=BasicLayout
log4cpp.appender.A1=FileAppender
log4cpp.appender.A1.fileName=A1.log
log4cpp.appender.A1.layout=PatternLayout
log4cpp.appender.A1.layout.ConversionPattern=The message %m at time %d%n
log4cpp.appender.A2=FileAppender
log4cpp.appender.A2.threshold=WARN
log4cpp.appender.A2.fileName=A2.log
log4cpp.appender.A2.layout=PatternLayout
log4cpp.appender.A2.layout.ConversionPattern=The message %m at time %d%n
log4cpp.appender.A3=RollingFileAppender
log4cpp.appender.A3.fileName=A3.log
log4cpp.appender.A3.maxFileSize=80
log4cpp.appender.A3.maxBackupIndex=1
log4cpp.appender.A3.layout=PatternLayout
log4cpp.appender.A3.layout.ConversionPattern=The message %m at time %d{%H:%M}%n
log4cpp.category.subNT=INFO, subNT
log4cpp.appender.subNT=NTEventLogAppender
log4cpp.appender.subNT.source=log4cpp-test
*/
/*
log4cpp::FileAppender // 输出到文件
log4cpp::RollingFileAppender // 输出到回卷文件,即当文件到达某个大小后回卷
log4cpp::OstreamAppender // 输出到一个ostream类
log4cpp::StringQueueAppender // 内存队列
log4cpp::Win32DebugAppender // 发送到缺省系统调试器
log4cpp::NTEventLogAppender // 发送到win 事件日志
*/
log4cpp基础测试的更多相关文章
- myBatis 基础测试 表关联关系配置 集合 测试
myBatis 基础测试 表关联关系配置 集合 测试 测试myelipse项目源码 sql 下载 http://download.csdn.net/detail/liangrui1988/599388 ...
- mysql基础测试
mysql基础测试 测试原因 为什么需要做性能测试 模拟比当前系统更高的负载,找出性能瓶颈 重现线上异常 测试不同硬件软件配置 规划未来的业务增长 测试分类 性能测试的分类 设备层的测试 ...
- 基础测试jmeter5.0+badboy(从小白到入门)
1]测试工具jmeter环境安装 1.1]安装jdk环境 1:必须安装jdk8.0(我尝试安装最新版本不行,好像当时没有配置好.之后安装8.0遍可以正常运行)下载地址:单击此段 配置jdk环境:鼠标右 ...
- 性能测试基础---测试流程,LR安装
·性能测试流程详解: 一般来说,性能测试通常可以分为以下过程: ·前期分析.测试计划.测试方案.测试环境的搭建.测试数据的准备.测试脚本的开发.测试场景的设计.测试场景的实现和执行.资源的监控.分析结 ...
- Kubeasz部署K8s基础测试环境简介
下面介绍使用Kubeasz部署K8s集群环境. https://github.com/easzlab/kubeasz在需要使用kubeeasz项目安装的k8s时,需要将所有需要它来部署的节点上,都安装 ...
- weed-fs 基础测试
=================== 启动 master 端口:9333 =================== sunsl@test-server:~$ weed master I0102 15: ...
- Linux基础测试--11道题
000.创建一个目录/data mkdir /data 001.在/data 下面创建一个文件oldboy.txt touch /data/oldboy.txt 002.为oldboy.txt 增加内 ...
- Hive基础测试操作
一.Hive测试 1.查看数据库 show databases; 2.使用某个数据库,如默认数据库 user default; 3.创建表 create table if not exist itst ...
- Python基础测试有关联的接口
test_guanlian.py放在case文件夹下 test_guanlian.pyimport unittest import requestsfrom urllib.parse import u ...
随机推荐
- apache&mod_wsgi&django部署多个项目
今天做好了第二个django项目,但在部署时出了一点小问题,在此记录一下. 1.mod_wsgi 3.4已经支持了部署多个项目,只需在httpd.conf中进行如下配置: WSGIScriptAlia ...
- UVA1493 - Draw a Mess(并查集)
UVA1493 - Draw a Mess(并查集) 题目链接 题目大意:一个N * M 的矩阵,每次你在上面将某个范围上色,不论上面有什么颜色都会被最新的颜色覆盖,颜色是1-9,初始的颜色是0.最后 ...
- Visual Studio的工程结构解析
废话不多说,首先查看下一个简单的sln文件结构 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio ...
- 【spring】在spring cloud项目中使用@ControllerAdvice做自定义异常拦截,无效 解决原因
之前在spring boot服务中使用@ControllerAdvice做自定义异常拦截,完全没有问题!!! GitHub源码地址: 但是现在在spring cloud中使用@ControllerAd ...
- .Net线程问题解答
基础篇 怎样创建一个线程 受托管的线程与 Windows线程 前台线程与后台线程 名为BeginXXX和EndXXX的方法是做什么用的 异步和多线程有什么关联 WinForm多线程编程篇 我的多线程W ...
- Andorid之Annotation框架初使用(七)
Save Instance State:程序保留Activity的实例状态 , 在onSaveInstanceState(Bundle)被系统调用的时候自动保存 , onCreate(Bundle)被 ...
- #include <NOIP2009 Junior> 细胞分裂 ——using namespace wxl;
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...
- oracle汉字转拼音
CREATE OR REPLACE FUNCTION F_PINYIN(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS V_COMPARE VARCHAR2(100); ...
- HDFS的常用操作
本文地址:http://www.cnblogs.com/archimedes/p/hdfs-operations.html,转载请注明源地址. 1.HDFS文件的权限以及读写操作 HDFS文件的权限: ...
- Microsoft Office Word 2007 文档结构图突然变小的解决办法
前记: 一个word文档不知道修改了什么,突然发现文档结构图显示的文字变得非常的小了. 用ctrl+鼠标滚轮只能放大或是缩小行间距,对文字没有什么变化. 解决办法: 1.打开文档结构图 点击视图,勾选 ...