亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? logger.cpp

?? This software aims to create an applet and panel tools to manage a wireless interface card, such as
?? CPP
字號:
//
// Logger.cpp
//
// $Id: //poco/Main/Foundation/src/Logger.cpp#5 $
//
// Copyright (c) 2004, Guenter Obiltschnig/Applied Informatics.
// All rights reserved.
// 
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
// 
// 3. Redistributions in any form must be accompanied by information on
//    how to obtain complete source code for this software and any
//    accompanying software that uses this software.  The source code
//    must either be included in the distribution or be available for no
//    more than the cost of distribution plus a nominal fee, and must be
//    freely redistributable under reasonable conditions.  For an
//    executable file, complete source code means the source code for all
//    modules it contains.  It does not include source code for modules or
//    files that typically accompany the major components of the operating
//    system on which the executable file runs.
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//


#include "Foundation/Logger.h"
#include "Foundation/Formatter.h"
#include "Foundation/LoggingRegistry.h"
#include "Foundation/Exception.h"


Foundation_BEGIN


Logger::LoggerMap* Logger::_pLoggerMap = 0;
Mutex Logger::_mapMtx;


Logger::Logger(const std::string& name, Channel* pChannel, int level): _name(name), _pChannel(pChannel), _level(level)
{
	if (pChannel) pChannel->duplicate();
}


Logger::~Logger()
{
	if (_pChannel) _pChannel->release();
}


void Logger::setChannel(Channel* pChannel)
{
	if (_pChannel) _pChannel->release();
	_pChannel = pChannel;
	if (_pChannel) _pChannel->duplicate();
}


Channel* Logger::getChannel() const
{
	return _pChannel;
}


void Logger::setLevel(int level)
{
	_level = level;
}


void Logger::setLevel(const std::string& level)
{
	if (level == "fatal")
		setLevel(Message::PRIO_FATAL);
	else if (level == "critical")
		setLevel(Message::PRIO_CRITICAL);
	else if (level == "error")
		setLevel(Message::PRIO_ERROR);
	else if (level == "warning")
		setLevel(Message::PRIO_WARNING);
	else if (level == "notice")
		setLevel(Message::PRIO_NOTICE);
	else if (level == "information")
		setLevel(Message::PRIO_INFORMATION);
	else if (level == "debug")
		setLevel(Message::PRIO_DEBUG);
	else if (level == "trace")
		setLevel(Message::PRIO_TRACE);
	else
		throw InvalidArgumentException("Not a valid log level", level);
}


void Logger::setProperty(const std::string& name, const std::string& value)
{
	if (name == "channel")
		setChannel(LoggingRegistry::defaultRegistry().channelForName(value));
	else if (name == "level")
		setLevel(value);
	else 
		Channel::setProperty(name, value);
}


void Logger::log(const Message& msg)
{
	if (msg.getPriority() > _level && _pChannel)
	{
		_pChannel->log(msg);
	}
}


void Logger::log(const Exception& exc)
{
	error(exc.displayText());
}


void Logger::setLevel(const std::string& name, int level)
{
	Mutex::ScopedLock lock(_mapMtx);

	if (_pLoggerMap)
	{
		std::string::size_type len = name.length();
		for (LoggerMap::iterator it = _pLoggerMap->begin(); it != _pLoggerMap->end(); ++it)
		{
			if (len == 0 || it->first.compare(0, len, name) == 0 && (it->first.length() == len || it->first[len] == '.'))
				it->second->setLevel(level);
		}
	}
}


void Logger::setChannel(const std::string& name, Channel* pChannel)
{
	Mutex::ScopedLock lock(_mapMtx);

	if (_pLoggerMap)
	{
		std::string::size_type len = name.length();
		for (LoggerMap::iterator it = _pLoggerMap->begin(); it != _pLoggerMap->end(); ++it)
		{
			if (len == 0 || it->first.compare(0, len, name) == 0 && (it->first.length() == len || it->first[len] == '.'))
				it->second->setChannel(pChannel);
		}
	}
}


Logger& Logger::get(const std::string& name)
{
	Mutex::ScopedLock lock(_mapMtx);

	Logger* pLogger = has(name);
	if (!pLogger)
	{
		Logger& par = parent(name);
		pLogger = new Logger(name, par.getChannel(), par.getLevel());
		add(pLogger);
	}
	return *pLogger;
}


