• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > linux系统中c++写日志文件功能分享

linux系统中c++写日志文件功能分享

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了linux系统中,linux系统中git命令,linux系统中安装软件,linux 系统中打开xls,linux系统中链接分为等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

简化了glog,只保留了写日志文件的功能,只是改写了linux版本,win版本未改写,可以用
LOG(INFO)<< 输出日志
也可用LOG_IF(INFO,condition)<<输出日志
也可直接调用日志类Logger::GetInstance().Error 等方式写日志
初始化时调用 InitLogging(argv[0],INFO,"./log/test");
第一个参数是路径,第二个参数是最低日志级别,第三个参数表示日志文件的前缀和文件夹

FileHelper.h
#ifndef FILEHELPER_H_
#define FILEHELPER_H_
#include <string>
#include <vector>
#include <fstream>
#include <stdio.h>
#ifdef _WIN32
#include <direct.h>
#include <io.h>
#else
#include <stdarg.h>
#include <sys/stat.h>
#endif

namespace FrameWork {
#ifdef _WIN32
#define ACCESS _access
#define MKDIR(a) _mkdir((a))
#else
#define ACCESS access
#define MKDIR(a) mkdir((a),0755)
#endif

class FileHelper {
public:
 static bool save(const std::string filename, std::string& content)
 {
        FILE *file = fopen(filename.c_str(), "wb");

        if (file == NULL)
            return false;
  fwrite(content.c_str(),sizeof(char),content.size(),file);
  fclose(file);
  return true;
 }

    // used to open binary file
    static bool open(const std::string filename, std::string& content)
    {
        FILE *file = fopen(filename.c_str(), "rb");

        if (file == NULL)
            return false;

        fseek(file, 0, SEEK_END);
        int len = ftell(file);
  rewind(file);
  content.clear();
        char *buffer = new char[len];
        fread(buffer, sizeof(char), len, file);
        content.assign(buffer, len);
        delete []buffer;

  //int nRead;
  //content.clear();
  //char buffer[80];
  //while(!feof(file)){
  // nRead = fread(buffer,sizeof(char),sizeof(buffer),file);
  // if(nRead > 0){
  //  content.append(buffer);
  // }
  //}
        fclose(file);
        return true;
    }

    // used to open text file
    static bool open(const std::string file_name, std::vector<std::string>& lines)
    {
        std::ifstream file(file_name.c_str(), std::ios::in);
        if (!file)
        {
            return false;
        }

        lines.clear();
        char buffer[BUFFER_SIZE];

        while (file.getline(buffer, BUFFER_SIZE, '\n'))
        {
            lines.push_back(buffer);
        }

        return true;
    }
    static bool CreateDir(const char *pszDir)
    {
     size_t i = 0;
     size_t iRet;
     size_t iLen = strlen(pszDir);
     char* buf=new char[iLen+1];
     strncpy(buf,pszDir,iLen+1);
     for (i = 0;i < iLen;i ++) {
      if (pszDir[i] == '\\' || pszDir[i] == '/') {
       buf[i] = '\0';
       //如果不存在,创建
       iRet = ACCESS(buf,0);
       if (iRet != 0) {
        iRet = MKDIR(buf);
        if (iRet != 0) {
         delete[] buf;
         return false;
        }
       }
       //支持linux,将所有\换成/
       buf[i] = '/';
      }
     }
     delete[] buf;
     return true;
    }


private:

    enum { BUFFER_SIZE = 3000 };

};

} /* namespace FrameWork */
#endif /* FILEHELPER_H_ */
[/code]

Logger.cpp

static void InitPaths(const char* filename,const char* destFolder)
{
 memset(_appName,0,MaxFilePathLen);
 memset(_appFolder,0,MaxFilePathLen);
 memset(_destFolder,0,MaxFilePathLen);
 memset(_destPrefix,0,MaxFilePathLen);

 strcpy(_appName,filename);
 int len = strlen(filename),lend;
 int pos = len-1,posd,start;
 while(pos >0 && filename[pos] != PathSplitChar)
  pos--;
 strncpy(_appFolder,filename,pos+1);
 lend = strlen(destFolder);
 posd = lend-1;
 if(destFolder[lend-1] != PathSplitChar) {
  //has prefix
  while(posd >0 && destFolder[posd] != PathSplitChar)
   posd--;
 }
 if(destFolder[0] == '.' && destFolder[1] == PathSplitChar){
  strncpy(_destFolder,filename,pos+1);
  start = 2;
 } else{
  pos = 8;
  strcpy(_destFolder,_defaltFolder);
  if(destFolder[0] != PathSplitChar){
 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • linux系统中c++写日志文件功能分享
  • linux c模拟ls命令详解

相关文章

  • 2017-05-28C++中typedef 及其与struct的结合使用
  • 2017-05-28大数(高精度数)模板(分享)
  • 2017-05-28理解数据结构
  • 2017-05-28使用C++的string实现高精度加法运算的实例代码
  • 2017-05-28C++中this指针用法详解及实例
  • 2017-05-28c语言输出字符串中最大对称子串长度的3种解决方案
  • 2017-05-28C++动态分配和撤销内存以及结构体类型作为函数参数
  • 2017-05-28编写C++程序使DirectShow进行视频捕捉
  • 2017-05-28C++指针 详细介绍及总结
  • 2017-05-28c++中容器之总结篇

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言单向链表的表示与实现实例详解
    • 详解C语言中的字符串拼接(堆与栈)
    • VC++实现文件与应用程序关联的方法(注册表修改)
    • C++多线程编程简单实例
    • C++实现汉诺塔算法经典实例
    • Cocos2d-x保存用户游戏数据CCUserDefault类使用实例
    • C语言system 自动关机函数代码
    • c语言多进程tcp服务器示例
    • C++基于控制台实现的贪吃蛇小游戏
    • C语言实现双向链表

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有