errdump.lua 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. --- 模块功能:系统错误日志dump
  2. -- @module log
  3. -- @author 稀饭放姜,wing
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2017.09.26
  7. module(..., package.seeall)
  8. local base = _G
  9. local table = require "table"
  10. local rtos = require "rtos"
  11. local uart = require "uart"
  12. local io = require "io"
  13. local os = require "os"
  14. local string = require "string"
  15. -- 加载常用的全局函数至本地
  16. local unpack = base.unpack
  17. local ipairs = base.ipairs
  18. local type = base.type
  19. local pairs = base.pairs
  20. local assert = base.assert
  21. local tonumber = base.tonumber
  22. --lowPowerFun:用户自定义的“低电关机处理程序”
  23. --lpring:是否已经启动自动关机定时器
  24. local lowPowerFun, lpring
  25. --错误信息文件以及错误信息内容
  26. local LIB_ERR_FILE, libErr, extLibErr = "/lib_err.txt", ""
  27. --- 获取LIB_ERR_FILE文件中的错误信息,给外部模块使用
  28. -- @return string ,LIB_ERR_FILE文件中的错误信息
  29. -- @usage errdump.getExtLibErr()
  30. function getExtLibErr()
  31. return extLibErr or (readTxt(LIB_ERR_FILE) or "")
  32. end
  33. --- 读取文本文件中的全部内容
  34. -- @string f:文件路径
  35. -- @return string ,文本文件中的全部内容,读取失败为空字符串或者nil
  36. -- @usage errdump.readTxt(LIB_ERR_FILE,libErr)
  37. function readTxt(f)
  38. local file, rt = io.open(f, "r")
  39. if not file then log.info("errdump.readTxt", "no open:", f) return "" end
  40. rt = file:read("*a")
  41. file:close()
  42. return rt
  43. end
  44. --- 写文本文件
  45. -- @string f:文件路径
  46. -- @string v:要写入的文本内容
  47. -- @return 无
  48. -- @usage errdump.writeTxt(LIB_ERR_FILE,libErr)
  49. local function writeTxt(f, v)
  50. local file = io.open(f, "w")
  51. if not file then log.info("errdump.writeTxt", "no open:", f) return end
  52. file:write(v)
  53. file:close()
  54. end
  55. --- 打印LIB_ERR_FILE文件中的错误信息
  56. -- @return 无
  57. -- @usage readTxt.initErr()
  58. function initErr()
  59. extLibErr = readTxt(LIB_ERR_FILE) or ""
  60. log.info("errdump.initErr", extLibErr)
  61. --删除LIB_ERR_FILE文件
  62. os.remove(LIB_ERR_FILE)
  63. end
  64. --- 追加错误信息到LIB_ERR_FILE文件中
  65. -- @param s:错误信息,用户自定义,一般是string类型,重启后的trace中会打印出此错误信息
  66. -- @return 无
  67. -- @usage readTxt.appendErr("net working timeout!")
  68. function appendErr(s)
  69. log.info("errdump.appendErr", s)
  70. libErr = libErr .. s
  71. writeTxt(LIB_ERR_FILE, libErr)
  72. end