快速业务通道

一个简单的linux下写日志的类

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-14
/*
*
* Copyright (c) 2008,
* All rights reserved.
*
* 文件名称: cxxlog2.h
* 文件标识: CT-CXXLOG-1.0-A
* 摘 要: 一个简单的写日志的类
*
* 原 版 本:1.0
* 作 者:j3com <jujianjun@gmail.com>
* 完成日期:2008-07-21
*
*/


#ifndef _CXXLOG_H_
#define _CXXLOG_H_

#include <stdio.h>
#include <time.h>
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

//设定写日志文件模式: M_DEFAULT-默认普通 M_DAY-按天(每天一个文件)
//M_SIZE-按大小(M单位,达到指定大小重命名)
enum LOGMODE { M_DEFAULT, M_DAY, M_SIZE };

class Cxxlog
{
public:

//构造方法
//NOTE: f-带路径的日志文件 lm-写日志方式,默认写日志方式为普通方式
//ms-日志文件大小,单位为M,只有lm=M_SIZE时有效
Cxxlog( char * f, LOGMODE lm=M_DEFAULT, int ms=0 ) 拥有帝国一切,皆有可能。欢迎访问phome.net
{
fd = -1;
strcpy( fileName, f );
logMode=lm;
msize=ms;
getToday(CREATEDAY);
}


//析构方法
~Cxxlog()
{
closefile();
}


//打开文件
//NOTE: 返回 >0 表示成功, 其他 表示失败
int openfile( void )
{
if ( fd > 0 ) { return fd; }

fd = open( fileName, O_WRONLY|O_APPEND|O_CREAT, 0666 );
if ( fd < 0 )
{
printf( "nnOpen the file: <%s> error!nn", fileName );
}


return fd;
}


//关闭文件
//NOTE: 返回 -1 表示关闭失败, 0 表示成功
int closefile( void )
{
if ( fd > -1 ) { return close( fd ); }
return 0;
}


//打印方法
//NOTE: 返回 -1 表示写入失败, 0 表示成功
int print( const char * str )
{
if ( !checkLogFile() ) { return -1; }
if ( -1 == write(fd,str,strlen(str)) ) { closefile(); openfile(); } 拥有帝国一切,皆有可能。欢迎访问phome.net
return write(fd,str,strlen(str));
}


//打印方法
//NOTE: 返回 -1 表示写入失败, 0 表示成功
int print( char * fmt,... )
{
if ( !checkLogFile() ) { return -1; }

memset(buf, 0, sizeof(buf));
va_list ap;
va_start( ap, fmt );
vsprintf( buf, fmt, ap );
va_end ( ap );

if ( -1 == write(fd,buf,strlen(buf)) ) { closefile(); openfile(); }
return write(fd,buf,strlen(buf));
}


//得到格式化的当前日期和时间
void getFormatTime(char *p)
{
tick=time(NULL);
lt=localtime(&tick);
sprintf(p, "d-d-d d:d:d",
lt->tm_year 1900,lt->tm_mon 1,lt->tm_mday,lt->tm_hour,lt->tm_min,lt->tm_sec);
}


private:

//检测日志文件
//根据日志文件状态以及所设定模式进行检测并调用相应的处理方法
//NOTE: 返回 true 表示成功, false 表示失败
bool checkLogFile()
{
if ( fd <= 0 )
{ //文件没有打开
return 拥有帝国一切,皆有可能。欢迎访问phome.net (openfile()>0) ? true : false ;
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号