Logger& Logger::create(const std::string& name, Channel* pChannel, int level)
{
	Mutex::ScopedLock lock(_mapMtx);

	if (has(name)) throw ExistsException();
	Logger* pLogger = new Logger(name, pChannel, level);
	add(pLogger);
	return *pLogger;
}


Logger& Logger::root()
{
	Mutex::ScopedLock lock(_mapMtx);

	Logger* pRoot = has("");
	if (!pRoot)
	{
		pRoot = new Logger("", 0, Message::PRIO_INFORMATION);
		add(pRoot);
	}
	return *pRoot;
}


Logger* Logger::has(const std::string& name)
{
	Mutex::ScopedLock lock(_mapMtx);

	if (_pLoggerMap)
	{
		LoggerMap::iterator it = _pLoggerMap->find(name);
		if (it != _pLoggerMap->end())
			return it->second;
	}
	return 0;
}


void Logger::shutdown()
{
	Mutex::ScopedLock lock(_mapMtx);

	if (_pLoggerMap)
	{
		for (LoggerMap::iterator it = _pLoggerMap->begin(); it != _pLoggerMap->end(); ++it)
		{
			it->second->release();
		}
		delete _pLoggerMap;
		_pLoggerMap = 0;
	}
}


Logger& Logger::parent(const std::string& name)
{
	std::string::size_type pos = name.rfind('.');
	if (pos != std::string::npos)
	{
		std::string pname = name.substr(0, pos);
		Logger* pParent = has(pname);
		if (pParent)
			return *pParent;
		else
			return parent(pname);
	}
	else
	{
		return root();
	}
}


class AutoLoggerShutdown
{
public:
	AutoLoggerShutdown()
	{
	}
	~AutoLoggerShutdown()
	{
		Logger::shutdown();
	}
};


void Logger::add(Logger* pLogger)
{
	static AutoLoggerShutdown als;

	if (!_pLoggerMap)
		_pLoggerMap = new LoggerMap;
	_pLoggerMap->insert(LoggerMap::value_type(pLogger->name(), pLogger));
}


