本文主要从log4cxx级别、layout、格式化、命名规则、Filter几个方面介绍。
 
一、log4cxx命名规则
        Logger由一个String类的名字识别,logger的名字是大小写敏感的,且名字之间具有继承的关系,子名有父名作为前缀,用点号.分隔。如:x.y是x.y.z的父亲。根logger (root logger)是所有logger的祖先, 它具有如下属性:1) 它总是存在的;2) 它不可以通过名字获得。通过调用public static Logger Logger.getRootLogger()获得root logger;通过调用public static Logger Logger.getLogger(String name)或者public static Logger Logger.getLogger(Class clazz)获得或者创建)一个named logger。后者相当于调用Logger.getLogger(clazz.getName())。在某对象中,用该对象所属的类为参数,调用Logger.getLogger(Class clazz)以获得logger被认为是目前 所知的最理智的命名logger的方法。
 
 
二、log4cxx Log Level级别介绍
 
     每个logger都被分配了一个日志级别 (log level),用来控制日志信息的输出。未被分配level的 logger将继承它最近的父logger的level。每条输出到logger的日志请求(logging request)也都有一个 level,如果该request的level大于等于该logger的level,则该request将被处理(称为enabled);否则该 request将被忽略。故可得知:1、logger的level越低,表示该logger越详细 2、logging request的 level越高,表示该logging request越优先输出 3、如果没有设置日志记录器(Logger)的级别,那么它将 会继承最近的祖先的级别。因此,如果在包com.foo.bar中创建一个日志记录器(Logger)并且没有设置级 别,那它将会继承在包com.foo中创建的日志记录器(Logger)的级别。如果在com.foo中没有创建日志记录 器(Logger)的话,那么在com.foo.bar中创建的日志记录器(Logger)将继承root 日志记录器(Logger) 的级别,root日志记录器(Logger)经常被实例化而可用,它的级别为DEBUG。
Level类中预定义了五个level,它们的大小关系如下:Level.ALL < Level.DEBUG < Level.INFO < Level.WARN < Level.ERROR < Level.FATAL < Level.OFF
 
三、log4cxx(log4j) Log layout介绍
 
org.apache.log4j.HTMLLayout(以HTML表格形式布局), 
org.apache.log4j.PatternLayout(可以灵活地指定布局模式), 
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), 
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
 
 
四、log4cxx Log 格式化信息介绍
 
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: 
%m 输出代码中指定的消息 
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名 
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd
HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 %l 输出日志事件的发生位置,包括类目名
、发生的线程,以及在代码中的行数。
 
五、log4cxx Log appender种类介绍
 
Log4cXX提供的appender种类:
org.apache.log4j.ConsoleAppender 控制台
org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件
org.apache.log4j.FileAppender 文件org.apache.log4j.RollingFileAppender 文件大小达到指定尺寸的
时候产生一个新的文件
 
六、log4cxx Log Filter介绍
 
包括选择过滤器和设置过滤条件,可选择的过滤器包括:LogLevelMatchFilter、LogLevelRangeFilter、和 StringMatchFilter:
1、对LogLevelMatchFilter来说,过滤条件包括LogLevelToMatch和AcceptOnMatch(true|false), 只有 当log信息的LogLevel值与LogLevelToMatch相同,且AcceptOnMatch为true时才会匹配。
2、对LogLevelRangeFilter来说,过滤条件包括LogLevelMin、LogLevelMax和AcceptOnMatch,只有当log信 息的LogLevel在LogLevelMin、LogLevelMax之间同时AcceptOnMatch为true时才会匹配。
3、对StringMatchFilter来说,过滤条件包括StringToMatch和AcceptOnMatch,只有当log信息的LogLevel 值与StringToMatch对应的LogLevel值与相同, 且AcceptOnMatch为true时会匹配。
 
七、log4cxx additivity属性介绍
 
它是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输 出。若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输 出。
 
 
八、log4cxx中XML文件范例
 
 
九、log4cxx编译
 
 
 
 

