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

📄 nlfileappender.h

📁 一些unix下的c/c++的util包
💻 H
字号:
/**
 * 文件附加器类定义
 * @file NLFileAppender.h
 * @date 14-Jul-2005
 * @author 胡春雨
 * @version 1.0.0: 初始版本
 */

#ifndef _NL_FILE_APPENDER_H
#define _NL_FILE_APPENDER_H

#include "nlkit/NLAppender.h"
#include "nlkit/NLTime.h"

namespace nlkit
{

/**
 * 文件附加器类
 */
class NLFileAppender : public NLAppender
{
public:
	/**
	 * 构造函数
	 * @param filename:	文件名
	 * @param mode:	打开模式
	 * @param immediateFlush:	是否立即刷新,默认立即
	 * @param withAdorn:	是否带装饰语,默认带
	 * @return 无
	 */
	NLFileAppender(const std::string& filename, 
			const char* type = NLLOG_FILE_OPEN_MODE,
			bool immediateFlush = true,
			bool withAdorn = true);

	/**
	 * 虚拟析构函数
	 * @param 无
	 * @return 无
	 */
	virtual ~NLFileAppender();

	/**
	 * 关闭文件附加器
	 * @param 无
	 * @return 无
	 */
	virtual void close();

protected:
	/**
	 * 文件附加器处理事件
	 * @param event:	事件
	 * @return 无
	 */
	virtual void append(const NLEvent& event);

	/**
	 * 重新打开文件,并删除原文件
	 * @param filename:	文件名
	 * @param mode:	打开模式
	 * @return 无
	 */
	void reopen(const std::string& filename, const char* mode);

	bool m_immediateFlush;					/**< 是否立即刷新 */
	bool m_withAdorn;							/**< 是否带装饰语 */
	FILE* m_out;								/**< 文件输出流 */
	std::string m_filename;					/**< 文件名 */

private:
	/**
	 * 初始化
	 * @param filename:	文件名
	 * @param mode:	打开模式
	 * @return 无
	 */
	void init(const std::string& filename, const char* mode);

	NLFileAppender(const NLFileAppender&);
	NLFileAppender& operator=(const NLFileAppender&);
};

/**
 * 循环文件附加器类
 */
class NLRollingFileAppender : public NLFileAppender
{
public:
	/**
	 * 构造函数
	 * @param filename:	文件名
	 * @param maxFileSize:	最大文件尺寸,默认10M
	 * @param maxBackupIndex:	最大备份索引值,默认10
	 * @param immediateFlush:	是否立即刷新,默认立即
	 * @param withAdorn:	是否带装饰语,默认带
	 * @return 无
	 */
	NLRollingFileAppender(const std::string& filename,
			long long maxFileSize = NLLOG_MAX_FILE_SIZE, // 10 MB
			int maxBackupIndex = NLLOG_MAX_INDEX,
			bool immediateFlush = true,
			bool withAdorn = true);

	/**
	 * 虚拟析构函数
	 * @param 无
	 * @return 无
	 */
	virtual ~NLRollingFileAppender();

protected:
	/**
	 * 循环文件附加器处理事件
	 * @param event:	事件
	 * @return 无
	 */
	virtual void append(const NLEvent& event);

	/**
	 * 切换处理
	 * @param 无
	 * @return 无
	 */
	void rollover();

	long long m_maxFileSize;					/**< 最大的文件尺寸 */
	int m_maxBackupIndex;						/**< 最大备份索引值 */

private:
	/**
	 * 初始化
	 * @param maxFileSize:	最大的文件尺寸
	 * @param maxBackupIndex:	最大备份索引值
	 * @return 无
	 */
	void init(long long maxFileSize, int maxBackupIndex);
};

/**
 * 按时间切换循环文件附加器.
 * 支持按天,周,月切换日志文件
 */
class NLDailyRollingFileAppender : public NLFileAppender
{
public:
	/**
	 * 构造函数
	 * @param filename:	文件名
	 * @param schedule:	计划,默认按天
	 * @param immediateFlush:	是否立即刷新,默认立即
	 * @param maxBackupIndex:	最大备份索引值,默认10000
	 * @param withAdorn:	是否带装饰语,默认带
	 * @return 无
	 */
	NLDailyRollingFileAppender(const std::string& filename,
			NLDailyRollingSchedule schedule = DAILY,
			bool immediateFlush = true,
			int maxBackupIndex = NLLOG_MAX_INDEX,
			bool withAdorn = true);

