【任务8】将日志写入log(glog)

glog简介

glog是google开源的一个日志系统,相比较log4系列的日志系统,它更加轻巧灵活,而且功能也比较完善

glog配置使用资料

下载glog

  • 命令:git clone https://github.com/google/glog.git

  • 如果没有git命令:yum -y install git

编译glog

  • 进入glog目录,打开README文件,按照其中的提示步骤进行编译:./autogen.sh && ./configure && make && make install

  • 完成后,会在/usr/local/lib路径下看到libglog*一系列库

Makefile文件和RecSys_server.skeleton.cpp文件

  • 修改之前在gen-cpp目录中的Makefile文件,在LIBS变量的末尾加上-lglog:LIBS = -L/usr/local/lib/*.so -lthrift -lfcgi -lglog

  • 修改gen-cpp目录中RecSys_server.skeleton.cpp文件:

      #include "RecSys.h"
    #include <thrift/protocol/TBinaryProtocol.h>
    #include <thrift/server/TSimpleServer.h>
    #include <thrift/transport/TServerSocket.h>
    #include <thrift/transport/TBufferTransports.h> //添加头文件
    #include <glog/logging.h> using namespace ::apache::thrift;
    using namespace ::apache::thrift::protocol;
    using namespace ::apache::thrift::transport;
    using namespace ::apache::thrift::server; using boost::shared_ptr; class RecSysHandler : virtual public RecSysIf {
    public:
    RecSysHandler() {
    // Your initialization goes here
    } void rec_data(std::string& _return, const std::string& data) {
    // Your implementation goes here
    printf("=======================\n");
    std::cout << "receive client data:" << data << std::endl; std::string ack = "yeah,I love you too!!"; //log输出,使用时按情况选择
    LOG(INFO) << data;
    LOG(ERROR) << data;
    LOG(WARNING) << data; _return = ack;
    } }; int main(int argc, char **argv) { google::InitGoogleLogging(argv[0]); int port = 9090;
    shared_ptr<RecSysHandler> handler(new RecSysHandler());
    shared_ptr<TProcessor> processor(new RecSysProcessor(handler));
    shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
    shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
    shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory()); TSimpleServer server(processor, serverTransport, transportFactory, protocolFactory);
    server.serve();
    return 0;
    }

重新编译client端和server端

  • kill掉之前的client和server,在make相应的client和server

  • 再次启动server端和client,命令:./server,/usr/local/src/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 8088 -f /test/thrift_test/python_thrift_demo/gen-cpp/client

  • 同上操作,用浏览器的方式访问,server端会打印出log,并产生log日志文件,默认路径:/tmp/下的server.ERROR,server.INFO,server.WARNING

  • 更改glog产生log日志文件的路径,在gen-cpp目录下的RecSys_server.skeleton.cpp文件中的int main()方法中添加代码,添加glog输出地址:

int main(int argc, char **argv) {

//glog地址
FLAGS_log_dir = "/test/thrift_test/python_thrift_demo/gen-cpp/logs"
google::InitGoogleLogging(argv[0]); int port = 9090;
shared_ptr<RecSysHandler> handler(new RecSysHandler());
shared_ptr<TProcessor> processor(new RecSysProcessor(handler));
shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory()); TSimpleServer server(processor, serverTransport, transportFactory, protocolFactory);
server.serve();
return 0;
}

其中logs目录需要自行创建

  • 然后执行make命令,重新生成client端和server

【八】将日志写入log(glog)的更多相关文章

  1. PHP实现日志写入log.txt

    引言:有时候调试,看不到效果,需要通过写入文件来实现. 案例: <?php $myfile = fopen("log.txt", "a+") or die ...

  2. Python + logging 输出到屏幕,将log日志写入文件

    日志 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地不同的数 ...

  3. Python + logging输出到屏幕,将log日志写入到文件

    logging提供了一组便利的函数,用来做简单的日志.它们是 debug(). info(). warning(). error() 和 critical(). logging函数根据它们用来跟踪的事 ...

  4. Spring Boot从入门到精通(八)日志管理实现和配置信息分析

    Spring Boot对日志的处理,与平时我们处理日志的方式完全一致,它为Java Util Logging.Log4J2和Logback提供了默认配置.对于每种日志都预先配置使用控制台输出和可选的文 ...

  5. .NET Core的日志[4]:将日志写入EventLog

    面向Windows的编程人员应该不会对Event Log感到陌生,以至于很多人提到日志,首先想到的就是EventLog.EventLog不仅仅记录了Windows系统自身针对各种事件的日志,我们的应用 ...

  6. .NET Core的日志[3]:将日志写入Debug窗口

    定义在NuGet包"Microsoft.Extensions.Logging.Debug"中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志 ...

  7. logback日志写入数据库(mysql)配置

    如题  建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1  logback 配置文件(如下) <?xml version="1.0" encoding ...

  8. 将日志写入EventLog

    将日志写入EventLog 面向Windows的编程人员应该不会对Event Log感到陌生,以至于很多人提到日志,首先想到的就是EventLog.EventLog不仅仅记录了Windows系统自身针 ...

  9. 将日志写入Debug窗口

    定义在NuGet包“Microsoft.Extensions.Logging.Debug”中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志消息.如果需要使用D ...

随机推荐

  1. Google 嘘! 嘘!

    https://www.gufen.gq(无广告,原guso.ml,ggso.ga,guge.ga) https://c.aiguso.tk (无广告,体验良好) https://d.freedo.g ...

  2. c#多线程调用有参数的方法

      Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托.   Thread (ThreadStart) 初始 ...

  3. 如何找回SQL Server实例安装时的序列号

    当需要再次安装SQL Server时,如果序列号找不到了,可以试着从已经安装的实例里找回序列号,因为安装完SQL Server后,序列号(Product Key)被保存在注册表里: MSDN订阅下载的 ...

  4. Matlab基础 数组

    一.引用 数组元素引用,下标从1开始 如y(3)表示第3个元素 二.扩充 扩充2*3矩阵为3*3矩阵,并且给a(3,3)赋值为9 三.提取 数组按列存储 全下标变化为单下标: sub2ind((m,n ...

  5. require.js+backbone 使用r.js 在本地与生产环境 一键压缩的实现方式

    require.js+backbone 使用r.js 在本地与生产环境 一键压缩的实现方式 时间:2017-07-03 17:18:11      阅读:210      评论:0      收藏:0 ...

  6. es6面试题--Promise相关

    1. const promise = new Promise((resolve, reject) => { console.log(); resolve(); console.log(); }) ...

  7. Java虚拟机6:垃圾收集(GC)-1(内存溢出和内存泄漏的区别)

    1.前言 在进行垃圾收集之前需要普及几个比较重要的概念. 2.内存溢出和内存泄露的概念和区别: (1):内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间可以分配,系统不 ...

  8. BeanDefinition的创建(BeanDefinitionHolder的创建)

    这个对另一篇章Bean Definition从加载.解析.处理.注册到BeanFactory的过程的扩展. Spring框架中BeanDefinition的继承结构. Spring框架中BeanDef ...

  9. vim 取消高亮

    / 匹配以后会一直有高亮,退出以后还是有: set nohlsearch nohlsearch

  10. 【[SHOI2007]园丁的烦恼】

    \(CDQ\) 分治的神奇操作 这个问题跟偏序问题好像差的不小啊 但是就是可以转化过去 对于一个查询我们可以把它拆成四个,也就是用二维前缀和的方式来查询 我们发现其实前缀和的定义就是多少个点的横纵坐标 ...