有意思的代码--利用系统信号切换日志模式

看到Kite里面的源码,有段代码挺有意思。

上代码先:

// SetupSignalHandler listens to signals and toggles the log level to DEBUG
// mode when it received a SIGUSR2 signal. Another SIGUSR2 toggles the log
// level back to the old level.
func (k *Kite) SetupSignalHandler() {
    c := make(chan os.Signal, 1)

    signal.Notify(c, syscall.SIGUSR2)
    go func() {
        for s := range c {
            k.Log.Info("Got signal: %s", s)

            if debugMode {
                // toogle back to old settings.
                k.Log.Info("Disabling debug mode")
                if k.SetLogLevel == nil {
                    k.Log.Error("SetLogLevel is not defined")
                    continue
                }

                k.SetLogLevel(getLogLevel())
                debugMode = false
            } else {
                k.Log.Info("Enabling debug mode")
                if k.SetLogLevel == nil {
                    k.Log.Error("SetLogLevel is not defined")
                    continue
                }

                k.SetLogLevel(DEBUG)
                debugMode = true
            }
        }
    }()
}

可以通过给正在运行的程序,切换日志模式。

举一反三,可以利用这个方式,来做很多开关切换。

时间: 2024-10-11 21:06:38

有意思的代码--利用系统信号切换日志模式的相关文章

Cocos2dx-如何利用NDK分析崩溃日志

本文转载于:http://www.cnblogs.com/jhzhu/p/3801640.html 背景介绍 本文主要内容: 利用android的crash log来对c++开发的android应用进行错误定位. 容易稳定复现的BUG, 一般可以通过断点调试来解决. 如果测试人员也无法稳定复现, log就成了程序吊定位问题的救命稻草. 通用操作系统都有自己的日志系统, android也不例外. 救命稻草已经给你了~ ( 怎样查看android的系统日志 ) 但是, android的系统日志在c+

iOS开发利用系统推送Notifaction和轮询实现简单聊天系统

话不多说,先看一下做好的聊天软件界面: 首先在StoryBoard里拖了一个UItableView和一个view用来输入文字或者语音,右边的按钮用来切换文字和语音: 聊天里有三种id: orderID :聊天id messageID :每条消息的ID sessionID :每个订单的会话ID,如果为空通过orderID请求. 然后在viewDidLoad里做一些界面上的操作和一些初始化的操作: 1.设置一下tableview的headView 2.初始化录音.用户头像.获取订单详情 <stron

Android之——利用系统权限实现手机重启

在应用开发时经常会有这样的需求,如何在应用里用代码让手机重启,另外,我们知道在重启之后,我们的应用可以注册广播接收者,以保证我们的应用会第一个将我们的服务开启起来,这样我们的代码就可以第一个接收到接收短信的广播事件.好了,现在就让我们一起来实现一个利用系统权限实现手机重启的示例吧. 一.实现 我们实现很简单,就是给界面一个按钮,然后设置按钮的点击事情,在点击事件里完成手机重启操作. 1.布局文件 布局文件很简单,就是放置了一个Button按钮,设置点击事件. 具体代码如下: <LinearLay

(八十一)利用系统自带App来实现导航

利用系统的地图App进行导航,只需要传入起点和终点.启动参数,调用MKMapItem的类方法openMapWithItems:launchOptions:来实现定位,调用此方法后会打开系统的地图App. 下面我们来看看这个方法: + (BOOL)openMapsWithItems:(NSArray *)mapItems launchOptions:(NSDictionary *)launchOptions; ①第一个参数是一个MapItem数组,每个MapItem中可以包含一个地标,用两个Map

手动切换日志文件和清空日志文件

切换日志文件组 日志文件组是循环使用的,当一组日志文件被写满时,oracle系统自动的切换到下一组日志文件.在需要的时候,数据库管理员也可以手动的切换到其他的日志文件组.切换日志文件组需要使用如下的语句: alter system switch logfile; 清空日志文件组 如果日志文件组中的日志文件受损,将导致数据库无法将受损的日志文件进行归档,这会最终导致数据库停止运行.此时,在不关闭数据库的情况下,可以选择清空日志文件组中的内容. 清空日志文件组的语法如下: alter databas

自动化代码发布系统实现

日常运维问题 在我日常运维工作中,代码发布可能是最普遍的一项工作之一,尤其是网页代码的更新,碎片化发布需求非常频繁.在前期开发人员比较少时,还可以由自己来上服务器通过脚本来发布代码.但随着公司项目的增多,更多的开发人员加入到公司,发布代码需求开始增多,这就占用了我大部分时间,经常的被打断其它工作来发布代码,非常地不爽,然后开始想解决方法. 尝试解决问题 当然,发布代码肯定是运维的职责之一了,但频繁的发布导致运维大部分时间浪费在重复的操作上,非常的不值得.基于此,开始限制代码发布频率,要求把不是很

详细分析contrex-A9的汇编代码__switch_to(进程切换)

//函数原型:版本linux-3.0.8 struct task_struct *__switch_to(structtask_struct *, struct thread_info *, struct thread_info *); #define switch_to(prev,next,last)                                       \ do {                                                     

利用linux信号机制调试段错误(Segment fault)

在实际开发过程中,大家可能会遇到段错误的问题,虽然是个老问题,但是其带来的隐患是极大的,只要出现一次,程序立即崩溃中止.如果程序运行在PC中,segment fault的调试相对比较方便,因为可以通过串口.显示器可以查看消息,只要程序运行,通过GDB调试工具即可捕捉产生segment fault的具体原因.但是不知大家有没有想法,当程序运行在嵌入式设备上时,你所面临资源的缺乏,你没有串口打印信息,没有显示器可查看,你不知道程序运行的状态,如果程序的产生segment falut这种bug发生的周

MFC 利用checkbox 做成切换开关按钮

我们在做MFC程序时候经常会一个切换式的按钮,之前我的做法是利用buttion类的一个SetState()函数,但是返现效果不佳.而且容易出现点1按钮,焦点跑到另外一个按钮上去了  .后来看到别人一个程序.我发现他的切换效果做的很好 ,经过看代码发现,他用的控件根本不是buttion控件而是check box 控件.我就很奇怪,如何将check box变成了一个按钮的,经查看代码发现,原来是他将控件的属性------push lisk  (我的翻译是按下去像  纯字面理解)设置成true  如图