基于脚本配置来过滤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

在单进程单线程或单进程多线程下实现log4cplus写日志并按大小切割的更多相关文章

  1. c# 多线程使用队列顺序写日志的类 (需要再优化)

    using System; using System.Collections.Generic; using System.Threading; public class LogManager { // ...

  2. web服务-2、四种方法实现并发服务器-多线程,多进程,协程,(单进程-单线程-非堵塞)

    知识点:1.使用多线程,多进程,协程完成web并发服务器 2.单进程-单线程-非堵塞也可以实现并发服务器 1.多进程和协程的代码在下面注释掉的部分,我把三种写在一起了 import socket im ...

  3. Redis为什么使用单进程单线程方式也这么快

    [转] http://www.syyong.com/db/Redis-why-the-use-of-single-process-and-single-threaded-way-so-fast.htm ...

  4. Redis使用单进程单线程方式的优缺点分析

    [转] http://www.syyong.com/db/Redis-why-the-use-of-single-process-and-single-threaded-way-so-fast.htm ...

  5. Redis 为什么使用单进程单线程方式也这么快(转载)

    Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写.官方提供的数据是可以达到100000+的 qps.这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 ...

  6. Redis为什么使用单进程单线程方式

    Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写.官方提供的数据是可以达到100000+的qps.这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached ...

  7. Redis 为什么使用单进程单线程方式也这么快

    Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写.官方提供的数据是可以达到100000+的 qps.这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 ...

  8. Redis为什么单进程单线程也那么快

    [转] http://www.syyong.com/db/Redis-why-the-use-of-single-process-and-single-threaded-way-so-fast.htm ...

  9. Redis 是单进程单线程的?

    Redis 是单进程单线程的,redis 利用队列技术将并发访问变为串行访问,消 除了传统数据库串行控制的开销.

随机推荐

  1. react native项目增加devtools工具

    第一步:安装react devtools工具 在当前项目中打开命令行,添加react devtools工具,因为运行的工具有九十几M,下载时需要时间,请耐心等待 yarn add react-devt ...

  2. Exception异常处理机制

    为什么要自定义自己的Exception ,Java Exception机制与传统的C语言的异常处理机制有什么不同,这种Exception机制的意义在什么地方?接下来咱就来和你一起探讨Exception ...

  3. EOJ Monthly 2018.8 D. Delivery Service-树上差分(边权/边覆盖)(边权转点权)(模板题)

    D. Delivery Service 单测试点时限: 2.5 秒 内存限制: 512 MB EOJ Delivery Service Company handles a massive amount ...

  4. POJ1845 Sumdiv [数论,逆元]

    题目传送门 Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 26041   Accepted: 6430 Des ...

  5. 关于 Unity WebGL 的探索(一)

    到今天为止,项目已经上线一个多月了,目前稳定运行,各种 bug 也是有的.至少得到了苹果的两次推荐和 TapTap 一次首页推荐,也算是结项后第一时间对我们项目的一个肯定. 出于各种各样的可描述和不可 ...

  6. 洛谷——P2126 Mzc家中的男家丁

    P2126 Mzc家中的男家丁 题目背景 mzc与djn的…还没有众人皆知,所以我们要来宣传一下. 题目描述 mzc家很有钱(开玩笑),他家有n个男家丁,现在mzc要将她们全都聚集起来(干什么就不知道 ...

  7. 使用Nginx的配置对cc攻击进行简单防御

    ddos攻击:分布式拒绝服务攻击,就是利用大量肉鸡或伪造IP,发起大量的服务器请求,最后导致服务器瘫痪的攻击. cc攻击:类似于ddos攻击,不过它的特点是主要是发起大量页面请求,所以流量不大,但是却 ...

  8. [BZOJ1305][CQOI2009]跳舞(网络流)

    1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 3944  Solved: 1692[Submit][St ...

  9. AtCoder - 4162 Independence

    Problem Statement In the State of Takahashi in AtCoderian Federation, there are N cities, numbered 1 ...

  10. 【SAM】codevs3160-最长公共子串

    [题目大意] 求两个字符串的最长公共子串. [思路] 对第一个字符串建立后缀自动机,第二个字符串去匹配.cnt记录当前最长公共子串的长度,而ret记录答案. p代表位置指针,初始在rt位置. 对于第二 ...