zoukankan      html  css  js  c++  java
  • 在单进程单线程或单进程多线程下实现log4cplus写日志并按大小切割

    基于脚本配置来过滤log信息
    除了通过程序实现对log环境的配置之外。log4cplus通过PropertyConfigurator类实现了基于脚本配置的功能。通过
    脚本能够完毕对logger、appender和layout的配置。因此能够解决如何输出,输出到哪里的问题。我将在全文的最后
    一部分中提到多线程环境中怎样利用脚本配置来配合实现性能測试。本节将重点介绍基脚本实现过滤log信息的功能。

    首先简介一下脚本的语法规则:
    包含Appender的配置语法和logger的配置语法。当中:

    1.Appender 的配置语法:
    1.1 设置名称:
    /*设置方法*/log4cplus.appender.appenderName=fully.qualified.name.of.appender.class
    比如(列举了全部可能的Appender,当中SocketAppender这里没有使用):
    log4cplus.appender.append_1=log4cplus::ConsoleAppender
    log4cplus.appender.append_2=log4cplus::FileAppender
    log4cplus.appender.append_3=log4cplus::RollingFileAppender
    log4cplus.appender.append_4=log4cplus::DailyRollingFileAppender
    log4cplus.appender.append_4=log4cplus::SocketAppender

    1.2. 设置Filter:
    包含选择过滤器和设置过滤条件。可选择的过滤器包含:LogLevelMatchFilter、LogLevelRangeFilter、和StringMatchFilter:
    对LogLevelMatchFilter来说,过滤条件包含LogLevelToMatch和AcceptOnMatch(true|false), 仅仅有当log信息的LogLevel值与LogLevelToMatch同样,且AcceptOnMatch为true时才会匹配。


    LogLevelRangeFilter来说,过滤条件包含LogLevelMin、LogLevelMax和AcceptOnMatch,仅仅有当log信息的LogLevel在LogLevelMin、LogLevelMax之间同一时候AcceptOnMatch为true时才会匹配。


    对StringMatchFilter来说,过滤条件包含StringToMatch和AcceptOnMatch。仅仅有当log信息的LogLevel值与StringToMatch相应的LogLevel值与同样。 且AcceptOnMatch为true时会匹配。
        过滤条件处理机制类似于IPTABLE的Responsibility chain,(即先deny、再allow)只是运行顺序刚好相反。后写的条件会被先运行,比方:
    log4cplus.appender.append_1.filters.1=log4cplus::spi::LogLevelMatchFilterlog4cplus.appender.append_1.filters.1.LogLevelToMatch=TRACElog4cplus.appender.append_1.filters.1.AcceptOnMatch=true#log4cplus.appender.append_1.filters.2=log4cplus::spi::DenyAllFilter
    会首先运行filters.2的过滤条件。关闭全部过滤器。然后运行filters.1,仅匹配TRACE信息。

    1.3. 设置Layout
    能够选择不设置、TTCCLayout、或PatternLayout
    假设不设置。会输出简单格式的log信息。
    设置TTCCLayout例如以下所看到的:log4cplus.appender.ALL_MSGS.layout=log4cplus::TTCCLayout
    设置PatternLayout例如以下所看到的:log4cplus.appender.append_1.layout=log4cplus::PatternLayoutlog4cplus.appender.append_1.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S,%Q} [%t] %-5p - %m%n

    2.logger的配置语法
    同一个 logger 下的 Appender 会输出内容到该logger 下的全部文件,能够通过 LogLevel 等措施拉过滤。
    以下演示了建立不同logger,隔离输出内容的方法。
    包含rootLogger和non-root logger。
    对于rootLogger来说:log4cplus.rootLogger=[LogLevel], appenderName, appenderName, ...
    对于non-root logger来说:log4cplus.logger.logger_name=[LogLevel|INHERITED], appenderName, appenderName, ...
        脚本方式使用起来很easy,仅仅要首先载入配置就可以(urconfig.properties是自行定义的配置文件):
    PropertyConfigurator::doConfigure("urconfig.properties");以下我们通过样例体会一下log4cplus强大的基于脚本过滤log信息的功能。

    以下建立的是 VS2012 的WIN32控制台project log4cplus_test,用来演示日志输出,
    project须要注意两点:
    1. 使用的是最新的 log4cplus-1.1.1 版本号,链接的是当中的静态库 log4cplusSD.lib
    2. project须要设置 字符集为 "使用多字节字符集",设置方法是VS2012 菜单:
    项目->log4cplus_test属性->配置属性->字符集

    以下是配置文件 urconfig.properties 的内容,使用配置来控制log4cplus 的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|%F:%L|%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|%F:%L|%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|%F:%L|%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|%F:%L|%m%n
    log4cplus.appender.ACC.filters.1=log4cplus::spi::LogLevelRangeFilter
    log4cplus.appender.ACC.filters.1.LogLevelMin=TRACE
    log4cplus.appender.ACC.filters.1.LogLevelMax=FATAL

  • 相关阅读:
    深入理解原型
    这次彻底理解了Object这个属性
    彻底理解了call()方法,apply()方法和bind()方法
    理解JavaScript中函数方法
    js常用的数组方法
    H5的canvas绘图技术
    深度理解DOM拷贝clone()
    深入理解面向对象中的原始类型和引用类型
    深入理解JavaScript的this指向问题
    .NET/ASP.NET Routing路由(深入解析路由系统架构原理)
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6769035.html
Copyright © 2011-2022 走看看