精华内容
下载资源
问答
  • 一天的工作日志怎么写
    万次阅读
    2018-11-06 09:09:42

    导读:

    程序员开发时间越久,跟文档打交道的时间越长,需要记忆的东西就越多。每到写周总结的时候,已经忘记本周做了哪些工作,为了防止这种情况,强烈建议养成日志习惯!工作日志的内容不限,可参考下面的模板

    • 计划 当天的工作计划 ,具体到可以完成的一个很小的任务
    • 学习 工作中接触的新内容,需要学习的地方,记录下来,及时充电
    • 工作 实际完成的工作内容,周报主要参照内容
    • 其他 包括会议,考勤,搬位置等其他特殊情况的记录

    计划

    • XXX周例会(上午9:30-10:30)

    • 统筹昨天完成情况和今天的计划工作(10:30-11:00)

    • 具体工作A(11:00-12:00)

    • 具体工作B(13:00-15:00)

    • 具体工作C(15:00-18:00) 

     

    学习

    • 学习spring cloud框架第一章

    • mysql性能优化之——索引优化

    • hadoop深入学习第二章

    工作 

    • 完成工作A

    • 完成工作B

    • 工作C未完成(由于开会)

    其他

    • 周例会,主题:讨论sass供应链系统原型UI会议15:00-17:00

    通过以上几步,相信一天的主要工作了然于心,写周报的效率也提高了很多。希望大家能够坚持下去!

    更多相关内容
  • 入职第一天 工作日志

    千次阅读 2019-10-03 12:20:16
    为什么每个hander的return都是个result对象,页面之间是怎么跳转的? 前端代码大多都是js,好多都是找不到自己想要的东西,前端的跳转也不知道怎么回事,还需努力!   转载于:...

    上午安装了相关的软件,注册了Git等工具,感觉没做什么事情;

    下午跑了一下公司的项目,项目太大了电脑有点都带不动;

    安装的项目所需的redis,项目跑不通,原因是没有设置redis的用户名

    config set requierpass pay-boy;

     

     

    后端项目的代码也有点不懂:

    @RequestMapping(value = "/smsLogin",method = RequestMethod.POST)
    @ApiOperation(value = "短信登录接口")
    public Result<Object> smsLogin(@RequestParam String mobile,
    @RequestParam String code,
    @RequestParam(required = false) Boolean saveLogin){

    // 验证短信验证码
    String v = redisTemplate.opsForValue().get(CommonConstant.PRE_SMS + mobile);
    if(StrUtil.isBlank(v)){
    return new ResultUtil<Object>().setErrorMsg("验证码失效或KEY不正确");
    }
    if(!code.equals(v)){
    return new ResultUtil<Object>().setErrorMsg("验证码不正确");
    }
    User u = userService.findByMobile(mobile);
    if(u==null){
    return new ResultUtil<Object>().setErrorMsg("手机号不存在");
    }
    String accessToken = securityUtil.getToken(u.getUsername(), saveLogin);
    // 已验证 清除key
    deleteKey(mobile);
    return new ResultUtil<Object>().setData(accessToken);
    }

    @SystemLog(description = "短信登录", type = LogType.LOGIN)
    public void deleteKey(String mobile){
    // 分离出以便记录登录成功日志
    redisTemplate.delete(CommonConstant.PRE_SMS + mobile);
    }

    @RequestMapping(value = "/resetByMobile",method = RequestMethod.POST)
    @ApiOperation(value = "通过短信重置密码")
    public Result<Object> resetByMobile(@RequestParam String mobile,
    @RequestParam String code,
    @RequestParam String password,
    @RequestParam String passStrength){

    // 验证短信验证码
    String v = redisTemplate.opsForValue().get(CommonConstant.PRE_SMS + mobile);
    if(StrUtil.isBlank(v)){
    return new ResultUtil<Object>().setErrorMsg("验证码失效或KEY不正确");
    }
    if(!code.equals(v)){
    return new ResultUtil<Object>().setErrorMsg("验证码不正确");
    }
    User u = userService.findByMobile(mobile);
    String encryptPass= new BCryptPasswordEncoder().encode(password);
    u.setPassword(encryptPass);
    u.setPassStrength(passStrength);
    userService.update(u);
    // 删除缓存
    redisTemplate.delete("user::"+u.getUsername());
    // 已验证清除key
    redisTemplate.delete(CommonConstant.PRE_SMS + mobile);
    return new ResultUtil<Object>().setSuccessMsg("重置密码成功");
    }

    为什么每个hander的return都是一个result对象,页面之间是怎么跳转的?
    前端代码大多都是js,好多都是找不到自己想要的东西,前端的跳转也不知道怎么回事,还需努力!

     

    转载于:https://www.cnblogs.com/lik99999/p/11454124.html

    展开全文
  • 工作日志怎么

    万次阅读 2018-02-28 13:28:10
    工作日志简介  工作日志顾名思义就是针对自己的工作,每天记录工作的内容,所花费的时间以及在工作过程中遇到的问题,解决问题的思路和方法。最好可以详细客观的记录下你所面对的选择,观点,观察,方法,结果和...

    工作日志简介

      工作日志顾名思义就是针对自己的工作,每天记录工作的内容,所花费的时间以及在工作过程中遇到的问题,解决问题的思路和方法。最好可以详细客观的记录下你所面对的选择,观点,观察,方法,结果和决定,这样每天日事日清,经过长期的积累,才能达到通过工作日志提高自己的工作技能。
      随着移动互联网时代的到来,QQ,微博,微信等新应用层出不穷,人们对于时间资源的需求也越来越大,而另一方面,时间的碎片化往往让很多工作者结束一天工作的时候,却想不起来今天到底做了哪些工作。工作日志在帮助人们抵抗时间碎片化方面能够起到一定的作用。

    写过日志,但写过工作日志,可是这次培训实习要求每人每天写一篇工作日志,且发布到博客上,不知道工作日志该怎么写,也偷偷看过其他同学交的日志,有的看起来跟小学生的流水账日志一样,感觉不太靠谱啊,然后上网搜了一下范文,模板之类的,感觉程序员的工作日志至少包括一下几个方面吧!

    1、学习总结
    内容:在自学或别人指导的过程中,收获的知识或技术的总结。
    目的:总结的过程是对知识的回顾和梳理,让你理解更深刻。

    2、工作总结
    内容:每日任务的进度,项目的进度。
    目的:了解每天任务的完成情况,把握整个项目的进度,有利于计划的调整。

    3、问题总结
    内容:在学习或工作的过程中遇到的难题及解决办法。
    目的:相同的错误不能总出现,出现相同的问题,要能快速找到解决办法。

    4、明日计划
    内容:计划下明天的任务。
    目的:有计划,才能更有效率地完成任务。


    工作日志模板

    日期每日工作记录完成情况今日工作计划计划完成情况
    周一
    周二
    周三
    周四
    周五

    工作日志是记录任务来源及任务输出的工程,因此,对于员工来讲,工作日志的提醒作用就体现的非常明显。员工在实际操作过程中,可能会同时进行多项工作,在从事实际操作过程中,可能会注意小的现象而忽略重要的事情,所以及时的查看工作日志,并进行标注,对企业的每一位员工都有重要的作用。

    工作日志怎么写

    工作日志的目的是帮助撰写者反省总结一天的工作,不断改善提高自己。所以一篇好的工作日志,可以从时间、内容和感想三个维度来考量。

    时间维度

    能够如实的记录自己的时间消费记录。将自己在某些事情上的花费的时间记录统计出来,从而判断自己工作效率究竟如何。

    内容维度

    每天的工作有一些事情是自己原来安排好的,有的是临时发生的,有的任务是短期独立存在的,有的任务是长期并且和其他任务相关的,有的事情自己一个人可以搞定,有的任务可能需要自己的同事、朋友、客户等多方参与。在处理这些事情的过程中,工作日志需要详实的记录任务的进展,能够根据当前的发展情况,列出下一步行动清单。

    感想维度

    人是理性和感性的混合体。工作中肯定会有失败的苦闷和成功的喜悦,这些感性的认知丰富着我们人生的阅历。通过工作日志抒发记录自己工作中的喜怒哀乐,能够缓解自己的工作压力,保持对工作的积极态度。

    工作日志格式

    时间工作项目及工作内容概述
    9:00—10:00
    10:00–11:00

    不同的员工从事的业务是不同的,其工作内容就会有本质上的不同。因此企业员工的效率及工作的及时性就非常难进行控制,因此企业的最高管理者就应该把工作日志看成是追踪的重要手段。

    个人工作日报模板

    工作日报时间
    工作内容
    存在的问题
    解决方法


    工作日报模板


    工作A时间
    结果
    背景
    过程
    总结
    展开全文
  • 赶上1024有征文活动,就写一篇吧,在实习的这段时间,我更加认识到日志的重要性,客户端值没传过来?看日志,服务崩溃了?看日志,没错,日志是出现异常第个想到的东西,它记录了程序运行过程中所调用的函数,所...


    一. 前言

    哈喽,自从实习以来很久没有更文了,一是没有时间,二是实习了之后突然发现自己能写的东西也没有多少了。赶上1024有征文活动,就写一篇吧,在实习的这段时间,我更加认识到日志的重要性,客户端值没传过来?看日志,服务崩溃了?看日志,没错,日志是出现异常第一个想到的东西,它记录了程序运行过程中所调用的函数,所接受到的值,所执行的行为等等。大家也都看到这篇的标题了,我这个人有一个缺点,就是不太喜欢用别人的东西,如果有能力,我希望自己造,所以今天我们自己来动手撸一个日志库,文章重点讲实现过程,如果需要源码,可以前往github获取FdogLog,一个轻量级C++日志库,用于日志服务。

    跪求三连!


    二. 基本功能

    我们先来捋一捋这个日志库应该实现那些功能。

    1. 日志最最最基本的功能是什么,当然是打印或记录日志。
    2. 信息应该包括哪些信息,时间?运行用户?所在文件?想要显示的信息?(自定义显示信息下篇实现)
    3. 信息虽然显示丰富,但是要尽可能让代码自己获取其他信息,调用者只需要设置最主要的信息。
    4. 信息有重要等级之分,所以我们需要对信息做必要分类,提高效率。
    5. 如何实现全局尽可能简洁的调用。
    6. 如果日志库是运行在多线程环境,如何保证线程安全。(下篇实现)

    这些就是一个日志库所具备的最基本的功能,接下来继续思考,还需要什么。

    1. 怎么控制日志的行为。
    2. 如果保存在文件,如何定义文件名。
    3. 随着日志增加,文件会越来越大,如何解决。(下篇实现)

    简单规划完一个不那么完美的日志库所具备的能力,现在我们来对这几条做更详细的规划。

    1. 日志最最最基本的功能是什么,当然是打印或记录日志。
    2. 信息应该包括哪些信息,时间?运行用户?所在文件?想要显示的信息?

    当我在调用一个名为function的函数时。

    function();
    

    你希望它输出怎么样的信息。

    我被调用
    [2021-10-20 23:27:23] 我被调用
    [2021-10-20 23:27:23] INFO 我被调用
    [2021-10-20 23:27:23] INFO root 我被调用
    [2021-10-20 23:27:23] INFO root 17938 我被调用
    [2021-10-20 23:27:23] INFO root 17938 [/media/rcl/FdogIM/service.h function:8] 我被调用

    我想大部分人都会选择最后一种输出信息吧(虽然在这之前,我们都大量使用cout输出第一种),所以我们的日志应该包括时间,日志等级,运行用户,进程ID,调用函数所在文件,以及调用时所在行数。当然总会有人不想全部输出,这将在后面给出方案。

    1. 信息虽然显示丰富,但是要尽可能让代码自己获取其他信息,调用者只需要设置最主要的信息。

    2. 信息有重要等级之分,所以我们需要对信息做必要分类,提高效率。

    3. 如何实现全局尽可能简洁的调用.

    信息有重要等级之分,要可以对信息做区分,按照常见的等级之分,有:

    ERROR: 此信息输出后,主体系统核心模块不能正常工作,需要修复才能正常工作。
    WARN:   此信息输出后,系统一般模块存在问题,不影响系统运行。
    INFO:     此信息输出后,主要是记录系统运行状态等关联信息。
    DEBUG: 最细粒度的输出,除去上面各种情况后,你希望输出的相关信息,都可以在这里输出。
    TRACE:  最细粒度的输出,除去上面各种情况后,你希望输出的相关信息,都可以在这里输出。

    有了等级之分,如何实现全局尽可能简洁的调用,通俗的说就是去掉一切不必要的调用,只留下最主要的调用。

    例如:

    #include<iostream>
    #include"fdoglogger.h"  //添加日志库头文件
    
    using namespace fdog;   //日志库的命名空间
    
    int main(){
        FdogError("错误");
        FdogWarn("警告");
        FdogInfo("信息");
        FdogDebug("调试");
        FdogTrace("追踪");
        return 0;
    }
    

    你不必初始化什么信息,调用什么多余的初始化函数,只需要用这五个类似函数的东西来输出即可,同样,如果是另一个源文件,依旧是这样的调用方式(这里可以使用单一模式来实现,其意图是保证一个类仅有一个实列,并提供一个访问它的全局访问点,该实例被所有程序模块共享。就比如日志的输出。)。

    1. 如果日志库是运行在多线程环境,如何保证线程安全。

    到目前,一个基本的日志库的调用基本成形,如果在单线程,它可以很好的工作,但是到了多线程环境下,就不能保证了,第一点就是单例模式的创建,当两个线程同时去初始化时,无法保证单一实例被成功创建,第二,日志既然是输出到文件,不同线程写入文件时,如何保证写入数据不会错乱。既然写的是C++的日志输出,必然用到了cout ,cout 不是原子性的操作,所以在多线程下是不安全的,这些都是我们需要考虑到的。

    1. 怎么控制日志的行为。

    这里使用配置文件进行日志的行为规定,包括打印什么日志,输入到文件,还是终端,输出的等级,以及日志开关,等等,配置文件将在程序启动时被读取。(提醒各位千万不要写死代码,后患无穷!!!)

    1. 如果保存在文件,如何定义文件名。

    2. 随着日志增加,文件会越来越大,如何解决。

    日志的文件名由配置文件指定,但是创建时会在后面加上创建日期后缀,并且可以在配置文件中配置每隔多少天创建一个新的日志文件,如果配置中心有设置日志文件大小,则会优先大小判断,超过便创建一个新文件。


    三. 代码实现

    1. fdoglogger.h
    #ifndef FDOGLOGGER_H
    #define FDOGLOGGER_H
    #include<iostream>
    #include<fstream>
    #include<map>
    #include<mutex>
    #ifndef linux
    #include<unistd.h>
    #include<sys/syscall.h>
    #include<sys/stat.h>
    #include<sys/types.h>
    #include <pwd.h>
    #endif
    #ifndef WIN32
    //TODO
    #endif
    using namespace std;
    
    namespace fdog {
    
    #define RED   "\e[1;31m"
    #define BLUE  "\e[1;34m"
    #define GREEN "\e[1;32m"
    #define WHITE "\e[1;37m"
    #define DEFA  "\e[0m"
    
    enum class coutType: int {Error, Warn, Info, Debug, Trace};
    enum class fileType: int {Error, Warn, Info, Debug, Trace};
    enum class terminalType: int {Error, Warn, Info, Debug, Trace};
    
    struct Logger {
        string logSwitch;           //日志开关
        string logFileSwitch;       //是否写入文件
        string logTerminalSwitch;   //是否打印到终端
        string logName;             //日志文件名字
        string logFilePath;         //日志文件保存路径
        string logMixSize;          //日志文件最大大小
        string logBehavior;         //日志文件达到最大大小行为
        string logOverlay;          //日志文件覆盖时间
        string logOutputLevelFile;  //日志输出等级(file)
        string logOutputLevelTerminal;//日志输出等级
    };
    
    class FdogLogger {
    public:
        void initLogConfig();
    
        void releaseConfig();
    
        static FdogLogger* getInstance();
    
        string getCoutType(coutType coutType);
    
        bool getFileType(fileType fileCoutBool);
    
        bool getTerminalType(terminalType terminalCoutTyle);
    
        string getLogCoutTime();
    
        string getLogNameTime();
    
        string getFilePash();
    
        string getLogCoutProcessId();
    
        string getLogCoutThreadId();
    
        string getLogCoutUserName();
    
        bool createFile(string filePash);
    
        bool logFileWrite(string messages);
    
        bool bindFileCoutMap(string value1, fileType value2);
    
        bool bindTerminalCoutMap(string value1, terminalType value2);
    
    private:
        char szbuf[128];
        Logger logger;
        static FdogLogger * singleObject;
        static mutex * mutex_new;
        map<coutType, string> coutTypeMap;
        map<fileType, bool> fileCoutMap;
        map<terminalType, bool> terminalCoutMap;
    
    private:
        FdogLogger();
        ~FdogLogger();
    };
    
    #define Error1 __FDOGNAME__(Error)
    #define Warn1 __FDOGNAME__(Warn)
    #define Info1 __FDOGNAME__(Info)
    #define Debug1 __FDOGNAME__(Debug)
    #define Trace1 __FDOGNAME__(Trace)
    
    
    #define SQUARE_BRACKETS_LEFT " ["
    #define SQUARE_BRACKETS_RIGHT "] "
    #define SPACE " "
    #define LINE_FEED "\n"
    #define COLON ":"
    #define SLASH "/"
    
    #define __FDOGTIME__  FdogLogger::getInstance()->getLogCoutTime()          //时间宏
    #define __FDOGPID__   FdogLogger::getInstance()->getLogCoutProcessId()     //进程宏
    #define __FDOGTID__   FdogLogger::getInstance()->getLogCoutThreadId()      //线程宏
    #define __FDOGFILE__  __FILE__        //文件名宏
    #define __FDOGPASH__  FdogLogger::getInstance()->getFilePash() + __FDOGFILE__ //文件路径
    #define __FDOGFUNC__   __func__        //函数名宏
    #define __FDOGLINE__  __LINE__        //行数宏
    #define __USERNAME__  FdogLogger::getInstance()->getLogCoutUserName()     //获取调用用户名字
    #define __FDOGNAME__(name) #name        //名字宏
    
    
    #define COMBINATION_INFO_FILE(coutTypeInfo, message) \
        do{\
            string messagesAll = __FDOGTIME__ + coutTypeInfo + __USERNAME__ + __FDOGTID__ + SQUARE_BRACKETS_LEFT + \
            __FDOGPASH__  + SPACE +__FDOGFUNC__ + COLON + to_string(__FDOGLINE__) + SQUARE_BRACKETS_RIGHT + message + LINE_FEED;\
            FdogLogger::getInstance()->logFileWrite(messagesAll); \
        }while(0);
    
    #define COMBINATION_INFO_TERMINAL(coutTypeInfo, message) \
        do{\
            string messagesAll = __FDOGTIME__ + WHITE + coutTypeInfo + DEFA + __USERNAME__ + __FDOGTID__ + SQUARE_BRACKETS_LEFT + \
            __FDOGPASH__  + SPACE +__FDOGFUNC__ + COLON + to_string(__FDOGLINE__) + SQUARE_BRACKETS_RIGHT + message + LINE_FEED;\
            cout << messagesAll;\
        }while(0);
    
    #define LoggerCout(coutTyle, coutTypeInfo, fileCoutBool, terminalCoutBool, message) \
        do {\
            string coutType = FdogLogger::getInstance()->getCoutType(coutTyle);\
            if (FdogLogger::getInstance()->getFileType(fileCoutBool)) {\
                COMBINATION_INFO_FILE(coutTypeInfo, message)\
            }\
            if (FdogLogger::getInstance()->getTerminalType(terminalCoutBool)) {\
                COMBINATION_INFO_TERMINAL(coutTypeInfo, message)\
            }\
        }while(0);
    
    #define FdogError(message) \
        do{\
            LoggerCout(fdog::coutType::Error, Error1, fdog::fileType::Error, fdog::terminalType::Error, message)\
        }while(0);
    
    #define FdogWarn(message)  \
        do{\
            LoggerCout(fdog::coutType::Warn, Warn1, fdog::fileType::Warn, fdog::terminalType::Warn, message)\
        }while(0);
    
    #define FdogInfo(message)  \
        do{\
            LoggerCout(fdog::coutType::Info, Info1, fdog::fileType::Info, fdog::terminalType::Info, message)\
        }while(0);
    
    #define FdogDebug(message) \
        do{\
            LoggerCout(fdog::coutType::Debug, Debug1, fdog::fileType::Debug, fdog::terminalType::Debug, message)\
        }while(0);
    
    #define FdogTrace(message) \
        do{\
            LoggerCout(fdog::coutType::Trace, Trace1, fdog::fileType::Trace, fdog::terminalType::Trace, message)\
        }while(0);
    
    }
    
    #endif
    
    
    2. fdoglogger.cpp
    #include"fdoglogger.h"
    
    using namespace fdog;
    
    
    FdogLogger * FdogLogger::singleObject = nullptr;
    mutex * FdogLogger::mutex_new = new(mutex);
    
    FdogLogger::FdogLogger(){
        initLogConfig();
    }
    FdogLogger::~FdogLogger(){
    
    }
    
    FdogLogger* FdogLogger::getInstance(){
        mutex_new->lock();
        if (singleObject == nullptr) {
            singleObject = new FdogLogger();
        }
        mutex_new->unlock();
        return singleObject;
    }
    
    void FdogLogger::initLogConfig(){
    
        map<string, string *> flogConfInfo;
        flogConfInfo["logSwitch"] = &this->logger.logSwitch;
        flogConfInfo["logFileSwitch"] = &this->logger.logFileSwitch;
        flogConfInfo["logTerminalSwitch"] = &this->logger.logTerminalSwitch;
        flogConfInfo["logName"] = &this->logger.logName;
        flogConfInfo["logFilePath"] = &this->logger.logFilePath;
        flogConfInfo["logMixSize"] = &this->logger.logMixSize;
        flogConfInfo["logBehavior"] = &this->logger.logBehavior;
        flogConfInfo["logOverlay"] = &this->logger.logOverlay;
        flogConfInfo["logOutputLevelFile"] = &this->logger.logOutputLevelFile;
        flogConfInfo["logOutputLevelTerminal"] = &this->logger.logOutputLevelTerminal;
    
        string str;
        ifstream file;
        char str_c[100]={0};
        file.open("fdoglogconf.conf");
        if(!file.is_open()){
            cout<<"文件打开失败\n";
        }
        while(getline(file, str)){
            if(!str.length()) {
                continue;
            }
            string str_copy = str;
            //cout<<"获取数据:"<<str_copy<<endl;
            int j = 0;
            for(int i = 0; i < str.length(); i++){
                if(str[i]==' ')continue;
                str_copy[j] = str[i];
                j++;
            }
            str_copy.erase(j);
            if(str_copy[0]!='#'){
                sscanf(str_copy.data(),"%[^=]",str_c);
                auto iter = flogConfInfo.find(str_c);
                if(iter!=flogConfInfo.end()){
                    sscanf(str_copy.data(),"%*[^=]=%s",str_c);
                    *iter->second = str_c;
                } else {
                }
            }
        }
        logger.logName = logger.logName + getLogNameTime() + ".log";
    
        bindFileCoutMap("5", fileType::Error);
        bindFileCoutMap("4", fileType::Warn);
        bindFileCoutMap("3", fileType::Info);
        bindFileCoutMap("2", fileType::Debug);
        bindFileCoutMap("1", fileType::Trace);
    
        bindTerminalCoutMap("5", terminalType::Error);
        bindTerminalCoutMap("4", terminalType::Warn);
        bindTerminalCoutMap("3", terminalType::Info);
        bindTerminalCoutMap("2", terminalType::Debug);
        bindTerminalCoutMap("1", terminalType::Trace);
    
        if(logger.logFileSwitch == "on"){
            if(!createFile(logger.logFilePath)){
                std::cout<<"Log work path creation failed\n";
            }
        }
    
        cout << "|========FdogLogger v2.0==========================|" <<endl << endl;
        cout << "  日志开关:" << logger.logSwitch << endl;
        cout << "  文件输出:" << logger.logFileSwitch << endl;
        cout << "  终端输出:" << logger.logTerminalSwitch << endl;
        cout << "  日志输出等级(文件):" << logger.logOutputLevelFile << endl;    
        cout << "  日志输出等级(终端):" << logger.logOutputLevelTerminal << endl;
        cout << "  日志文件名:" << logger.logName << endl;
        cout << "  日志保存路径:" << logger.logFilePath << endl;
        cout << "  单文件最大大小:"<< logger.logMixSize << "M" << endl;
        cout << "  日志保存时间 :" << logger.logOverlay << "天" << endl << endl;
        cout << "|=================================================|" <<endl;
        
        return;
    }
    
    string FdogLogger::getCoutType(coutType coutType){
        return singleObject->coutTypeMap[coutType];
    }
    
    bool FdogLogger::getFileType(fileType fileCoutBool){
        return singleObject->fileCoutMap[fileCoutBool];
    }
    
    bool FdogLogger::getTerminalType(terminalType terminalCoutTyle){
        return singleObject->terminalCoutMap[terminalCoutTyle];
    }
    
    string FdogLogger::getLogCoutTime(){
        time_t timep;
        time (&timep);
        char tmp[64];
        strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S",localtime(&timep));
        string tmp_str = tmp;
    
        return SQUARE_BRACKETS_LEFT + tmp_str + SQUARE_BRACKETS_RIGHT;
    }
    
    string FdogLogger::getLogNameTime(){
        time_t timep;
        time (&timep);
        char tmp[64];
        strftime(tmp, sizeof(tmp), "%Y-%m-%d-%H:%M:%S",localtime(&timep));
        return tmp;
    }
    
    string FdogLogger::getFilePash(){
        getcwd(szbuf, sizeof(szbuf)-1);
        string szbuf_str = szbuf;
        return szbuf_str + SLASH;
    }
    
    string FdogLogger::getLogCoutProcessId(){
    #ifndef linux
        return to_string(getpid());
    #endif
    #ifndef WIN32
    //  unsigned long GetPid(){
    //     return GetCurrentProcessId();
    // }
    #endif
    }
    
    string FdogLogger::getLogCoutThreadId(){
    #ifndef linux
        return to_string(syscall(__NR_gettid));
    #endif
    #ifndef WIN32
    //  unsigned long GetTid(){
    //     return GetCurrentThreadId();
    // }
    #endif
    }
    
    string FdogLogger::getLogCoutUserName(){
        struct passwd *my_info;
        my_info = getpwuid(getuid());
        string name = my_info->pw_name;
        return SPACE + name + SPACE;
    }
    
    bool FdogLogger::createFile(string filePash){
        int len = filePash.length();
        if(!len){
            filePash = "log";
            if (0 != access(filePash.c_str(), 0)){
                if(-1 == mkdir(filePash.c_str(),0)){
                    std::cout<<"没路径";
                    return 0;
                }
            }
        }
        std::string filePash_cy(len,'\0');
        for(int i =0;i<len;i++){
            filePash_cy[i]=filePash[i];
            if(filePash_cy[i]=='/' || filePash_cy[i]=='\\'){
                if (-1 == access(filePash_cy.c_str(), 0)){
                    if(0!=mkdir(filePash_cy.c_str(),0)){
                        std::cout<<"有路径";
                        return 0;
                    }
                }
            }
        }
        return 1;
    }
    
    bool FdogLogger::logFileWrite(string messages){
        ofstream file;
        file.open(logger.logFilePath + logger.logName, ::ios::app | ios::out);
        if(!file){
            cout<<"写失败"<<endl;
            return 0;
        }
        file << messages;
        file.close();
        return 1;
    }
    
    bool FdogLogger::bindFileCoutMap(string value1, fileType value2){
        if(logger.logOutputLevelFile.find(value1)!=std::string::npos) {
            fileCoutMap[value2] = true;
        } else {
            fileCoutMap[value2] = false;
        }
    }
    
    bool FdogLogger::bindTerminalCoutMap(string value1, terminalType value2){
        if(logger.logOutputLevelTerminal.find(value1)!=std::string::npos) {
            terminalCoutMap[value2] = true;
        } else {
            terminalCoutMap[value2] = false;
        }
    }
    

    四. 测试用例

    在这里插入图片描述

    1. fdoglogger_test.cpp
    #include<iostream>
    #include"fdoglogger.h"  //添加日志库头文件
    
    using namespace fdog;   //日志库的命名空间
    
    int main(){
        FdogError("错误");
        FdogWarn("警告");
        FdogInfo("信息");
        FdogDebug("调试");
        FdogTrace("追踪");
        return 0;
    }
    

    在这里插入图片描述

    在这里插入图片描述

    暂时考虑到的就是这些,如有缺陷,欢迎评论区补充。(比如文件写入打开就关闭,很浪费资源,如何优化,下篇见)。

    源码已上传github,还原star! FdogLog,一个轻量级C++日志库,用于日志服务。


    展开全文
  • 转载请注明出处:... web前端工作一天 ------------------------------------------------------------------------------------------------------------------------...
  • LINUX查看某段时间的日志

    千次阅读 2021-05-13 17:08:42
    :sed 截选时间段日志:sed-n ‘/开始时间/,/结束时间/p‘日志文件使用sed命令如下:sed -n ‘/2020-05-04 09:25:55/,/2015-05-04 09:28:55/p’ logfile这样可以精确地截取出来某个时间段的日志。其二:1.sed截...
  • 程序员如何写工作日志

    万次阅读 2012-06-20 13:41:06
    日志,但工作日志,可是这次培训实习要求每人每天写一工作日志,且发布到博客上,不知道工作日志该怎么,也偷偷看过其他同学交的日志,有的看起来跟小学生的流水账日志一样,感觉不太靠谱啊,然后上网搜...
  • Java日志-总结【这篇够了】

    千次阅读 2021-12-02 23:14:49
    、JDK日志(java.util.logging=jul) 从jdk1.4起,JDK开始自带一套日志系统。JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用。相对于其他的日志框架,JDK自带的日志可谓是鸡肋,...
  • 针对这样的情况,我们一般会将需要打印出来的信息个文件里面,即使隔了很多,我们依旧可以回过头来查看程序的运行状况,这就是日志的作用。 日志的等级 首先,我们要明确,日志是分等级的。有些事情很重要,...
  • 日志使用前的准备工作 使用慢日志之前,需要确定服务器的 MySQL 是否开启了慢日志,使用下述 SQL 语句进行查询(需要有权限,如果你是 root 账户,直接操作即可) show variables like '%slow_query_log%'; 查询...
  • logback过期日志文件自动删除

    千次阅读 2021-10-11 16:45:11
    logback应该是目前最主流的日志框架了,在实际使用中经常遇到打印的日志文件不会自动删除,导致日志文件占有大量磁盘空间的问题。 本文主要介绍logback日志文件自动删除的实现机制。
  • 个简单的日志封装类

    万次阅读 2020-05-18 11:42:41
    记录个自己封装的日志类,不完善的地方,望指点。 其中,包含文件和输出到终点,定义日志等级,定义日志存储文件时间间隔,日志文件个数等 并统一日志输出格式:文件名,方法名等信息 import logging from ...
  • [102]python写日志

    千次阅读 2018-06-20 08:52:09
    日志级别 级别 何时使用 DEBUG 详细信息,典型地调试问题时会感兴趣。 INFO 证明事情按预期工作。 WARNING 表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了’)。软件还是在正常...
  • 主要有以下四部:、导包 (我用的是org.apache.log4j.Logger 将 log4j-1.2.17.jar放到lib下面)二、在web.xml中添加个监听 &lt;listener&gt; &lt;listener-class&gt;org.springframework....
  • 1、lliunx下redis日志备份及清理 2、日志定时备份及清理 3、lliunx下日志定时备份及备份日志定时清理 4、lliunx下日志备份及备份日志压缩 5、定时任务配置及取消
  • -- TimeBased默认是一天更新一次 --> <!-- 历史日志文件的存放路径和名称 --> ${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz <!-- 日志文件最大的保存历史 数量--> ${log.maxHistory} ${log.pattern}...
  • 写日志(WAL)介绍

    千次阅读 2017-05-12 13:31:57
    写日志(WAL,Write Ahead Log)是关系型数据库中用于实现事务性和持久性的系列技术。简单来说就是,做个操作之前先讲这件事情记录下来。举个例子:很多人都会有自己的备忘录,记录自己干了哪些事,这里的WAL...
  • logback实现日志按天和大小切分

    万次阅读 2018-07-29 08:43:50
    强烈推荐个大神的人工智能的教程:http://www.captainbed.net/zhanghan 【前言】 项目中每天会打印很多...对日志进行按的切分是件非常有必要的事情。 【日志切分】 、在application.properties中...
  • 【Linux系列】Linux脚本:定时任务批量移动指定文件至另目录!想学吗?我教你啊 【Linux系列】Linux实践():linux常用命令 【Linux系列】Linux实践(二):CentOS系统中搭建java开发环境与部署web...
  • Celery的日志配置及日志切分

    千次阅读 2019-04-08 22:48:56
    Celery的日志配置及日志切分 . Celery定时任务启动 Celery定时任务的启动是通过命令启动的,可以通过-f logfilename或–logfile=logfilename指定日志保存的文件名,可以通过-loglevel=level 指定日志的等级...
  • ="D:\\comp\\日志管理" /> <!-- pro文件路径 --> < property name ="PROD_FILE_PATH" value ="/var/log/tomcat/systemName" /> < property name ="LOG_NAME" value ="systemName" /> <!-- ...
  • 关于公司各岗位钉钉日志撰写标准

    万次阅读 2020-12-28 19:07:39
    一、为什么要写工作日志?站在企业角度:工作日志作为企业管理的一种重要绩效考核方式,目的是为了通过工作日志对员工一天的工作内容有一个清晰的了解。通过员工的工作日志可以尽早发现公司当前存在的问题、员工的...
  • 在日常工作中,我们通常需要存储一些日志,譬如用户请求的出入参、系统运行时打印的一些info、error之类的日志,从而对系统在运行时出现的问题有排查的依据。 日志存储和检索是个很常见且简单的工作,市面也有很多...
  • 1. 先设个变量 $logdate map $time_iso8601 $logdate { '~^(?<...2. 配置日志文件路径 在上图http中的位置,配置: access_log /data/project/log-server/logs/access-$logdate.log json_log; 日
  • 在实际工作中,由于生产环境在出现问题的时候,中间件服务会出现大量的报错日志,若日志增长量极大的情况下,会出现磁盘空间被满的情况而导致宕机,为了防止此情况出现,编写如下shell脚本进行规避此问题。...
  • mysql中获取当前时间的前一天

    千次阅读 2021-01-18 19:24:16
    日志中,经常需要获取当天的或者前一天的数据当前时间前一天 :SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY);当天:select * from user where date(log_time) = curdate();前一天:如果表示前一天的数据,则不能...
  • web日志信息文件

    热门讨论 2015-12-02 14:28:28
    文件是web日志,记录了一个网站(粉丝日志网站)一天内的访问记录的日志信息。 我的博客:http://blog.csdn.net/u010156024/article/details/50147697 详细应用了该日志文件进行hadoop下的挖掘分析。欢迎访问。
  • 使用logback-spring.xml配置日志

    千次阅读 2020-10-08 22:03:17
    所以不能会这个类来配置info级别的file文件 那要怎么样才可能让个文件只输出info级别的日志信息呢? 那就要用到下面这个类了LevelFilter. LevelFilter这个类,要配合onMatch标签,如果该标签中是DENY则,说明拦截该...
  • 本篇博客我们学习一下MySQL 中的二进制日志,该日志记录了所有对MySQL数据库的CRUD事件,包括增删改查和对表的系列操作记录,对于失败、回滚或未提交的操作不会记录。通过MySQL的二进制日志增量,可以实现MySQL的...
  • 我的思路是单独开个线程,监控系统的时间,当等到零点的时候关闭当前流和文件的关联,然后创建新的文件,继续写日志 代码如下: DWORD WINAPI MonitorTime(PVOID pParam) { time_t sttime; struct tm * tim; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 305,851
精华内容 122,340
关键字:

一天的工作日志怎么写