Foundation_END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
大尺度一区二区| 欧美不卡一区二区| 日韩精品一区二区三区视频播放 | 亚洲免费在线视频| 美女视频一区二区三区| 91在线视频观看| 久久蜜臀中文字幕| 亚洲网友自拍偷拍| 99久久国产综合精品麻豆| 欧美大片日本大片免费观看| 亚洲精品国产一区二区精华液 | 不卡区在线中文字幕| 日韩欧美国产一区二区三区 | 美女视频黄久久| 欧美伊人久久久久久午夜久久久久| 欧美一区二区免费| 一区二区三区四区精品在线视频| 国产成人亚洲综合a∨婷婷图片 | 国产精品污网站| 精品亚洲porn| 日韩一区二区三区观看| 亚洲图片一区二区| 欧美手机在线视频| 亚洲视频你懂的| 成人av电影观看| 国产精品三级电影| 粉嫩久久99精品久久久久久夜| 日韩视频一区二区| 美国三级日本三级久久99| 欧美性欧美巨大黑白大战| 亚洲欧美日韩在线| 91麻豆免费观看| 亚洲日本电影在线| 色婷婷久久久久swag精品 | 色婷婷综合五月| 一色屋精品亚洲香蕉网站| 丁香婷婷深情五月亚洲| 国产精品美女www爽爽爽| 国产精品一区二区无线| 久久久电影一区二区三区| 久久99精品久久久久久动态图| 欧美一级生活片| 蜜桃视频一区二区三区在线观看| 日韩欧美二区三区| 国产精品12区| 亚洲啪啪综合av一区二区三区| 99r国产精品| 亚洲综合在线免费观看| 欧美人妖巨大在线| 久久99久久99| 国产精品美女一区二区| 欧美丝袜丝交足nylons图片| 日韩影院免费视频| 2020国产精品| av亚洲精华国产精华精华| 一区二区三区四区蜜桃| 欧美精品乱码久久久久久| 六月丁香综合在线视频| 国产精品久久久久毛片软件| 91福利区一区二区三区| 蜜臀国产一区二区三区在线播放| 久久久一区二区三区捆绑**| 99久久精品免费看| 青青草97国产精品免费观看| 久久久久久**毛片大全| 一本高清dvd不卡在线观看| 日韩av一级电影| 国产欧美日韩一区二区三区在线观看| 色综合色综合色综合 | 国产精一区二区三区| 亚洲免费av高清| 欧美一卡二卡在线| 成人h动漫精品一区二区| 亚洲h在线观看| 国产精品视频一区二区三区不卡| 在线亚洲高清视频| 国产激情视频一区二区在线观看| 亚洲已满18点击进入久久| 日韩欧美一二三四区| 色天天综合久久久久综合片| 捆绑紧缚一区二区三区视频 | 欧美激情一区二区| 欧美夫妻性生活| 99r国产精品| 精品一区二区免费在线观看| 夜夜爽夜夜爽精品视频| 国产欧美在线观看一区| 欧美精品123区| 色哟哟亚洲精品| 国产精品99久久久久久久vr| 午夜精品福利一区二区三区蜜桃| 国产精品美日韩| 久久天天做天天爱综合色| 欧美日韩精品久久久| 91在线观看高清| 成人免费视频caoporn| 国产综合色在线视频区| 三级一区在线视频先锋| 亚洲综合丝袜美腿| 最近中文字幕一区二区三区| 久久日韩精品一区二区五区| 欧美区一区二区三区| 色婷婷综合久久久久中文| 97久久超碰国产精品| 高清在线不卡av| 国产成人亚洲综合色影视| 国产一区中文字幕| 狠狠色2019综合网| 麻豆国产精品一区二区三区| 日日骚欧美日韩| 午夜私人影院久久久久| 亚洲一区中文日韩| 一区二区三区小说| 亚洲一区在线播放| 亚洲国产综合人成综合网站| 亚洲人成影院在线观看| 亚洲少妇最新在线视频| 亚洲欧美一区二区三区国产精品| 中文字幕久久午夜不卡| 国产精品视频线看| 亚洲日本成人在线观看| 亚洲综合色在线| 偷拍一区二区三区| 日韩黄色一级片| 久久不见久久见免费视频1| 久久av资源网| 国产99久久久国产精品免费看| 高清日韩电视剧大全免费| 国产成人免费视频一区| aaa亚洲精品| 在线中文字幕一区| 91精品国产美女浴室洗澡无遮挡| 日韩精品资源二区在线| 久久久久久久网| 亚洲视频在线一区二区| 亚洲午夜激情网站| 黄色日韩网站视频| 成人免费视频视频在线观看免费 | 成人免费小视频| 一区二区三区在线免费播放| 亚洲成人免费在线观看| 久久久99精品久久| 偷拍一区二区三区| 91视频在线观看| 丝袜亚洲另类欧美| 免费黄网站欧美| 粗大黑人巨茎大战欧美成人| 91视频com| 日韩免费看的电影| 国产精品区一区二区三区| 亚洲最新在线观看| 国产专区欧美精品| 欧美三级欧美一级| 亚洲精品一区二区三区精华液| 日本一区二区三级电影在线观看 | 日韩亚洲欧美一区二区三区| 久久蜜桃av一区二区天堂| 亚洲黄色免费电影| 精品一区二区日韩| 欧美性生活久久| 国产三级精品三级| 日本在线观看不卡视频| 成人黄色在线网站| 欧美电影免费观看高清完整版在线| 国产精品久久久久久久久免费桃花| 亚洲一区二区三区四区在线观看| 国内精品在线播放| 欧美日韩中文国产| 中文字幕色av一区二区三区| 久久av老司机精品网站导航| 欧美亚州韩日在线看免费版国语版| 久久伊人蜜桃av一区二区| 亚洲成年人影院| 9色porny自拍视频一区二区| 精品久久久三级丝袜| 亚洲国产va精品久久久不卡综合 | 1024精品合集| 国产一区二三区好的| 51精品久久久久久久蜜臀| 亚洲女与黑人做爰| 成人小视频在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲第一会所有码转帖| 色欧美88888久久久久久影院| 国产农村妇女毛片精品久久麻豆| 麻豆国产精品一区二区三区| 91.xcao| 亚洲黄色片在线观看| 91丨九色丨蝌蚪富婆spa| 国产喷白浆一区二区三区| 国产一区二区三区最好精华液 | 色婷婷亚洲一区二区三区| 国产精品女人毛片| 成人精品高清在线| 亚洲国产成人午夜在线一区| 国产自产v一区二区三区c| 日韩精品在线看片z| 韩国视频一区二区| www国产成人免费观看视频 深夜成人网| 日韩精品一卡二卡三卡四卡无卡|