• 《定时执行专家》日志的解决方案 —— 关于wxLog的使用,附详细代码


    不少用户提到《定时执行专家》没有任务执行的日志,最近有些时间增加了日志输出的功能。大致的需求如下:

    • 记录任务的执行情况,可以确认是否任务已经执行
    • 循环保存日志,最好能保存最近几天的日志
    • 记录软件的启动和退出
    • 输出软件的重要功能的日志

     (图1-1,定时执行专家 - 日志输出文件)

    wxWidgets类库里面实现日志输入需要使用wxLog相关的日志处理Class。这里大致整理一下本次实现的思路。

    首先,在主窗口的构造函数里,初始化wxLog。

    1. //
    2. // logging handling - leo 220724
    3. //
    4. wxDateTime dtNow = wxDateTime::Now();
    5. m_nCurrWDay = dtNow.GetWeekDay();
    6. wxString strFileName = wxString::Format(_T("log_%d.txt"), m_nCurrWDay); // sun:0, mon:1...
    7. wxString strFullPath = wxGetApp().GetAppPath() + _T("\\") + strFileName;
    8. wxFileName wfn(strFullPath);
    9. wxFileOffset nOffSet = 0;
    10. wxString strMode = _T("at+");
    11. if(wfn.FileExists())
    12. {
    13. wxFFile wxf;
    14. if(wxf.Open(strFullPath))
    15. {
    16. nOffSet = wxf.Length();
    17. wxf.Close();
    18. if(nOffSet > N_LOG_FILE_MAX_SIZE)
    19. strMode = _T("w+");
    20. }
    21. }
    22. //
    23. if (m_pLogFile == NULL)
    24. {
    25. m_pLogFile = fopen(strFullPath, strMode);
    26. delete wxLog::SetActiveTarget(new wxLogStderr(m_pLogFile));
    27. wxLog::SetTimestamp(STR_LOG_TIMESTAMP);
    28. }
    29. // logging timer
    30. m_timerLogging.SetOwner(this, ID_TIMER_LOGGING);
    31. m_timerLogging.Start(N_LOG_TIMER_MILLISECONDS); // 1000*60*5 = 5 minutes

    其次,在主窗口类里面添加 wxTimer 成员变量,实现 wxTimer 的触发函数。

    1. // logging handling
    2. void TimingExecuterFrame::Onm_timerLogging(wxTimerEvent& event)
    3. {
    4. wxLogMessage(wxString::Format(_T("*** On logging handling check timer trigger, every %zd ms ***"), N_LOG_TIMER_MILLISECONDS));
    5. // 1 - check curr wday whether changed
    6. // 2 - if changed, open new file and check size whether over 2MB
    7. // 3 - clear old log and write new log
    8. wxDateTime::WeekDay nWDay = wxDateTime::Now().GetWeekDay();
    9. if(nWDay != m_nCurrWDay)
    10. {
    11. m_nCurrWDay = nWDay;
    12. wxString strFileName = wxString::Format(_T("log_%d.txt"), m_nCurrWDay); // sun:0, mon:1...
    13. wxLogMessage(_T("*** Log file will change to: ") + strFileName + _T(" ***"));
    14. wxString strFullPath = wxGetApp().GetAppPath() + _T("\\") + strFileName;
    15. wxFileName wfn(strFullPath);
    16. wxFileOffset nOffSet = 0;
    17. wxString strMode = _T("at+");
    18. if(wfn.FileExists())
    19. {
    20. wxFFile wxf;
    21. if(wxf.Open(strFullPath))
    22. {
    23. nOffSet = wxf.Length();
    24. wxf.Close();
    25. if(nOffSet > N_LOG_FILE_MAX_SIZE)
    26. {
    27. strMode = _T("w+");
    28. wxLogMessage(wxString::Format(_T("### Log file size over: %zd bytes ###"), N_LOG_FILE_MAX_SIZE));
    29. }
    30. }
    31. }
    32. wxLogMessage(wxString::Format(_T("### %s's size: %zd bytes ###"), strFileName, nOffSet));
    33. //
    34. delete wxLog::SetActiveTarget(NULL);
    35. if(m_pLogFile != NULL)
    36. fclose(m_pLogFile);
    37. m_pLogFile = fopen(strFullPath, strMode);
    38. delete wxLog::SetActiveTarget(new wxLogStderr(m_pLogFile));
    39. wxLog::SetTimestamp(STR_LOG_TIMESTAMP);
    40. wxLogMessage(_T(">>> Log file changed to: ") + strFileName + _T(" >>>"));
    41. }
    42. }

    最后,在主窗口析构函数里,关闭wxLog的输出。

    1. //
    2. // logging handling - leo 220724
    3. //
    4. m_timerLogging.Stop();
    5. wxLogMessage(_T("<<< TimingExecutor End <<<"));
    6. delete wxLog::SetActiveTarget(NULL);
    7. if(m_pLogFile != NULL)
    8. fclose(m_pLogFile);

     【关键字/Keyword】

    PC定时执行专家,定时执行专家,自动定时任务执行,自动定时执行任务,自动执行任务,定时执行任务,定时任务执行工具,定时任务执行,任务定时执行,定时任务系统,定时任务管理,计划任务管理,任务计划程序,定时关机,自动关机,自动关机软件,关机软件,定时任务,定时任务软件,任务管理,自动截屏,自动屏幕截图,屏幕截图,无察觉截屏,隐身执行,毫秒级精度,毫秒级定时执行,毫秒级执行,秒级定时执行,秒级执行,定时任务每秒执行,定时任务每分钟执行,定时任务每小时执行,定时任务每天执行,定时任务每周执行,定时任务每月执行,定时任务每年执行,Cron定时执行,定时任务重复执行,超级网搜,超级网际搜索,全网搜索,代码统计分析工具,boomworks,boomwxsoft

  • 相关阅读:
    12个yyds的低代码开源项目,一天开发一个系统!
    LeetCode刷题(python版)——Topic51N 皇后
    将项目部署至云服务器的详细过程 以community项目为例
    RT-DETR优化改进:IoU系列篇 | Inner-IoU融合MPDIoU,创新十足,2023年11月最新IoU改进
    【转载】 Bytedance火山引擎智能拥塞控制算法 VICC
    尚硅谷-Spring Cloud
    PYTHON蓝桥杯——每日一练(简单题)
    LUCI笔记
    算法——动态规划
    Talk预告 | 腾讯微信司马驰骏:OSDI论文分享-Ekko:大规模推荐系统模型低延时更新
  • 原文地址:https://blog.csdn.net/boomworks/article/details/126090951