这是一个简单的Logsystem,主要目的是提供一个简单的实现方式,以后复杂的应用可以在这个基础上改进,
接口上基本上把fstream包了一层,而且也在std namespace里.本来是本来是从basic_ofstrem继承的,
后来想想那样有些东西难处理(主要是要对输出做限制)
该log可以对输出级别进行限制,只对在允许范围内的输出信息被输出,否则不输出>
以后准备做成可以输出HTML格式的。加一些便利函数,输出日期啊等.
#ifndef __LOGSYTEM_H__
#define __LOGSYTEM_H__
/*
stanlylee's log system
module name : logstream
*/
#ifdef _WIN32
#include <Windows.h>
#endif
#include <fstream>
namespace std{
template <typename Type,typename _Traits> class basic_logstream
{
void init()
{
m_curLevel = 1;
m_forbiddenLevel = 1;
}
public:
typedef basic_ofstream<Type,_Traits> _MyFileStrem;
typedef basic_ios<Type, _Traits> _MyBaseios;
typedef basic_logstream<Type,_Traits> _Myos;
typedef basic_ostream<Type,_Traits> _MyBasOs;
enum logmode
{
log_common = 0x00000000,
log_html = 0x00000001,
};
basic_logstream()
{
init();
}
basic_logstream(const char* _filename,bool append = false,logmode lmode= log_common)
{
init();
m_filestream.open(_filename,append,lmode);
}
//basic operation like fstream;
void open(const char* _filename,bool append = false,logmode lmode= log_common)
{
m_filestream.open(_filename,ios_base::out);
}
void close()
{
m_filestream.close();
return;
}
bool fail()
{
return m_filestream.fail();
}
bool is_open()
{
return m_filestream.is_open();
}
bool bad()
{
return m_filestream.bad();
}
void setstate(ios_base::iostate _state,bool _Expcept = false)
{
m_filestream.setstate(_state,_Expcept);
}
void setstate(ios_base::io_state _state)
{
m_filestream.setstate(_state);
}
void clear(ios_base::iostate _state = ios_base::goodbit,bool _Expcept = false)
{
m_filestream.clear(_state,_Expcept);
}
void clear(ios_base::io_state _state)
{
m_filestream.clear(_state);
}
Type fill(Type _Newfill)
{
return m_filestream.fill(_Newfill);
}
Type fill()
{
return m_filestream.fill();
}
ios::fmtflags flags()
{
return m_filestream.flags();
}
ios::fmtflags flags(ios::fmtflags _Newflags)
{
m_filestream.flush();
return m_filestream.flags(_Newflags);
}
_Myos& flush()
{
m_filestream.flush();
return *this;
}
bool operator !()
{
return !m_filestream;
}
operator void* ()
{
return (void*)m_filestream;
}
bool opfx()
{
return m_filestream.opfx();
}
void osfx()
{
m_filestream.osfx();
}
streamsize precision()
{
return m_filestream.precision();
}
streamsize precision(streamsize _NewPrecision)
{
return m_filestream.precision(_NewPrecision);
}
streamsize width()
{
return m_filestream.width();
}
streamsize width(streamsize _NewPrecision)
{
return m_filestream.width(_NewPrecision);
}
//operator <<
template <typename DataType>_Myos& operator<<(DataType data)
{
if(m_curLevel >= m_forbiddenLevel)
{
m_filestream<<data;
}
return *this;
}
//manipulators
_Myos& operator<<(_MyBasOs& (__cdecl *_Pfn)(_MyBasOs&))
{ // call basic_ostream manipulator
((*_Pfn)(m_filestream));
return *this;
}
_Myos& operator<<(_MyBaseios& (__cdecl *_Pfn)(_MyBaseios&))
{ // call basic_ios manipulator
(*_Pfn)(m_filestream);
return (*this);
}
_Myos& operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
{ // call ios_base manipulator
(*_Pfn)(*(ios_base *)this);
return (*this);
}
void set_forbidden_level(int level)
{
m_forbiddenLevel = level;
}
void set_level(int level)
{
m_curLevel = level;
}
/**
Here is the format;
*/
void trace(const char* fmt, ...)
{
if(m_curLevel >= m_forbiddenLevel)
{
char buffer[512];
va_list args;
va_start(args, fmt);
_vsnprintf(buffer, 1024, fmt, args);
va_end(args);
buffer[511] = '/0';
#ifdef _WIN32
OutputDebugStringA(buffer);
#endif
cout<<buffer;
m_filestream<<buffer;
}
}
void trace(int level, const char* fmt, ...)
{
if(level >= m_forbiddenLevel)
{
char buffer[512];
va_list args;
va_start(args, fmt);
_vsnprintf(buffer, 1024, fmt, args);
va_end(args);
buffer[511] = '/0';
#ifdef _WIN32
OutputDebugStringA(buffer);
#endif
cout<<buffer;
m_filestream<<buffer;
}
}
private:
_MyFileStrem m_filestream;
int m_curLevel;
int m_forbiddenLevel;
};
typedef basic_logstream<char , char_traits<char> > logstream;
typedef basic_logstream<wchar_t , char_traits<wchar_t> > wlogstream;
}
#endif
分享到:
相关推荐
LogSystem简易日志记录
Graylog 是一个简单易用、功能较全面的日志管理工具,相比 ELK 组合, 优点: - 部署维护简单 - 查询语法简单易懂(对比ES的语法…) - 内置简单的告警 - 可以将搜索结果导出为 json - 提供简单的聚合统计功能 - UI ...
这个项目是一个简单的教务查询系统,该练手小项目希望能帮助到大家,熟悉SSM的整合开发 使用技术 IOC容器:Spring Web框架:SpringMVC ORM框架:Mybatis 安全框架:Shiro 数据源:C3P0 日志:log4j 前端框架...
几乎任何纪录日志的API得功能都超越了简单的System.out.print语句。允许有选 择控制的输出日志信息,也就是说,某的时候,一些日志信息允许输出,而另一 些则不允许输出。这就假设日志纪录信息之间是有分别的,根据...
通常大家可以简单地使用System.out.println()语句输出日志信息,但是在发布时,通常不想在正式的版本中打印这些开发时的调试信息,于是又要手工地把这些语句删除,所以大量的这样的System.out.println()调试语句会...
一个简单的开源Android工具类库,提供许多常用的类帮助我们开发程序。 AndroidCommon 一个简单的开源Android工具类库,提供许多常用的类帮助我们开发程序。 These are the Android Common Utils. Class ...
该方案是您有N(> 5)台计算机,每台计算机都生成一个日志文件(名为machine.i.log)。 您在这N台计算机中的任何一台上打开一个终端。 现在,您应该能够执行grep命令,该命令在所有计算机上的所有日志文件上运行,...
解码对我们来说是整个上载过程最繁琐的一个步骤,经过以上的流程,我们可以得到一个包含有所有上载数据的一个字节数组和一个分界符,通过对 Receive.log 分析,还可以得到每个数据段中的分界符。而我们要得到以下...
登录系统请勿使用此功能。 真的。 它是为长期实践而制造的。... 编辑文件中的设置。 如果未提供正确的SMTP,则电子邮件发送将... 将位于classes文件夹中的WriteToLog.php中的date_default_timezone_set()更改为默认时
使用Log4j不急可以完成简单的程序日志功能,还可以对程序日志记录分级管理。使日志信息具有多种输出格式和多个输出级别。日志记录可以通过配置在运行时得到控制,他可以避免使用成千上万的System.out.pringln语句...
这是一个基于SSM + Bootstrap的教务查询系统,是一个教务查询系统。专门针对数据库的增删改查练习。采用熟悉的SSM的整合开发。 使用技术 IOC容器:Spring Web框架:SpringMVC ORM框架:Mybatis数据源:C3P0日志:log...
大家在编程时经常不可避免地要使用到一些日志操作,比如开发阶段的调试信息、运行时的日志记录及审计。...通常大家可以简单地使用System.out.println()语句输出日志信息,但是往往会有一些判断,比如:
代码如下:using System;using System.Collections...namespace LogisTrac{ /// /// 日志类 /// 队列 可年/月/周/日/大小分割 /// 调用方法: /// Log.Instance.LogDirectory=@”C:\”; 默认为程序运行目录 ///
Log2seq是一个python软件包,可帮助将类似于syslog的消息解析为单词序列,更适合于进一步的自动化分析。 它基于使用正则表达式按顺序可自定义规则的过程。 文件: : 资料来源: : 错误报告: : 作者: 许可证...
graylog2thehive 根据您的警报在创建警报,以将其转换为Hive案例。 作为Web服务器运行的简单Python flask应用程序,并从Gray...将init.d/graylog2thehive.service复制到/etc/systemd/system/graylog2thehive.service
SHoEBoX是功能齐全的Weblog管理系统,它具有简单的界面并支持多种输出格式。
cleanup:一个增强的和广义的删除logfile的脚本 3-1. 代码块和I/O重定向 3-2. 将一个代码块的结果保存到文件 3-3. 在后台运行一个循环 3-4. 备份最后一天所有修改的文件. 4-1. 变量赋值和替换 4-2. 一般的变量赋值 4...
cleanup:一个增强的和广义的删除logfile 的脚本 3-1. 代码块和I/O 重定向 3-2. 将一个代码块的结果保存到文件 3-3. 在后台运行一个循环 3-4. 备份最后一天所有修改的文件. 4-1. 变量赋值和替换 4-2. 一般的变量赋值...
slf4j-log4j12-1.7.32.jar:用于绑定 1.2版的log4j , 这是一个广泛使用的日志系统,当然你还要把log4j包加到classpath中slf4j-jdk14-1.7.32.jar:用于绑定 java.util.logging, 作为JDK 1.4 的loggingslf4j-simple-...