PHP Log时时查看小工具

本文介绍了一个使用PHP和ZeroMQ实现的实时日志系统。该系统通过PHP的Publish-subscribe模式将日志发送到客户端小工具,实现了日志的实时查看。

以前Log都是打印在一个文档中,然后打开文件夹,最后打开文档查看里面的内容,每次打开文件夹感觉很烦。

前些日子看到同事开发.NET的时候,用他自己的一个小工具能够时时查看到Log的内容,非常方便,所以就想移植到PHP开发中。

 

一、查看效果

1、打开客户端小工具mylog.exe,在地址中输入localhost,端口输入5555,点击开始链接,旁边屏幕会显示“开始监听”的字样。

 

2、打开log.php页面,页面很朴素,就打印了一串字符。

 

3、查看mylog.exe,里面已接收到hello字符串

 

二、PHP代码

1)先要下载一个PHP版本的zmq.dll文件

  1、打开链接http://pecl.php.net/package/zmq,点击某个版本的DLL。

  

  2、然后在php.ini中设置

  

  3、log.php中的代码,注意:这里使用的是Publish-subscribe模式,由PHP来Publish,client小工具做subscribe,下图是两者之间的关系。

<?php
    $context = new ZMQContext ();
    $publisher = $context->getSocket (ZMQ::SOCKET_PUB);
    $publisher->bind ("tcp://*:5555");
    sleep(1); 
    $publisher->send ('hello');
    echo '已发送hello';
?>

   

 

三、Client代码

  1、总共放了两个文件,client中是可以直接运行的exe文件,mylog中是.NET源码,用VS2010编辑的。打开client文件,只要点击mylog.exe就能打开小工具。

    

  2、clrzmq.dll是.NET中zmq的辅助dll文件,需要引入到源码中

  3、在client中做zmq的sub操作,接收并将数据打印出来。

     void LogReceiver()
        {
            using (ZmqContext ctx = ZmqContext.Create())
            {
                using (ZmqSocket sub = ctx.CreateSocket(SocketType.SUB))
                {
                    sub.Connect("tcp://" + address.Text + ":" + port.Text);
                    sub.SubscribeAll();
                    sub.ReceiveReady += (s, e) =>
                    {
                        string log = sub.Receive(Encoding.UTF8);
                        HandleLog(log);
                    };
                    var poller = new Poller(new List<ZmqSocket> { sub });
                    while (_recvgo)
                    {
                        try
                        {
                            poller.Poll();
                        }
                        catch (Exception ex)
                        {

                        }
                    }

                }
            }
        }

 

在集成到实际项目中还会出现很多问题,我这里只是做个简单的demo展示一下。

 

demo下载:

http://download.youkuaiyun.com/detail/loneleaf1/7981505

 

参考资料:

http://zeromq.org/ zmq主页

http://pecl.php.net/package/zmq php dll下载

http://news.cnblogs.com/n/154000/ ZMQ的学习和研究

https://github.com/zeromq/clrzmq  clrzmq — Official 0MQ Bindings for .NET and Mono

转载于:https://www.cnblogs.com/strick/p/3987694.html

mylog 是一个多线程安全、高效、易用性很强的 C/C 库 .只需要一个初始化日志目录以及文件名,你就可以像使用 printf 一样的去打印日志。通过日志可以定位(多线程)请求 ip, logid,执行时间等。 1 说明 1) 本文件夹包含源码src以及示例文件sample 2) 编译src生成output(包括iånclude和lib) 3) 使用output的lib和include,具体可以查看sample的Makefile和code 4) 日志级别为FATAL, WARNING, NOTICE, TRACE, DEBUG,以此级别变低 5) 使用MY_LOG_FATAL等打印日志,和printf使用方式类似,非常简单。 2 使用API(查看mylog.h) 1) 初始化日志目录 my_log_init(const char* log_path, const char* normal_path, const char* warn_fatal_path, const int log_level) log_path : log路径 normal_path : 正常日志目录 warn_fatal_path : 异常日志目录 log_level : 日志级别 2) 初始化线程日志数据 my_log_thread_init() 多线程使用 3) 设置一个线程的logid my_log_set_logid(logid) 必须在my_log_thread_init() 之后使用。 4) 设置一个线程的reqip  my_log_set_reqip(reqip) 必须在my_log_thread_init() 之后使用. 5) 设置一个线程的reqip my_log_set_mod(mod) 设置一个线程的reqip, 必须在单线程中使用或者my_log_thread_init() 之后使用. 6)设置计算执行时间的类型(打印时间是ms还是us) my_log_set_time_type(time_type) 必须在单线程中使用或者my_log_thread_init() 之后使用. 7) 打印FATAL日志 MY_LOG_FATAL(logfmt, arg...) 日记级别 >=1会打印 FATAL日志。 8)打印WARNNING日志 MY_LOG_WARNING(logfmt, arg...) 日记级别 >=2会打印 WARNING日志。 9) 打印NOTICE日志 MY_LOG_NOTICE(logfmt, arg...) 日记级别 >=4会打印 NOTICE日志。 10)打印TRACE日志 MY_LOG_TRACE(logfmt, arg...) 日记级别 >=8会打印TRACE日志。 11) 打印DEBUG日志 MY_LOG_DEBUG(logfmt, arg...) 标签:mylog 分享 window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "2", "bdMiniList": [], "bdPic": "", "bdStyle": "1", "bdSize": "24" }, "share": {} }; with (document)0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' ~(-new Date() / 36e5)];\r\n \r\n \r\n \r\n \r\n \u8f6f\u4ef6\u9996\u9875\r\n \u8f6f\u4ef6\u4e0b\u8f7d\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\nwindow.changyan.api.config({\r\nappid: 'cysXjLKDf', conf: 'prod_33c27aefa42004c9b2c12a759c851039' });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值