	/**
	 * 虚拟析构函数
	 * @param 无
	 * @return 无
	 */
	virtual ~NLDailyRollingFileAppender();

	/**
	 * 关闭按时间切换循环文件附加器
	 * @param 无
	 * @return 无
	 */
	virtual void close();

protected:
	/**
	 * 按时间切换循环文件附加器处理事件
	 * @param event:	事件
	 * @return 无
	 */
	virtual void append(const NLEvent& event);

	/**
	 * 切换处理
	 * @param 无
	 * @return 无
	 */
	void rollover();

	/**
	 * 取切换时的文件名
	 * @param t:	当前时间
	 * @return string:	文件名
	 */
	std::string getFilename(const NLTime& t) const;

	/**
	 * 初始化
	 * @param schedule:	循环类型
	 * @return 无
	 */
	void init(NLDailyRollingSchedule schedule);

	NLDailyRollingSchedule m_schedule;		/**< 循环类型 */
	std::string m_scheduledFilename;					/**< 循环问文件名 */
	NLTime m_nextRolloverTime;					/**< 下一次切换时间 */
	int m_maxBackupIndex;						/**< 最大备份索引值 */
};

/**
 * 并发进程文件附加器
 */
class NLParallelFileAppender : public NLDailyRollingFileAppender
{
public:
	/**
	 * 构造函数
	 * @param filename:	文件名
	 * @param schedule:	计划,默认按天
	 * @param immediateFlush:	是否立即刷新,默认立即
	 * @param maxFileSize:	最大文件尺寸,默认10M
	 * @param maxBackupIndex:	最大备份索引值,默认10000
	 * @param withAdorn:	是否带装饰语,默认带
	 * @return 无
	 */
	NLParallelFileAppender(const std::string& filename,
			NLDailyRollingSchedule schedule = DAILY,
			bool immediateFlush = true,
			long long maxFileSize = NLLOG_MAX_FILE_SIZE,
			int maxBackupIndex = NLLOG_MAX_INDEX,
			bool withAdorn = true);

	/**
	 * 虚拟析构函数
	 * @param 无
	 * @return 无
	 */
	virtual ~NLParallelFileAppender();

	/**
	 * 关闭并发进程文件附加器
	 * @param 无
	 * @return 无
	 */
	virtual void close();

protected:
	/**
	 * 切换类型
	 */
	enum switchtype
	{
		TIME_SWITCH,							/**< 时间造成切换 */
		SIZE_SWITCH,							/**< 文件大小造成切换 */
		CLOSE_SWITCH							/**< 关闭造成切换 */
	};

	/**
	 * 并发进程文件附加器处理事件
	 * @param event:	事件
	 * @return 无
	 */
	virtual void append(const NLEvent& event);

	/**
	 * 切换处理
	 * @param type:	切换类型
	 * @return 无
	 */
	void rollover(switchtype type);

	long long m_maxFileSize;					/**< 最大文件尺寸,单位:字节 */

private:
	/**
	 * 初始化
	 * @param 无
	 * @return 无
	 */
	void init();

	/**
	 * 取当前的索引值
	 * @param 无
	 * @return int:	索引值
	 */
	int getCurIdx();

	int m_curIdx;								/**< 当前索引 */
};
}
#endif	// !_NL_FILE_APPENDER_H

⌨️ 快捷键说明

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