使用wxLog实现循环保存日志的解决方案(附详细代码)—— 定时执行专家

目录

◆ 方案背景

◆ 实现效果

◆ wxLog实现日志功能详解

◆ 定时执行专家 - 简介&最新版下载链接

◆ 定时执行专家 - 关键字/Keyword


◆ 方案背景

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

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

◆ 实现效果

使用wxLog实现循环保存日志的解决方案(附详细代码)—— 定时执行专家_第1张图片

 (图1-1,定时执行专家 - 日志输出文件及记录格式)

◆ wxLog实现日志功能详解

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

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

    //
    // logging handling - leo 220724
    //
    wxDateTime dtNow = wxDateTime::Now();
    m_nCurrWDay = dtNow.GetWeekDay();
    wxString strFileName = wxString::Format(_T("log_%d.txt"), m_nCurrWDay); // sun:0, mon:1...
    wxString strFullPath = wxGetApp().GetAppPath() + _T("\\") + strFileName;

    wxFileName wfn(strFullPath);
    wxFileOffset nOffSet = 0;
    wxString strMode = _T("at+");
    if(wfn.FileExists())
    {
        wxFFile wxf;
        if(wxf.Open(strFullPath))
        {
            nOffSet = wxf.Length();
            wxf.Close();

            if(nOffSet > N_LOG_FILE_MAX_SIZE)
                strMode = _T("w+");
        }
    }

    //
    if (m_pLogFile == NULL)
    {
        m_pLogFile = fopen(strFullPath, strMode);
        delete wxLog::SetActiveTarget(new wxLogStderr(m_pLogFile));
        wxLog::SetTimestamp(STR_LOG_TIMESTAMP);
    }

    // logging timer
    m_timerLogging.SetOwner(this, ID_TIMER_LOGGING);
    m_timerLogging.Start(N_LOG_TIMER_MILLISECONDS); // 1000*60*5 = 5 minutes

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

// logging handling
void TimingExecuterFrame::Onm_timerLogging(wxTimerEvent& event)
{
    wxLogMessage(wxString::Format(_T("*** On logging handling check timer trigger, every %zd ms ***"), N_LOG_TIMER_MILLISECONDS));

    // 1 - check curr wday whether changed
    // 2 - if changed, open new file and check size whether over 2MB
    // 3 - clear old log and write new log
    wxDateTime::WeekDay nWDay = wxDateTime::Now().GetWeekDay();
    if(nWDay != m_nCurrWDay)
    {
        m_nCurrWDay = nWDay;
        wxString strFileName = wxString::Format(_T("log_%d.txt"), m_nCurrWDay); // sun:0, mon:1...
        wxLogMessage(_T("*** Log file will change to: ") + strFileName + _T(" ***"));

        wxString strFullPath = wxGetApp().GetAppPath() + _T("\\") + strFileName;
        wxFileName wfn(strFullPath);
        wxFileOffset nOffSet = 0;
        wxString strMode = _T("at+");
        if(wfn.FileExists())
        {
            wxFFile wxf;
            if(wxf.Open(strFullPath))
            {
                nOffSet = wxf.Length();
                wxf.Close();

                if(nOffSet > N_LOG_FILE_MAX_SIZE)
                {
                    strMode = _T("w+");
                    wxLogMessage(wxString::Format(_T("### Log file size over: %zd bytes ###"), N_LOG_FILE_MAX_SIZE));
                }
            }
        }

        wxLogMessage(wxString::Format(_T("### %s's size: %zd bytes ###"), strFileName, nOffSet));

        //
        delete wxLog::SetActiveTarget(NULL);
        if(m_pLogFile != NULL)
            fclose(m_pLogFile);

        m_pLogFile = fopen(strFullPath, strMode);
        delete wxLog::SetActiveTarget(new wxLogStderr(m_pLogFile));
        wxLog::SetTimestamp(STR_LOG_TIMESTAMP);

        wxLogMessage(_T(">>> Log file changed to: ") + strFileName + _T(" >>>"));
    }
}

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

    //
    // logging handling - leo 220724
    //
    m_timerLogging.Stop();

    wxLogMessage(_T("<<< TimingExecutor End <<<"));

    delete wxLog::SetActiveTarget(NULL);
    if(m_pLogFile != NULL)
        fclose(m_pLogFile);

◆ 定时执行专家 - 简介&最新版下载链接

 《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件。软件具有 23 种【任务类型】、12 种【触发器】触发方式,并且全面支持界面化【Cron表达式】设置软件采用多线程并发方式检测任务触发和任务执行,能够达到毫秒级的执行精度,可以同时支持50个以上任务的毫秒级触发。

BoomWorks软件的最新版本_boomworks的博客-CSDN博客_boomworks▉《定时执行专家》——毫秒级精度、专业级定时任务执行软件▉ 定时执行专家 - 远程客户端程序 TinyExec.exe v22.07▉《代码统计分析工具》—— 程序员必备工具▉《SuperSearch 超级网搜》—— 让思考从搜索开始_1671465600https://blog.csdn.net/boomworks/article/details/113486307?spm=1001.2014.3001.5502

使用wxLog实现循环保存日志的解决方案(附详细代码)—— 定时执行专家_第2张图片

 

◆ 定时执行专家 - 关键字/Keyword

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

使用wxLog实现循环保存日志的解决方案(附详细代码)—— 定时执行专家_第3张图片

你可能感兴趣的:(定时执行专家,定时执行,定时任务,定时执行工具,定时开关机,自动截屏)