zoukankan      html  css  js  c++  java
  • golang程序因未知错误崩溃时如何记录异常

    开发服务器程序时如果未经过充分测试, 服务稳定运行一段时间后会突然崩溃退出。一般是因为程序中出现了某个未捕获的异常。
    这类问题属于偶现的,且需要服务器运行一段时间之后才会出现,难以定位有问题的代码段。

    这中情况下应该将服务进程的stderr重定向至某个文件,这样当进程因未捕获的异常导致崩溃时,go运行时会将异常发生时各个协程的调用栈信息记录下来,便于定位问题。

    logFile, err := os.OpenFile("./log/fatal.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0660)
    if err != nil {
        log.Println("服务启动出错",  "打开异常日志文件失败" , err)
        return
    }
    // 将进程标准出错重定向至文件,进程崩溃时运行时将向该文件记录协程调用栈信息
    syscall.Dup2(int(logFile.Fd()), int(os.Stderr.Fd())) 
    

    以上代码利用了linux系统中的dup系统调用,用以将某一文件描述符指向一个新的文件。在windows系统及mac系统下暂时不可用。

  • 相关阅读:
    junit单元测试
    方法引用
    方法引用表达式(1)
    Stream流的常用方法
    Stream流
    综合案例:文件上传
    tcp通信协议
    python 生成器与迭代器
    Python 序列化与反序列化
    python 文件操作
  • 原文地址:https://www.cnblogs.com/coloc/p/6804851.html
Copyright © 2011-2022 走看看