精华内容
下载资源
问答
  • 写日志

    千次阅读 2020-01-19 14:14:46
    * 写日志到文件 * @param $content -日志内容 */ function write_log($content) { $content_pre = ''; $dir = './log/'; if (!is_dir($dir)) { mkdir($dir); } $file = $dir . '/' . date(...
    /**
     * 写日志到文件
     * @param $content -日志内容
     */
    function write_log($content)
    {
        $content_pre = '';
        $dir = './log/';
        if (!is_dir($dir)) {
            mkdir($dir);
        }
        $file = $dir . '/' . date('Ymd') . '.txt';
        $content_pre .= "\r";
        $content_pre .= date('Y年m月d日 H:i:s') . ':';
        $content = $content_pre . $content;
        if (file_exists($file)) {
            file_put_contents($file, $content, FILE_APPEND);
        } else {
            $resource = fopen($file, 'w+');
            file_put_contents($file, $content, FILE_APPEND);
            fclose($resource);
        }
    }
    
    展开全文
  • Linux使用Shell脚本写日志

    万次阅读 2020-09-30 14:30:37
    # 这是一个死循环,每隔1秒执行一次写日志操作 while [ true ] do # 可拼接两个字符串,一并写入日志文件,`$`、`()`、`%`、`+`不可省略,中间的`空格`及`-`、`:`是普通字符,用来使格式更美观,可省略 # `>>...

    所用指令

    • echo:用于字符串的输出
    • >>:向文件中追加文本内容
    • $date:获取系统日期时间

    源代码

    • log.sh
    #!/bin/bash
    
    # 向`log.txt`文件中追加文本内容,包含日期时间
    # 这是一个死循环,每隔1秒执行一次写日志操作
    while [ true ]
    do
    	# 可拼接两个字符串,一并写入日志文件,`$`、`()`、`%`、`+`不可省略,中间的`空格`及`-`、`:`是普通字符,用来使格式更美观,可省略
    	# `>>`表示追加内容,若想直接覆盖内容,用`>`代替
    	echo $(date "+%Y-%m-%d %H:%M:%S") "hello, log" >> log.txt
    	# 等待1秒
    	sleep 1
    done
    

    执行脚本

    ./log.sh
    

    查看日志内容

    cat log.txt
    
    展开全文
  • c++写日志文件类

    热门讨论 2012-04-11 11:31:11
    利用C++写工程日志文件,提供了一个简单的写日志文件类,可以方便使用。
  • C++写日志操作

    千次阅读 2017-03-25 20:37:57
    使用C++语言编写写日志类,支持写日志级别设置、支持多线程、支持可变形参表写日志。 主要提供以下接口: ①设置写日志的级别 ②写关键日志信息 ③写错误日志信息 ④写警告日志信息 ⑤写一般...

    使用C++语言编写写日志类,支持写日志级别设置、支持多线程、支持可变形参表写日志。
    主要提供以下接口:
    ①设置写日志的级别

    ②写关键日志信息

    ③写错误日志信息

    ④写警告日志信息

    ⑤写一般日志信息





    1.共有变量的定义CommandDefine.h

    #ifndef COMMAND_DEFINE_H
    #define COMMAND_DEFINE_H
    //日志级别的提示信息
    static const char * KEYINFOPREFIX   = " Key: \n";
    static const char * ERRORPREFIX = " Error: \n";
    static const char * WARNINGPREFIX   = " Warning: \n";
    static const char * INFOPREFIX      = " Info: \n";

    static const int MAX_STR_LEN = 1024;
    //日志级别枚举
    typedef enum EnumLogLevel
    {
        LogLevelAll = 0,    //所有信息都写日志
        LogLevelMid,        //写错误、警告信息
        LogLevelNormal,     //只写错误信息
        LogLevelStop        //不写日志
    };

    #endif




    2.日志头文件Logger.h

    #ifndef LOGGER_H_
    #define LOGGER_H_
    #include <Windows.h>
    #include <stdio.h>
    #include "CommandDefine.h"
    /*
        * 类名:Logger
        * 作用:提供写日志功能,支持多线程,支持可变形参数操作,支持写日志级别的设置
        * 接口:SetLogLevel:设置写日志级别
               TraceKeyInfo:忽略日志级别,写关键信息
               TraceError:写错误信息
               TraceWarning:写警告信息
               TraceInfo:写一般信息
    */
    class Logger
    {
    public:
        //默认构造函数
        Logger();
        //构造函数
        Logger(const char * strLogPath, EnumLogLevel nLogLevel = EnumLogLevel::LogLevelNormal);
        //析构函数
        virtual ~Logger();
    public:
        //写关键信息
        void TraceKeyInfo(const char * strInfo, ...);
        //写错误信息
        void TraceError(const char* strInfo, ...);
        //写警告信息
        void TraceWarning(const char * strInfo, ...);
        //写一般信息
        void TraceInfo(const char * strInfo, ...);
        //设置写日志级别
        void SetLogLevel(EnumLogLevel nLevel);
    private:
        //写文件操作
        void Trace(const char * strInfo);
        //获取当前系统时间
        char * GetCurrentTime();
        //创建日志文件名称
        void GenerateLogName();
        //创建日志路径
        void CreateLogPath();
    private:
        //写日志文件流
        FILE * m_pFileStream;
        //写日志级别
        EnumLogLevel m_nLogLevel;
        //日志的路径
        char m_strLogPath[MAX_STR_LEN];
        //日志的名称
        char m_strCurLogName[MAX_STR_LEN];
        //线程同步的临界区变量
        CRITICAL_SECTION m_cs;
    };

    #endif




    3.日志实现文件Logger.cpp

    #include "Logger.h"
    #include <imagehlp.h>
    #include <time.h>
    #include <string.h>
    #include <stdarg.h>

    #pragma comment(lib, "DbgHelp.lib")

    //默认构造函数
    Logger::Logger()
    {
        //初始化
        memset(m_strLogPath, 0, MAX_STR_LEN);
        memset(m_strCurLogName, 0, MAX_STR_LEN);
        m_pFileStream = NULL;
        //设置默认的写日志级别
        m_nLogLevel = EnumLogLevel::LogLevelNormal;
        //初始化临界区变量
        InitializeCriticalSection(&m_cs);
        //创建日志文件名
        GenerateLogName();
    }

    //构造函数
    Logger::Logger(const char * strLogPath, EnumLogLevel nLogLevel):m_nLogLevel(nLogLevel)
    {
        //初始化
        m_pFileStream = NULL;
        strcpy(m_strLogPath, strLogPath);
        InitializeCriticalSection(&m_cs);
        CreateLogPath();
        GenerateLogName();
    }


    //析构函数
    Logger::~Logger()
    {
        //释放临界区
        DeleteCriticalSection(&m_cs);
        //关闭文件流
        if(m_pFileStream)
            fclose(m_pFileStream);
    }

    //写关键信息接口
    void Logger::TraceKeyInfo(const char * strInfo, ...)
    {
        if(!strInfo)
            return;
        char pTemp[MAX_STR_LEN] = {0};
        strcpy(pTemp, GetCurrentTime());
        strcat(pTemp, KEYINFOPREFIX);
        //获取可变形参
        va_list arg_ptr = NULL;
        va_start(arg_ptr, strInfo);
        vsprintf(pTemp + strlen(pTemp), strInfo, arg_ptr);
        va_end(arg_ptr);
        //写日志文件
        Trace(pTemp);
        arg_ptr = NULL;

    }

    //写错误信息
    void Logger::TraceError(const char* strInfo, ...)
    {
        //判断当前的写日志级别,若设置为不写日志则函数返回
        if(m_nLogLevel >= EnumLogLevel::LogLevelStop)
            return;
        if(!strInfo)
            return;
        char pTemp[MAX_STR_LEN] = {0};
        strcpy(pTemp, GetCurrentTime());
        strcat(pTemp, ERRORPREFIX);
        va_list arg_ptr = NULL;
        va_start(arg_ptr, strInfo);
        vsprintf(pTemp + strlen(pTemp), strInfo, arg_ptr);
        va_end(arg_ptr);
        Trace(pTemp);
        arg_ptr = NULL;
    }

    //写警告信息
    void Logger::TraceWarning(const char * strInfo, ...)
    {
        //判断当前的写日志级别,若设置为只写错误信息则函数返回
        if(m_nLogLevel >= EnumLogLevel::LogLevelNormal)
            return;
        if(!strInfo)
            return;
        char pTemp[MAX_STR_LEN] = {0};
        strcpy(pTemp, GetCurrentTime());
        strcat(pTemp, WARNINGPREFIX);
        va_list arg_ptr = NULL;
        va_start(arg_ptr, strInfo);
        vsprintf(pTemp + strlen(pTemp), strInfo, arg_ptr);
        va_end(arg_ptr);
        Trace(pTemp);
        arg_ptr = NULL;
    }


    //写一般信息
    void Logger::TraceInfo(const char * strInfo, ...)
    {
        //判断当前的写日志级别,若设置只写错误和警告信息则函数返回
        if(m_nLogLevel >= EnumLogLevel::LogLevelMid)
            return;
        if(!strInfo)
            return;
        char pTemp[MAX_STR_LEN] = {0};
        strcpy(pTemp, GetCurrentTime());
        strcat(pTemp,INFOPREFIX);
        va_list arg_ptr = NULL;
        va_start(arg_ptr, strInfo);
        vsprintf(pTemp + strlen(pTemp), strInfo, arg_ptr);
        va_end(arg_ptr);
        Trace(pTemp);
        arg_ptr = NULL;
    }

    //获取系统当前时间
    char * Logger::GetCurrentTime()
    {
        time_t curTime;
        struct tm * pTimeInfo = NULL;
        time(&curTime);
        pTimeInfo = localtime(&curTime);
        char temp[MAX_STR_LEN] = {0};
        sprintf(temp, "%02d:%02d:%02d", pTimeInfo->tm_hour, pTimeInfo->tm_min, pTimeInfo->tm_sec);
        char * pTemp = temp;
        return pTemp;   
    }

    //设置写日志级别
    void Logger::SetLogLevel(EnumLogLevel nLevel)
    {
        m_nLogLevel = nLevel;
    }

    //写文件操作
    void Logger::Trace(const char * strInfo)
    {
        if(!strInfo)
            return;
        try
        {
            //进入临界区
            EnterCriticalSection(&m_cs);
            //若文件流没有打开,则重新打开
            if(!m_pFileStream)
            {
                char temp[1024] = {0};
                strcat(temp, m_strLogPath);
                strcat(temp, m_strCurLogName);
                m_pFileStream = fopen(temp, "a+");
                if(!m_pFileStream)
                {
                    return;
                }
            }
            //写日志信息到文件流
            fprintf(m_pFileStream, "%s\n", strInfo);
            fflush(m_pFileStream);
            //离开临界区
            LeaveCriticalSection(&m_cs);
        }
        //若发生异常,则先离开临界区,防止死锁
        catch(...)
        {
            LeaveCriticalSection(&m_cs);
        }
    }

    //创建日志文件的名称
    void Logger::GenerateLogName()
    {
        time_t curTime;
        struct tm * pTimeInfo = NULL;
        time(&curTime);
        pTimeInfo = localtime(&curTime);
        char temp[1024] = {0};
        //日志的名称如:2013-01-01.log
        sprintf(temp, "%04d-%02d-%02d.log", pTimeInfo->tm_year+1900, pTimeInfo->tm_mon + 1, pTimeInfo->tm_mday);
        if(0 != strcmp(m_strCurLogName, temp))
        {
            strcpy(m_strCurLogName,temp);
            if(m_pFileStream)
                fclose(m_pFileStream);
            char temp[1024] = {0};
            strcat(temp, m_strLogPath);
            strcat(temp, m_strCurLogName);
            //以追加的方式打开文件流
            m_pFileStream = fopen(temp, "a+");
        }

    }

    //创建日志文件的路径
    void Logger::CreateLogPath()
    {
        if(0 != strlen(m_strLogPath))
        {
            strcat(m_strLogPath, "\\");
        }
        MakeSureDirectoryPathExists(m_strLogPath);
    }




    补充说明:





    使用说明:

    1.写关键信息 【void TraceKeyInfo(const char * strInfo, ...); 】

    myLog.TraceKeyInfo("[%s(%s)(%d)]-%s", __FILE__, __FUNCTION__,__LINE__, "关键信息");


    2.写错误信息 【void TraceError(const char* strInfo, ...); 】

    myLog.TraceError("[%s(%s)(%d)]-%s", __FILE__, __FUNCTION__,__LINE__, "解析报错");

     
    3.写警告信息 【void TraceWarning(const char * strInfo, ...); 】
        
    myLog.TraceWarning("[%s(%s)(%d)]-%s", __FILE__, __FUNCTION__,__LINE__, "警告信息");


    4.写一般信息 【void TraceInfo(const char * strInfo, ...); 】

    myLog.TraceInfo("[%s(%s)(%d)]-%s%s", __FILE__, __FUNCTION__,__LINE__, "输出日志");




    参考文档:

    1.定期删除旧的日志文件: http://blog.csdn.net/chenlycly/article/details/24674527#

    展开全文
  • java实现第五届蓝桥杯写日志

    万次阅读 多人点赞 2019-07-29 16:06:36
    写日志 写日志是程序的常见任务。现在要求在 t1.log, t2.log, t3.log 三个文件间轮流 写入日志。也就是说第一次写入t1.log,第二次写入t2.log,... 第四次仍然 写入t1.log,如此反复。 下面的代码模拟了这种轮流...
     写日志  
    
    写日志是程序的常见任务。现在要求在 t1.log, t2.log, t3.log 三个文件间轮流
    写入日志。也就是说第一次写入t1.log,第二次写入t2.log,... 第四次仍然
    写入t1.log,如此反复。
    
    下面的代码模拟了这种轮流写入不同日志文件的逻辑。
    
    public class A
    {
    private static int n = 1;
    
    public static void write(String msg)
    {
    String filename = "t" + n + ".log";
    n = ____________;
    System.out.println("write to file: " + filename + " " + msg);
    }
    }
    
    请填写划线部分缺失的代码。通过浏览器提交答案。
    
    * 输入描述:  无
    
     * 程序输出: 不要填写题面已有的内容,也不要填写任何说明、解释文字。
    
    * 程序头部的注释结束
    
    */
    
    上代码:
    
    public class Main
    {
      private static int n = 1;
      public static void main(String args[]){
        for (int i = 0; i<=100; i++) {
          write(i,"1111");
        }
      }
    
      public static void write(int n, String msg)
      {
        n = n%3+1;
        String filename = "t" + n + ".log";
        System.out.println("write to file: " + filename + " " + msg);
      }
    }
    
    展开全文
  • 写日志 Java 蓝桥杯

    千次阅读 2014-04-14 20:06:18
    写日志  写日志是程序的常见任务。现在要求在 t1.log, t2.log, t3.log 三个文件间轮流写入日志。也就是说第一次写入t1.log,第二次写入t2.log,... 第四次仍然写入t1.log,如此反复。  下面的代码模拟了这种轮流...
  • 问题我自己写了两个模块request和...总是一个能写日志,一个不能写日志.原因因为两个文件中都是使用logging配置文件的方式创建logger,而且这两个模块都使用的不是同一个配置文件,所以,执行了两遍logging.config.
  • C# 写日志方法

    千次阅读 2018-11-15 15:37:34
    1.Write方法是写日志主要方法。 2.DeleteLog方法是删除指定日期之前生成的日志。 public static void Write(string Msg)  {  string strPath;  DateTime dt = DateTime.Now;  try  {  ...
  • VB.NET 写日志文件

    千次阅读 2017-02-17 17:30:51
    VB.NET 写日志文件
  • HBase预写日志WAL机制

    千次阅读 2019-03-10 17:28:17
    写日志(Write-ahead log,WAL) 最重要的作用是灾难恢复,一旦服务器崩溃,通过重放log,我们可以恢复崩溃之前的数据。如果写入WAL失败,整个操作也将认为失败。 从上图看: 1 客户端对数据执行一个修改操作,如...
  • python logging 重复写日志问题

    万次阅读 多人点赞 2016-07-08 10:29:36
    python logging 重复写日志问题用Python的logging模块记录日志时,遇到了重复记录日志的问题,第一条记录写一次,第二条记录写两次,第三条记录写三次。。。很头疼,这样记日志可不行。网上搜索到了原因与解决方案:...
  • Write-Ahead log 预写日志写日志(WAL,Write-Ahead Log)将每次状态更新抽象为一个命令并追加写入一个日志中,这个日志只追加写入,也就是顺序写入,所以 IO 会很快。相比于更新存储的数据结构并且更新落盘这个...
  • 写日志的那些事儿

    千次阅读 2016-01-30 14:36:37
    摘要写日志简介 一般提到写日志,主要有下面几种不同的场景: 诊断日志:应用打印异常信息,排查问题用,一般是给人看的,输出格式会比较随意,里面可能会有异常堆栈,或者排查问题用的一些文本信息; 数据日志:...
  • Jmeter 在 beanshell 脚本中写日志

    千次阅读 2019-06-05 16:32:00
    JMETER 在执行时,会写日志数据,我们在编写脚本的时候也可以自己写日志。 日志记录再jmeter 的bin 目录的 jmeter.log 文件中。 jmeter 比较人性化,它在这里提供了脚本可以使用的上下文变量,我们可以通过log ...
  • java 写日志步骤

    千次阅读 2016-05-12 11:03:35
    所以写日志相当重要,详细步骤如下 (1)新建项目,导入jar包 在官网上下载log4j.jar导入项目中 (2)新建Java类LogTest.java,写如下代码 public class LogTest { public static void...
  • 写日志(WAL,Write-Ahead Log)将每次状态更新抽象为一个命令并追加写入一个日志中,这个日志只追加写入,也就是顺序写入,所以 IO 会很快。相比于更新存储的数据结构并且更新落盘这个随机 IO 操作,写入速度更快...
  • TP5写日志记录

    万次阅读 2018-01-19 10:44:57
    TP5写日志记录 /*写文件*/ function dingding_log($pay_type,$content){ $filename =$_SERVER['DOCUMENT_ROOT']. '/dingding_log/'.$pay_type.date('Y-m-d').'.txt'; $Ts=fopen($filename,"a+"); fputs($Ts,
  • go语言写日志

    千次阅读 2015-01-27 14:14:01
    go语言写日志 go语言有一个标准库,log,提供了最基本的日志功能,但是没有什么高级的功能,如果需要高级的特性,可以选择glog或log4go。 glog是google提供的,类似于google的c++ log库,使用起来非常简单,...
  • Qt应用程序开发三:写日志文件

    千次阅读 2018-11-21 16:27:45
    开发过程中写日志文件是必不可少 Qt中自带qInstallMessageHandler来进行日志的收集 使用方法 第一步:设置qInstallMessageHandler的回调函数: #include "CsdnDemo.h" #include &lt;QApplication...
  • Delphi中写日志文件log总结

    千次阅读 2014-01-10 22:57:54
    思想:我们在写日志文件的时候习惯将所有的日志文件全部Add到一个List链表里面,然后用定时器定时从List链表中取数据写文件。 所以我使用TStringList,将所以日志Add到TStringList里面,然后用定时器从TStringList...
  • 写日志(WAL)介绍

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

    千次阅读 2016-04-10 20:15:10
    C#多线程写日志 标签: 多线程c#stringnewlineexceptionlog4net 2011-06-29 09:05 2477人阅读 评论(4) 收藏 举报  分类:   WinForm(55)  来自:...
  • shell 写日志函数

    千次阅读 2013-03-22 17:02:36
    # 写日志函数 function write_log() {  now_time='['$(date +"%Y-%m-%d %H:%M:%S")']'  echo ${now_time} $1 | tee -a ${log_file} } log_file='/opt/log/install_software_'$(date +"%Y-%m-%d_%H-%M-%S...
  • 多线程下写日志

    万次阅读 2014-10-31 17:00:21
    鄙人最近遇到了一个奇特的线上事故,记录一下,以备记忆。  鄙人所在的部门负责给公司提供各种基础库,即基础架构部门。最近某别的部门用本部门提供的支持多线程版本的日志库后,...先说下这个日志库的写日志过程,
  • SVN提交强制写日志设置:   强制设定commit时写一定长度的日志的两种方法: 1.在客户端配置 使用客户端工具:TortoiseSVN  在工作副本目录上,鼠标右键,TSVN,选属性,点增加  再出现的下拉条中选tsvn:...
  • Log4j2写日志的艺术

    千次阅读 2017-06-26 21:01:53
    写日志的原理 主要流程 同步写 异步写 顺便说一下ArrayBlockingQueue notFull 与 notEmpty 异步写是怎么玩的 巧妙的异步写设计 ByteBuffer与RandomAccessFile Garbage-free避免创建多余对象 异步Logger 性能 写在...
  • 由于TortoiseSVN的默认tsvn:logminsize值为0,所以默认情况下我们commit代码的时候就算忘记写日志也可以成功提交,要设置提交前必须写日志只需要设置下tsvn:logminsize大小不为0即可,设置步骤如下: 在svn项目...
  • C# 写日志

    千次阅读 2018-03-16 09:25:04
    7.接下来可以通过一个按键程序测试一下日志,通过按下按键来把一句话写入到日志中。 接下来进入按键按下事件中,添加一些话,这些都会写入到log中。 8.运行程序,按下几次按键。 在Log\LogTest\LogTest\...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 992,641
精华内容 397,056
关键字:

如何写日志