C++日志系统log4cxx使用总结的更多相关文章

  1. C++ 高性能无锁日志系统

    服务器编程中,日志系统需要满足几个条件 .高效,日志系统不应占用太多资源 .简洁,为了一个简单的日志功能引入大量第三方代码未必值得 .线程安全,服务器中各个线程都能同时写出日志 .轮替,服务器不出故障 ...

  2. Atitit.日志系统slf4j的使用

    Atitit.日志系统slf4j的使用 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar ...

  3. Android源码——Logger日志系统

    Android的Logger日志系统是基于内核中的Logger日志驱动程序实现的. 日志保存在内核空间中 缓冲区保存日志   分类方法:日志的类型  +   日志的输出量   日志类型:   main ...

  4. 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案

    一.背景 最近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见 ...

  5. 日志系统实战(三)-分布式跟踪的Net实现

    介绍 在大型系统开发调试中,跨系统之间联调开始变得不好使了.莫名其妙一个错误爆出来了,日志虽然有记录,但到底是哪里出问题了呢? 是Ios端参数传的不对?还是A系统或B系统提供的接口导致?相信有不少人遇 ...

  6. 日志系统实战(一)—AOP静态注入

    背景 近期在写日志系统,需要在运行时在函数内注入日志记录,并附带函数信息,这时就想到用Aop注入的方式. AOP分动态注入和静态注入两种注入的方式. 动态注入方式 利用Remoting的Context ...

  7. Android性能优化之UncaughtExceptionHandler定制自己的错误日志系统

    前言: 每当我们app测试的时候,测试人员总是对我们说这里崩溃了,那里挂掉了!我们只能默默接受,然后尝试着重现bug,更可悲的是有时候bug很难复现,为了解决这种现状所以我们要尝试这建立一个自己的bu ...

  8. [Asp.net 5] Logging-其他日志系统的实现

    Microsoft.Framework.Logging.NLog 使用Nlog扩展日志系统:按照我们上节说的,对于扩展的日志系统都要实现俩个接口ILogger.ILoggerProvider.所以在当 ...

  9. 【转载】scribe、chukwa、kafka、flume日志系统对比

    原文地址:http://www.ttlsa.com/log-system/scribe-chukwa-kafka-flume-log-system-contrast/ 1. 背景介绍许多公司的平台每天 ...

随机推荐

  1. 2018-2019 20165319 网络对抗 Exp4 恶意代码分析

    基础问题回答 1. 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控 答:1.使用Windows自带的schta ...

  2. SpringBoot与日志框架2(日志内斗)

    一.SpringBoot如何引入slf4j+logback框架的呢? 在POM文件中 <dependency> <groupId>org.springframework.boo ...

  3. JAVA递归生成树形菜单

    递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级 ...

  4. ISP PIPLINE (九_2) Denoise 之 time domain denoise

    时域噪声是空域噪声在时间上波动的一种描述. 1.多帧平均去噪法 1.1 理论: 1.2 帧数增加,噪声减小: 1.3 IIR滤波器的效果 2.1中的两种方法在拍摄视频的时候,如果有运动物体,则会出现拖 ...

  5. 动态DP之全局平衡二叉树

    目录 前置知识 全局平衡二叉树 大致介绍 建图过程 修改过程 询问过程 时间复杂度的证明 板题 前置知识 在学习如何使用全局平衡二叉树之前,你首先要知道如何使用树链剖分解决动态DP问题.这里仅做一个简 ...

  6. 关于各种工具输入参数中"-"和"--"

    关于各种工具输入参数中"-"和"--" 写个随笔记录下来 一直搞不懂,为啥在使用很多工具的时候,他的参数要加的"-"数量不一样呢? 如果输入 ...

  7. AGC001F - Wide Swap

    Description 给你一个长度为$n$的排列,每次可以交换$|i-j|\geq K$并且$|a_i-a_j|=1$的数对,问你经过若干次变换后最小字典序的排列是啥 Solution 对$a$做一 ...

  8. PHP常用日期加减计算方法实例

    PHP常用日期加减计算方法实例 实例总结了PHP常用日期加减计算方法.分享给大家供大家参考,具体如下: PHP 标准的日期格式 date("Y-m-d H:i:s"); PHP 简 ...

  9. Linux正则表达式练习

    练习一 1.生成30位的随机口令 [root@centos7 ~]#cat /dev/urandom | tr -dc "[:alnum:]" | head -c30 RJL5qc ...

  10. PyCharm下载及使用

    PyCharm教育版是一款能够对你编写Python程序的工作有所帮助的免费编译器. PyCharm-community下载链接:https://pan.baidu.com/s/1Hwd_TOVA3en ...