⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logger_file.cxx.svn-base

📁 wince下的VNC 控制。X86下的源码。完全来源于共享源码。调试OK。
💻 SVN-BASE
字号:
/* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
* 
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* 
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this software; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
* USA.
*/

// -=- Logger_file.cxx - Logger instance for a file

#include <stdlib.h>
#include <string.h>

#include <rfb/util.h>
#include <rfb/Logger_file.h>
#include <rfb/Threading.h>

using namespace rfb;


// If threading is available then protect the write() operation
// from concurrent accesses
#ifdef __RFB_THREADING_IMPL
static Mutex logLock;
#endif

Logger_File::Logger_File(const char* loggerName)
: Logger(loggerName), indent(13), width(79), m_filename(0), m_file(0),
m_lastLogTime(0)
{
}

Logger_File::~Logger_File()
{
	closeFile();
}

void Logger_File::write(int level, const char *logname, const char *message)
{
#ifdef __RFB_THREADING_IMPL
	Lock l(logLock);
#endif
	if (!m_file) {	  
		if (!m_filename) {
			return;
		} 

		CharArray bakFilename(strlen(m_filename) + 1 + 4);
		sprintf(bakFilename.buf, "%s.bak", m_filename);

#ifdef _WIN32_WCE
		TCHAR file[MAX_PATH + 1];
		TCHAR bakFile[MAX_PATH + 1];		
		mbstowcs(file, m_filename, sizeof(m_filename)/sizeof(TCHAR));
		mbstowcs(bakFile, bakFilename.buf, sizeof(file)/sizeof(TCHAR));
		
		DeleteFile(bakFile);
		MoveFile(file,bakFile);		
#else
		remove(bakFilename.buf);
		rename(m_filename, bakFilename.buf);
#endif
		m_file = fopen(m_filename, "w+");
		if (!m_file) return;
	}
	
#ifndef _WIN32_WCE
	time_t current = time(0);
	if (current != m_lastLogTime) {
		m_lastLogTime = current;
		fprintf(m_file, "\n%s", ctime(&m_lastLogTime));
	}
#else
	// Thomas 22.05.2008 WinCE Debugging
	SYSTEMTIME current;
	GetLocalTime(&current);
	fprintf(m_file, "\r\n%04d/%02d/%02d %02d:%02d:%02d,%03d", 
		(int)current.wYear, (int)current.wMonth, (int)current.wDay,
		(int)current.wHour, (int)current.wMinute, (int)current.wSecond, (int)current.wMilliseconds);
#endif
	
	fprintf(m_file," %s:", logname);
	int column = strlen(logname) + 2;
	if (column < indent) {
		fprintf(m_file,"%*s",indent-column,"");
		column = indent;
	}

	while (true) {
		const char* s = strchr(message, ' ');
		int wordLen;
		if (s) wordLen = s-message;
		else wordLen = strlen(message);
		
		if (column + wordLen + 1 > width) {

#ifndef _WIN32_WCE
			fprintf(m_file,"\n%*s",indent,"");
#else
	// Thomas 22.05.2008 WinCE Debugging
			fprintf(m_file,"\r\n%*s",indent,"");
#endif
			column = indent;
		}
		fprintf(m_file," %.*s",wordLen,message);
		column += wordLen + 1;
		message += wordLen + 1;
		if (!s) break;
	}
#ifndef _WIN32_WCE
	fprintf(m_file,"\n");
#else
	// Thomas 22.05.2008 WinCE Debugging
	fprintf(m_file,"\r\n");
#endif

	fflush(m_file);
}

void Logger_File::setFilename(const char* filename)
{
	closeFile();
	m_filename = strDup(filename);
}

void Logger_File::setFile(FILE* file)
{
	closeFile();
	m_file = file;
}

void Logger_File::closeFile()
{
	if (m_filename) {
		if (m_file) {
			fclose(m_file);
			m_file = 0;
		}
		strFree(m_filename);
		m_filename = 0;
	}
}

static Logger_File logger("file");

bool rfb::initFileLogger(const char* filename) {
	logger.setFilename(filename);
	logger.registerLogger();
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -