精华内容
下载资源
问答
  • 日志输出规范

    2019-10-25 09:25:26
    纵观网络,现在鲜有对程序如何输出日志进行规范的文档,本文尝试定义一个日志输出方面的文档。 日志中使用英文; 日志文件采用UTF-8编码; 每条日志首个单词的首字母大写;每条日志以回车换行符(\...

    众所周知,软件日志对问题的排查可以起到至关重要的作用,但在多人协同开发的情况下,可能会导致不同的人使用不同的日志打印风格,导致日志可阅读性不高。纵观各大知名软件的输出日志,无不有着规范的格式,非常利于阅读。纵观网络,现在鲜有对程序如何输出日志进行规范的文档,本文尝试定义一个日志输出方面的文档。

    1. 日志中使用英文;
    2. 日志文件采用UTF-8编码;
    3. 每条日志首个单词的首字母大写;每条日志以回车换行符(\r\n)结束,不需要写句号.,如:
    // RTC_LOG会自动在日志结尾添加\r\n
    RTC_LOG(LS_INFO) << "Forced software decoder fallback enabled";
    
    1. 不同语义间使用逗号,分隔,key-value间使用冒号:分隔,如:
    RTC_LOG(LS_INFO) << "DataChannel received DATA message, sid: " << sid;
    RTC_LOG(LS_INFO) << "Session: " << session_id() << " is destroyed";
    RTC_LOG(LS_ERROR) << "Invalid configuration: " << config_error.message();
    
    展开全文
  • log日志输出规范

    千次阅读 2019-08-12 15:16:48
    目录 1、Log的用途 2、记录Log日志的基础原则 2.1、日志级别划分 2.2、日志对性能的影响 2.3、什么时候输出日志...2.4 日志输出的内容 3 日志API规范 3.1Log对象的声明和初始化 3.2不得使用System.out, Sy...

    目录

     

    1、Log的用途

    2、记录Log日志的基础原则

    2.1、日志级别划分

    2.2、日志对性能的影响

    2.3、什么时候输出日志

    2.3.1、系统启动参数、环境变量

    2.3.2、异常捕获

    2.3.3、函数获得期望之外的结果时

    2.3.4、关键操作

    2.4 日志输出的内容

    3 日志API规范

    3.1 Log对象的声明和初始化

    3.2 不得使用System.out, System.err进行日志记录,请改使用logger.debug、logger.error

    3.3 正确的记录异常信息

    3.4 重要方法入口,业务流程前后及处理的结果等,推荐记录log,并使用debug级别

    3.5 不允许记录日志后又抛出异常,因为这样会多次记录日志,只允许记录一次日志。

    3.6 Log的内容一定要确保不会因为Log语句的问题而抛出异常造成中断


    1、Log的用途

    不管是使用何种编程语言,日志输出几乎无处不在。总结起来,日志大致有以下几种用途:

    • 问题跟踪:通过日志不仅仅包括我们程序的一些bug,也可以在安装配置时,通过日志可以发现问题。
    • 状态监控:通过实时分析日志,可以监控系统的运行状态,做到早发现问题,早处理问题。
    • 安全审计:审计主要体现在安全方面上,通过日志进行分析,可以发现是否存在非授权的操作。

    2、记录Log日志的基础原则

    2.1、日志级别划分

    Java日志通常可以分为:error、warn、info、debug、trace五个级别。

    • error:问题已经影响到软件的正常运行,并且软件不能自行恢复到正常的运行状态,此时需要输出该级别的错误日志。
    • warn:与业务处理相关的失败,此次失败不影响下次业务的正常执行,通常的结果为外部的输入不能获得期望的结果。
    • info:系统运行期间的系统运行状态变化,或者关键业务处理记录等,用户或者管理员在系统操作运行期间关注的一些信息。
    • debug:软件调试信息,开发人员使用该级别的日志发现程序运行中的一些问题,排查故障。
    • trace:基本同上,但是显示的信息更详尽。

    2.2、日志对性能的影响

    不管多么优秀的日志工具,在日志输出时总会对性能产生或多或少的影响,为了将影响降到对低,有以下几个准则需要遵守:

    • 如何创建Logger实例:创建Logger实例有是否static区别,在log4j的早期版本中,一般会要求使用static,而在高版本以及后来的slf4j中,该问题已经得到优化,获取(创建)logger实例的成本已经很低。所以我们要求:对于可以预见的多数情况下单例运行的class,可以不添加static前缀;对于可能是多例居多,尤其是需要频繁创建的class,要求添加static前缀
    • 判断日志级别:对于可以预见的会频繁产生的日志输出,比如for、while循环,定期执行的job等,建议先使用if对日志级别进行判断后再输出。对于日志输出内容需要复杂的序列化,或输出的某些信息获取成本较高时,需要对日志级别进行判断。比如日志中需要输出用户名,而用户名需要在日志输出时从数据库获取,此时就需要先判断一下日志级别,看看是否有必要获取这些信息。
    • 优先使用参数,减少字符串拼接:使用参数的方式输出日志信息,有助于在性能和代码简洁之间取得平衡。当日志级别限制输出该日志时,参数内容将不会融合到最终输出中,减少了字符串的拼接,从而提升执行效率。

    2.3、什么时候输出日志

    日志并不是越多越详细就越好。在分析运行日志,查找问题时,我们经常遇到该出现的日志没有,无用的日志一大堆,或者有效的日志被大量无意义的日志信息淹没,查找起来非常困难。那么什么时候输出日志呢?以下列出了一些常见的需要输出日志的情况,而且日志的级别基本都是>=INFO,至于Debug级别日志的使用场景,需要具体情况具体分析,但也是要追求“恰如其分”,不是越多越好。

    2.3.1、系统启动参数、环境变量

    系统启动的参数、配置、环境变量、System.Properties等信息对于软件的正常运行至关重要,这些信息的输出有助于安装配置人员通过日志快速定位问题,所以程序有必要在启动过程中把使用到的关键参数、变量在日志中输出出来。在输出时需要注意,不是一股脑的全部输出,而是将软件运行涉及到的配置信息输出出来。比如,如果软件对jvm的内存参数比较敏感,对最低配置有要求,那么就需要在日志中将-Xms -Xmx -XX:PermSize这几个参数的值输出出来。

    2.3.2、异常捕获

    在捕获异常处输出日志,大家在基本都能做到,唯一需要注意的是怎么输出一个简单明了的日志信息。这在后面的问题问题中有进一步说明。

    2.3.3、函数获得期望之外的结果时

    一个函数,尤其是供外部系统或远程调用的函数,通常都会有一个期望的结果,但如果内部系统或输出参数发生错误时,函数将无法返回期望的正确结果,此时就需要记录日志,日志的基本通常是warn。需要特别说明的是,这里的期望之外的结果不是说没有返回就不需要记录日志了,也不是说返回false就需要记录日志。比如函数:isXXXXX(),无论返回true、false记录日志都不是必须的,但是如果系统内部无法判断应该返回true还是false时,就需要记录日志,并且日志的级别应该至少是warn。

    2.3.4、关键操作

    关键操作的日志一般是INFO级别,如果数量、频度很高,可以考虑使用DEBUG级别。以下是一些关键操作的举例,实际的关键操作肯定不止这么多。

    n 删除:删除一个文件、删除一组重要数据库记录……

    n 添加:和外系统交互时,收到了一个文件、收到了一个任务……

    n 处理:开始、结束一条任务……

    n ……

    2.4 日志输出的内容

    •  ERROR:错误的简短描述,和该错误相关的关键参数,如果有异常,要有该异常的StackTrace。
    •  WARN:告警的简短描述,和该错误相关的关键参数,如果有异常,要有该异常的StackTrace。
    •  INFO:言简意赅地信息描述,如果有相关动态关键数据,要一并输出,比如相关ID、名称等。
    •  DEBUG:简单描述,相关数据,如果有异常,要有该异常的StackTrace。

    在日志相关数据输出的时要特别注意对敏感信息的保护,比如修改密码时,不能将密码输出到日志中。 

     

    3 日志API规范

    3.1 Log对象的声明和初始化

    // (推荐)

    private static final Logger logger = LoggerFactory.getLogger(Xxx.class);

     

    private final Logger logger = LoggerFactory.getLogger(getClass());

     

    private  static  final Logger logger =  LoggerFactory.getLogger("loggerName");

     

    private static Logger logger = LoggerFactory.getLogger(Xxx.class);

     

    protected final Logger logger = LoggerFactory.getLogger(getClass());

     

    private Logger logger = LoggerFactory.getLogger(getClass());

     

    protected Logger logger = LoggerFactory.getLogger(getClass());

    3.2 不得使用System.out, System.err进行日志记录,请改使用logger.debug、logger.error

    3.3 正确的记录异常信息

    输出Exceptions的全部Throwable信息,因为logger.error(msg)和logger.error(msg,e.getMessage())这样的日志输出方法会丢失掉最重要的StackTrace信息。

    try {   

        Integer x = null;

        ++x;

    } catch (Exception e) {

        //错误

        log.error(e);       

     

        //错误

        log.error(e, e);       

     

        //错误

        log.error(""+ e);       

     

        //错误

        log.error(e.toString());       

     

        //错误

        log.error(e.getMessage());       

     

        //错误

        log.error(null, e);       

     

        //不推荐

        log.error("", e);       

     

        //错误

        log.error("{}", e);       

     

        //错误

        log.error("{}", e.getMessage());     

       

         //错误

         log.error("Error reading configuration file: " + e);       

     

        //错误

        log.error("Error reading configuration file: "+ e.getMessage());       

     

        //推荐

        log.error("Error reading configuration file", e);

    }

    3.4 重要方法入口,业务流程前后及处理的结果等,推荐记录log,并使用debug级别

    3.5 不允许记录日志后又抛出异常,因为这样会多次记录日志,只允许记录一次日志。

    void foo() throws LogException{

        try{

            // do something

        }catch (Exception e){

            log.error("bad things",e);//错误

            throws new LogException("bad things",e);

        }

    }

    3.6 Log的内容一定要确保不会因为Log语句的问题而抛出异常造成中断

     

    展开全文
  • pytest logging规范日志输出

    千次阅读 2020-07-30 11:25:49
    自动化测试没有log输出,等于没有进行测试,因为即使发现问题,也没有办法知道是哪里有问题。 pytest在3.3版本开始,就支持了log输出功能,不需要另外下载插件。 通过命令pytest --help,可以看到logging设置的基本...

    自动化测试没有log输出,等于没有进行测试,因为即使发现问题,也没有办法知道是哪里有问题。
    pytest在3.3版本开始,就支持了log输出功能,不需要另外下载插件。

    通过命令pytest --help,可以看到logging设置的基本介绍:
    –no-print-logs disable printing caught logs on failed tests.
    –log-level=LOG_LEVEL
    logging level used by the logging module
    –log-format=LOG_FORMAT
    log format as used by the logging module.
    –log-date-format=LOG_DATE_FORMAT
    log date format as used by the logging module.
    –log-cli-level=LOG_CLI_LEVEL
    cli logging level.
    –log-cli-format=LOG_CLI_FORMAT
    log format as used by the logging module.
    –log-cli-date-format=LOG_CLI_DATE_FORMAT
    log date format as used by the logging module.
    –log-file=LOG_FILE path to a file when logging will be written to.
    –log-file-level=LOG_FILE_LEVEL
    log file logging level.
    –log-file-format=LOG_FILE_FORMAT
    log format as used by the logging module.
    –log-file-date-format=LOG_FILE_DATE_FORMAT
    log date format as used by the logging module.

    这里不再讲解,直接上例子。
    pytest.ini中添加如下代码:

    [pytest]
    log_cli = true
    log_cli_level = DEBUG
    log_format = %(asctime)s (%(filename)-16s:%(lineno)-3s) %(levelname)-8s %(message)s
    log_date_format = %Y-%M-%D %H:%M:%S

    在测试python文件如:test_logging.py中添加如下代码:
    import pytest
    import logging

    log = logging.getLogger(name)

    def test_logger():
    log.info(“info massage!”)
    log.debug(“debug massage!”)
    log.error(“error message!”)
    log.critical(“critical message!”)
    log.warning(“warning message!”)
    print(“print message!”)

    命令行中运行命令:pytest test_logging.py ,运行结果如下:
    在这里插入图片描述
    你get到了吗?如果有疑问,欢迎随时联系我!

    展开全文
  • 日志规范

    万次阅读 2013-08-30 12:57:29
    后台服务日志输出规范  在后台服务中添加程序日志记录可以跟踪代码运行时轨迹,作为日后审计的依据;并且担当集成开发环境中的调试器的作用,向文件打印代码的调试信息;同时规划化输出的日志文件,便于和其他相关...


        
    后台服务日志输出规范


     在后台服务中添加程序日志记录可以跟踪代码运行时轨迹,作为日后审计的依据;并且担当集成开发环境中的调试器的作用,向文件打印代码的调试信息;同时规划化输出的日志文件,便于和其他相关人员交流分析使用。本规定C++ 后台服务项目必须使用。
    日志文件
    日志文件按应用需求功能分为访问日志和应用日志和系统日志。日志文件统一命名格式如下:服务名称.应用类型.时间.索引。中间采用点符号(.) 分割。
    服务名称:进程名或者bin文件的名称。
    应用类型:目前分为ACCESS,简写为ACC;application,简写为APP,系统日志,简写为SYS
    时间:目前按天写日志,格式是YYYYMMDD。如果文件名不能输出时间格式,可省略。
    索引:目前当天的索引从0或者1开始,最好不要超过20。索引也可以是一个其他的标识。日志必须支持滚动日志输出,避免日志写满磁盘。
    1.1. 访问日志文件
    访问日志文件主要是为了输出服务器收到请求,以及对请求的应答;对外请求以及外部服务对请求的应答。
    1.1.1. 访问日志文件格式
    分为接受日志和和应答日志两种。

    1.1.1.1. 网络接收日志格式
    收取时间
    日志级别(DEBUG,INFO,WARN,ERROR,FATAL)
    日志输出标记
    线程标识
    文件名称(DEBUG日志需要,DEBUG日志可以为空)
    文件行号(DEBUG日志需要,DEBUG日志可以为空)
    函数名称(DEBUG日志需要,DEBUG日志可以为空)
    日志描述
    处理耗时(单位:毫秒),请求一般是零。
    日志标记(包括REQ,ACCEPT几种大类型)
    对方地址
    对方端口
    数据包长度
    数据包内容(16进制),如果内容太大,可以考虑只是打印一部分,多余部分用***表示。建议输出长度不要超过512字节,大于512
    字节的数据屏蔽输出。


    需要更多字段只能增加到后面,字段内容之间采用|分开,如果输出内容之间包含有|,|转义为#后输出.

    1.1.1.2. 网络应答日志格式
    应答时间
    日志级别(DEBUG,INFO,WARN,ERROR,FATAL)
    日志输出标记
    线程标识
    文件名称(DEBUG日志需要,DEBUG日志可以为空)
    文件行号(DEBUG日志需要,DEBUG日志可以为空)
    函数名称(DEBUG日志需要,DEBUG日志可以为空)
    日志描述
    处理耗时(单位:毫秒)
    日志标记(包括RESP,CLOSE,SHUNDOWN几种大类型)
    对方地址
    对方端口
    数据包长度
    数据包内容(16进制),如果内容太大,可以考虑只是打印一部分,多余部分用***表示。建议输出长度不要超过512字节,大于512
    字节的数据屏蔽输出。


    需要更多字段只能增加到后面,字段内容之间采用|分开,如果输出内容之间包含有|,|转义为#后输出.

    1.1.1.3. 日志标记
    RESP:表示收到对方的应答。
    REQ:表示请求外部服务。
    ACCEPT:表示接入一个新连接。
    CONNECT:表示向外部服务发起一个新连接;
    CLOSE:表示关闭一个连接;
    SHUNDOWN:
    表示切断一个连接

    1.1.1.4. 日志标记子定义
    日志标记(RESP,REQ,CONNECT)里面的 RESPREQ,CONNECT可以细化定义,增加子类型。因为一个网络服务有可能需要和A,B,C
    等不同的服务类别交互,该网络服务有可能既对外提供服务,也同时需要访问其他网络服务器的服务。

    比如访问A进程的A1A2服务器的服务,分别可以这样定义:
    REQ_A_A1,RESP_A_A1
    REQ_A_A2,RESP_A_A2


    比如连接A进程:
    CONNECT_A

    1.1.1.5. 日志输出示例
    2013-09-04 10:29:43.148.000|DEBUG|ACCfilelogger.ACC[2]|4324|f:\work\mytest\log4cplus_test\log4cplus_test\log4cplus_test.cpp|34|printDebug|This is a ACC message|0|REQ|172.13.12.35|3456|845|0x 0d 0x
    2013-09-04 10:29:43.148.000|DEBUG|ACCfilelogger.ACC[2]|4324|f:\work\mytest\log4cplus_test\log4cplus_test\log4cplus_test.cpp|35|printDebug|This is a ACC message|150|RESP|172.13.12.35|3456|345|0x 0d 0x 0A
    2013-09-04 10:29:43.148.000|ERROR|ACCfilelogger.ACC[2]|4324|f:\work\mytest\log4cplus_test\log4cplus_test\log4cplus_test.cpp|36|printDebug|This is a ACC message|0|CONNECT_A|172.13.12.99|8888||
    2013-09-04 10:29:43.148.000|INFO |ACCfilelogger.ACC[2]|4324||||This is a ACC message|0|REQ_A_A1|172.13.12.99|8888|234|0x 0d 0x 0A


    1.1.2. 日志文件命名
    访问日志文件命名为
    服务名称.ACC.时间.索引。
    比如进程 shutong 的几个日志文件命名是:
    shutong.ACC.20130819.0
    shutong.ACC.20130819.15
    shutong.ACC.18


    1.1.3. 日志输出点
    对于每一个请求和应答都必须有输出。

    1.1.4. 文件存放
    存放目录: 必须存放在磁盘最大分区。比如/data/logs/服务名称/日志文件名称,示例:
    /data/logs/shutong/shutong.ACC.20130819.0
    1.1.5. 文件大小
    单个日志文件建议50M~~100M
    之间。

    1.1.6. 日志分析脚本
    需要提供日志分析脚本,能方便的提取日志内容,定位分析,统计分析。
    1.2. 应用日志文件
    日志主要为业务应用提供业务流程的支持,需要完整的输出一个业务的多个关键流程节点信息,确保能通过查阅该日志,了解每个业务交互的具体情况,理清业务各子流程。
    1.2.1. 文件命名
    访问日志文件命名为
    服务名称.APP.时间.索引。
    比如进程 shutong 的几个日志文件命名是:
    shutong.APP.20130819.0
    shutong.APP.20130819.15
    下面文件的 12 是索引,表示文件是12:14分产生。
    shutong.APP.20130819.12-14


    1.2.2. 应用日志格式
    发生时间
    日志级别(DEBUG,INFO,WARN,ERROR,FATAL)
    日志输出标记
    线程标识
    文件名称(DEBUG日志需要,DEBUG日志可以为空)
    文件行号(DEBUG日志需要,DEBUG日志可以为空)
    函数名称(DEBUG日志需要,DEBUG日志可以为空)
    日志描述
    订单或者消息编号


    需要更多字段只能增加到后面,字段内容之间采用|分开,如果输出内容之间包含有|,|转义为#后输出.

    1.2.3. 日志输出示例

    2013-09-04 10:46:59.011.000|INFO |APPfilelogger.APP[2]|5592||||This is a APP message|ORDERID_2013090412121200001
    2013-09-04 10:46:59.011.000|DEBUG|APPfilelogger.APP[2]|5592|f:\work\mytest\log4cplus_test\log4cplus_test\log4cplus_test.cpp|41|printDebug|This is a APP message|MSGID_2013090412121200002
    2013-09-04 10:46:59.011.000|ERROR|APPfilelogger.APP[2]|5592|f:\work\mytest\log4cplus_test\log4cplus_test\log4cplus_test.cpp|42|printDebug|This is a APP message|MSGID_2013090412121200003
    2013-09-04 10:46:59.011.000|DEBUG|APPfilelogger.APP_DAILY[2]|5592|f:\work\mytest\log4cplus_test\log4cplus_test\log4cplus_test.cpp|43|printDebug|This is a APP message|MSGID_2013090412121200006


    1.2.4. 文件存放
    存放目录: 必须存放在磁盘最大分区。比如/data/logs/服务名称/日志文件名称,示例:
    /data/logs/shutong/shutong.APP.20130819.0
    1.2.5. 文件大小
    单个日志文件建议50M~~100M
    之间。

    1.2.6. 日志分析脚本
    需要提供日志分析脚本,能方便的提取日志内容,定位分析,统计分析。

    1.3. 系统日志文件
    系统日志主要是为了记录系统运行的情况,比如消息队列当前的消息数目;还有就是为了调试方便,可以比较详细的输出交互的多个步骤,便于定位问题。
    1.3.1. 文件命名
    访问日志文件命名为
    服务名称.SYS.时间.索引。
    比如进程 shutong 的几个日志文件命名是:
    shutong.SYS.20130819.0
    shutong.SYS.20130819.15


    1.3.2. 日志格式
    发生时间
    日志级别(DEBUG,INFO,WARN,ERROR,FATAL)
    日志输出标记
    线程标识
    文件名称(DEBUG日志需要,DEBUG日志可以为空)
    文件行号(DEBUG日志需要,DEBUG日志可以为空)
    函数名称(DEBUG日志需要,DEBUG日志可以为空)
    日志描述


    需要更多字段只能增加到后面,字段内容之间采用|分开,如果输出内容之间包含有|,|转义为#后输出.

    1.3.3. 日志输出示例
    2013-09-04 10:49:20.296.000|INFO |SYSfilelogger.SYS[2]|5496||||This is a SYS message
    2013-09-04 10:49:20.296.000|DEBUG|SYSfilelogger.SYS[2]|5496|f:\work\mytest\log4cplus_test\log4cplus_test\log4cplus_test.cpp|47|printDebug|This is a SYS message
    2013-09-04 10:49:20.296.000|ERROR|SYSfilelogger.SYS[2]|5496|f:\work\mytest\log4cplus_test\log4cplus_test\log4cplus_test.cpp|48|printDebug|This is a SYS message
    2013-09-04 10:49:20.296.000|DEBUG|SYSfilelogger.SYS[2]|5496|f:\work\mytest\log4cplus_test\log4cplus_test\log4cplus_test.cpp|49|printDebug|This is a SYS message

    1.3.4. 文件存放
    存放目录: 必须存放在磁盘最大分区。比如/data/logs/服务名称/日志文件名称,示例:
    /data/logs/shutong/shutong.SYS.20130819.0

    1.3.5. 文件大小
    单个日志文件建议50M~~100M之间。
    1.4. 日志备份机制
     必须先对当天日志进行压缩,再做磁带备份,生产机上保留最近5~10个以上工作日的日志备份。
    1.5. 日志内容规范
    对于敏感的单位信息,如名称、余额等信息,禁止使用debug以上级别的日志方法记录,在开发过程中,也应减少日志对该类信息的记录。一些敏感信息可以打马赛克后输出,比如比方字符串部分内容换成*。如:身份证号 422927198806031234,可以考虑这样输出: 42292719880*****34
    对于特别敏感的交易信息,不能输出到日志文件。所有的异常(Exception)都必须写在日志中,当系统抛出异常时,必须使用log.error()
    记录定制信息外。

    1.5. 特别敏感信息定义
    密码:用户登录,交易等一切密码信息;
    2. 日志信息级别规范
    日志信息输出的优先级从高到低至少应分为五档,分别是FatalERRORWARNINFODEBUG。这些级别用来指定这条日志信息的重要程度。在测试阶段可以打开所有级别的日志,系统上线后,建议只输出INFO以上级别(含INFO)。各级别的日志信息作用规定如下:
    2.1. 致命(Fatal
            严重的错误,系统无法正常运行,如硬盘空间满等。这个级别很少被用,常暗含系统或者系统的组件迫近崩溃。
    2.2. 错误(Error
            系统可以继续运行,但最好要尽快修复的错误。这个级别用的较多,常常伴随Java异常,错误(Error)
    的环境不一定会造成系统的崩溃,系统可以继续服务接下来的请求。

    2.3. 警告(Warn
            系统可以正常运行,但需要引起注意的警告信息。这个级别预示较小的问题,由系统外部的因素造成的,比如用户输入了不符合条件的参数。
    2.4. 信息(Info
            系统运行的主要关键时点的操作信息,一般用于记录业务日志。但同时,也应该有足够的信息以保证可以记录再现缺陷的路径。这个级别记录了系统日常运转中有意义的事件。
    2.5. 调试(Debug
            系统运行中的调试信息,便于开发人员进行错误分析和修正,一般用于程序日志,关心程序操作(细粒度),不太关心业务操作(粗粒度)。系统出现问题时,必须抛出异常,在处理异常时记录日志,且日志级别必须是前三个级别(Fatal\Error\Warning
    )中的一种。

    Log4cplus实现方式
    3.1. Log4cplus 来源
    来自开源项目 logging,项目地址位于:
    http://log4cplus.sourceforge.net
    https://sourceforge.net/news/?group_id=40830
    3.2. 版本
    目前使用比较新的版本 log4cplus(1.1.X)
    3.3. 配置文件
    使用配置文件 urconfig.properties 控制log
    的输出。文件配置如下。

    #全局默认根 logger,这里忽略
    #log4cplus.rootLogger=TRACE, ALL_MSGS, TRACE_MSGS, DEBUG_INFO_MSGS, FATAL_MSGS

    #log4cplus.rootLogger=TRACE,ALL_MSGS
    #log4cplus.appender.ALL_MSGS=log4cplus::RollingFileAppender
    #log4cplus.appender.ALL_MSGS.File=./logout/all_msgs.log
    #log4cplus.appender.ALL_MSGS.layout=log4cplus::TTCCLayout


    #独立的 logger 的配置语法,支持两个 appender
    log4cplus.logger.APPfilelogger = TRACE,APP,APP_DAILY
    og4cplus.additivity.APPfilelogger = false


    #独立的 logger 的配置语法,同一个 logger 下会发送到所有文件,
    #是否写入到所有文件,通过 LogLevel 来控制
    log4cplus.logger.SYSfilelogger = TRACE,SYS
    #log4cplus.additivity.SYSfilelogger = TRUE

    #独立的 logger 的配置语法
    log4cplus.logger.ACCfilelogger = TRACE,ACC
    #log4cplus.additivity.ACCfilelogger = TRUE


    #支持只写入同一个 logger 下的指定文件
    log4cplus.appender.APP=log4cplus::RollingFileAppender
    log4cplus.appender.APP.File=./logout/app_msgs.log
    log4cplus.appender.APP.ImmediateFlush=false
    log4cplus.appender.APP.MaxFileSize=1MB
    #log4cplus.appender.APP.MinFileSize=1M
    log4cplus.appender.APP.MaxBackupIndex=3
    log4cplus.appender.APP.layout=log4cplus::PatternLayout
    log4cplus.appender.APP.layout.ConversionPattern=%D{%Y-%m-%d %H:%M:%S.%Q}|%-5p|%c[2]|%t|%m%n
    log4cplus.appender.APP.filters.1=log4cplus::spi::LogLevelRangeFilter
    log4cplus.appender.APP.filters.1.LogLevelMin=TRACE
    log4cplus.appender.APP.filters.1.LogLevelMax=FATAL


    #支持只写入同一个 logger 下的指定文件
    log4cplus.appender.APP_DAILY=log4cplus::DailyRollingFileAppender
    log4cplus.appender.APP_DAILY.File=./logout/app_msgs_d.log
    #MONTHLY,WEEKLY,DAILY,TWICE_DAILY,HOURLY,MINUTELY
    log4cplus.appender.APP_DAILY.Schedule=MINUTELY
    log4cplus.appender.APP_DAILY.DatePattern='.'yyyy-MM-dd
    log4cplus.appender.APP_DAILY.ImmediateFlush=false
    log4cplus.appender.APP_DAILY.MaxBackupIndex=3
    log4cplus.appender.APP_DAILY.layout=log4cplus::PatternLayout
    log4cplus.appender.APP_DAILY.layout.ConversionPattern==%D{%Y-%m-%d %H:%M:%S.%Q}|%-5p|%c[2]|%t|%m%n
    log4cplus.appender.APP_DAILY.filters.1=log4cplus::spi::LogLevelRangeFilter
    log4cplus.appender.APP_DAILY.filters.1.LogLevelMin=TARCE
    log4cplus.appender.APP_DAILY.filters.1.LogLevelMax=FATAL


    #支持只写入同一个 logger 下的指定文件
    log4cplus.appender.SYS=log4cplus::RollingFileAppender
    log4cplus.appender.SYS.File=./logout/sys_msgs.log
    log4cplus.appender.SYS.MaxFileSize=1MB
    log4cplus.appender.SYS.MaxBackupIndex=3
    log4cplus.appender.SYS.ImmediateFlush=false
    log4cplus.appender.SYS.layout=log4cplus::PatternLayout
    log4cplus.appender.SYS.layout.ConversionPattern=%D{%Y-%m-%d %H:%M:%S.%Q}|%-5p|%c[2]|%t|%m%n
    log4cplus.appender.SYS.filters.1=log4cplus::spi::LogLevelRangeFilter
    log4cplus.appender.SYS.filters.1.LogLevelMin=TRACE
    log4cplus.appender.SYS.filters.1.LogLevelMax=FATAL

    #支持只写入同一个 logger 下的指定文件
    log4cplus.appender.ACC=log4cplus::RollingFileAppender
    log4cplus.appender.ACC.File=./logout/acc_msgs.log
    log4cplus.appender.ACC.MaxFileSize=1MB
    log4cplus.appender.ACC.MaxBackupIndex=3
    log4cplus.appender.ACC.ImmediateFlush=false
    log4cplus.appender.ACC.layout=log4cplus::PatternLayout
    log4cplus.appender.ACC.layout.ConversionPattern=%D{%Y-%m-%d %H:%M:%S.%Q}|%-5p|%c[2]|%t|%m%n
    log4cplus.appender.ACC.filters.1=log4cplus::spi::LogLevelRangeFilter
    log4cplus.appender.ACC.filters.1.LogLevelMin=TRACE
    log4cplus.appender.ACC.filters.1.LogLevelMax=FATAL

    3.4. 代码实现
    此处略去。

     

     

     

    展开全文
  • logback 日志输出格式

    千次阅读 2019-09-24 10:36:13
    【前言】 日志对一个系统的重要性不言而喻;日志通常是在排查问题时给人看,一个友好的...下面为大家共享一下通过设置logback日志输出格式,打印出令人欣喜的日志样式。 【搞一下日志格式】 一、未指定日志格...
  • 一般日志规范

    千次阅读 2016-12-02 18:42:20
    后台服务日志输出规范  在后台服务中添加程序日志记录可以跟踪代码运行时轨迹,作为日后审计的依据;并且担当集成开发环境中的调试器的作用,向文件打印代码的调试信息;同时规划化输出的日志文件,便于和其他...
  • 后台服务日志(log4cplus)输出规范

    千次阅读 2014-11-13 20:30:12
    同时规划化输出日志文件,便于和其他相关人员交流分析使用。本规定C++ 后台服务项目必须使用。 日志文件 日志文件按应用需求功能分为访问日志和应用日志和系统日志日志文件统一命名格式如下:服务名称.应用...
  • 服务端日志规范

    2019-06-10 22:46:44
    日志是表现当前程序运行的状态、记录之前程序运行轨迹定位问题来源的,当前的测试及生产环境中,如果没有稳定日志输出,是很让开发者提心吊胆的,但是如果有太多杂乱又无意义的日志也是令人伤神。 当程序出现问题...
  • 日志打印规范

    2020-11-28 13:31:55
    文章目录打印日志的目的日志级别ERRORWARNINFODEBUG如何打印日志打印日志的位置打印输出哪些内容告警告警分级谁来处理告警拾遗空指针异常入参校验分布式链路追踪 灵魂之问:撸了那么多年代码,你真的会打日志吗? ...
  • Android日志输出

    千次阅读 2011-12-08 22:16:44
    在我们学习java的时候,我们可以在控制台随意的输出自定义的信息,并且编译器也会在控制台输出程序的运行状况,和错误的显示,但是在android的编写中...首先在你的window中得show View里选择Lagcot,这就是日志输出的界
  • 日志格式规范

    万次阅读 2018-05-23 19:39:47
    1 简介 在程序中写日志是一件非常重要,但是...开发人员应在一开始就养成良好的日志撰写习惯,并且应在实际的开发工作中为写日志预留足够的时间。 1.1 日志的作用 一般程序日志出自下面几个方面的需求: 1. 记...
  • 不定时出现(很难复现)今天的日志输出到了昨天的日志文件中,比如 今天是2018-11-27日,默认的日志输出文件是default.log, 会出现日志打印到了default.log.2018-11-26 然而 default.log却只有当天进行diamond推送...
  • 业务系统日志记录规范总结

    千次阅读 2019-08-28 16:01:09
    业务系统日志记录规范 注意 应用中应该充满了日志记录信息,日志甚至比逻辑代码还要多; 集成 seluth ,开启消息链路;不开启日志上传,不集成 zipkin; 应该避免日志记录过程中出现异常,比如 log.debug(requst...
  • 微服务日志输出如何处理?

    千次阅读 2020-12-11 17:31:09
    基于控制层的拦截器实现,定义LogFilter实现日志输出。微服务之间请求的全局id通过header传递,使用HttpServlet的装饰类进行扩展header的设置。源码如下: public class LogFilter implements Filter { ...
  • 自定义日志输出类log4j

    千次阅读 2017-12-06 13:39:08
    以下是我自己写的一个日志类,写这个类的初衷是为了规范项目组各个组员的日志输出格式规范,为以后日志查看分析提供方便,在代码生成器里加入这个日志类的引用,这样就可以很好的避免组员自己直接调用原生的日志框架...
  • java 日志打印规范

    千次阅读 2019-08-16 11:43:00
    确保日志是按事件顺序输出 【推荐】最好能打印调用方信息,比如访问者ip等信息 日志文件要可以方便使用grep语句查看 日志文件归档:需要告知运维归档 日志预警,通过ES实现 对于无法预知的异常,一定要打印堆栈:...
  • 业务知识——Logger日志打印规范

    千次阅读 2018-05-17 22:59:16
    初期,我们的系统比较简单,在这个过程中,加上大家平时都不注意,所以Logger日志一直是打印的随心所欲,什么是随心所欲的,就是大家想在哪里打日志就在哪里打印日志,想输出什么就输出什么,毫无规范可言,在系统的...
  • 应用日志记录规范

    千次阅读 2016-12-31 21:47:27
    一、日志分类 1、按等级分类 1)TRACE级、DEBUG级:理论上“不属于错误”,只是打印一些状态、提示信息,以便开发过程中观察,开发完成、正式上线后,要把它们都屏蔽掉。 2)INFO级: 理论上”不属于错误”...
  • 1-日志平台-日志规范

    千次阅读 2021-05-17 20:46:22
    日志规范: 流程 要做的事情 日志规范 固定字段定义 日志格式 日志采集 落盘规则 滚动策略 采集方法 日志传输 消息队列 消费方式 Topic规范 保存时间 日志切分 采样 过滤 ...
  • Java基础学习总结(146)——开发人员日志实践规范

    千次阅读 多人点赞 2019-06-17 15:58:43
    一、日志规范 日志作用: 1、日常排查问题(基本作用),快速定位问题的根源 2、分析日志,构建常见问题排查平台 3、报表输出(日活、周活) 4、追踪程序执行的过程,追踪数据的变化: a)在系统启动或初始化时...
  • error 日志规范

    2018-02-28 17:09:49
    基于 日志服务使用规范 ,需要对 error 级别的日志做更明确的规范,以方便 监控系统 和 error日志快速收集工具 分析和使用。解决方案正常日志默认最高使用warn级别,只有严格匹配error条件的才可使用error级别...
  • iOS中 加强日志输出 开发技术总结

    千次阅读 2015-12-03 08:36:17
    iOS - 将控制台Log日志转为输出为文本文件 1.在AppDelegate.m中创建函数实现以下代码块: - (void)redirectNSlogToDocumentFolder { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,081
精华内容 33,232
关键字:

日志输出规范