Log4cpp配置文件及动态调整日志级别的方法

一、log4cpp概述

Log4cpp是一个开源的C++类库,它提供了C++程序中使用日志和跟踪调试的功能,它的优点如下:

    • 提供应用程序运行上下文,方便跟踪调试;
    • 可扩展的、多种方式记录日志,包括命令行、文件、回卷文件、内存、syslog服务器、Win事件日志等;
    • 可以动态控制日志记录级别,在效率和功能中进行调整;
    • 所有配置可以通过配置文件进行动态调整;
    • 多语言支持,包括Java(log4j),C++(log4cpp、log4cplus),C(log4c),python(log4p)等;

二、原理

Log4cpp有三个主要的组件:日志类别(Category)、输出源(Appender)和布局(Layout)。这三种类型的组件一起工作使得系统可以根据信息的类型和级别记录它们,并且在运行时控制这些信息的输出格式和位置。

三个组件的介绍:

1)日志类别(Category)含义是:如果配置文件中设置的级别是DEBUG,则任意的log都能打印出来;但如果配置的级别是ERROR,则只有高于ERROR优先级的日志才可以打印出来。

日志的常用优先级:DEBUG < INFO < WARN < ERROR < FATAL

2)输出源(Appender)用来输出日志(被layout格式化后)到一些设备上,比如文件、命令行、内存等。也可以定义自己的appender输出日志信息到别的设备上。log4cpp提供的appender如下: FileAppender  输出到文件 RollingFileAppender 输出到回卷文件,即当文件到达某个大小后回卷 ConsoleAppender 输出到控制台

3)布局(Layout):显示样式PatternLayout表示让用户根据类似于C语言printf函数的转换模式来指定输出格式

三个组件之间的关系:

  • Category和Appender的关系是:多个Appender可以附加到一个Category上,这样一个日志消息可以同时输出到多个设备上。
  • Appender和Layout的关系是:Layout附加在Appender上,appender调用layout处理完日志消息后,记录到某个设备上。

三、配置文件log4cpp.conf

内容如下:

 1 #-------定义rootCategory的属性-------
 2
 3 #指定rootCategory的log优先级是ERROR,其Appenders有两个,分别是console,TESTAppender
 4 log4cpp.rootCategory=ERROR, console,TESTAppender
 5
 6 #-------定义console属性-------
 7
 8 #consoleAppender类型:控制台输出
 9 #下面这三条语句表示控制台输出的log输出的布局按照指定的格式;输出格式是:[%p] %d{%H:%M:%S.%l} (%c): %m%n
10 log4cpp.appender.console=ConsoleAppender
11 log4cpp.appender.console.layout=PatternLayout
12 log4cpp.appender.console.layout.ConversionPattern=[%p] %d{%H:%M:%S.%l} (%c): %m%n
13
14 #-------定义TESTAppender的属性-------
15
16 #RollingFileAppender类型:输出到回卷文件,即文件到达某个大小的时候产生一个新的文件
17 #下面的语句表示文件输出到指定的log文件,输出的布局按照指定的格式,输出的格式是:[%d{%Y-%m-%d %H:%M:%S.%l} - %p] (%c): %m%n
18 log4cpp.appender.TESTAppender=RollingFileAppender
19
20 #当日志文件到达maxFileSize大小时,将会自动滚动21 log4cpp.appender.TESTAppender.maxFileSize=400000
22
23 #maxBackupIndex指定可以产生的滚动文件的最大数
24 log4cpp.appender.TESTAppender.maxBackupIndex=3
25
26 #fileName指定信息输出到logs/TESTAppender.txt文件
27 log4cpp.appender.TESTAppender.fileName=logs/TESTAppender.txt
28
29 #PatternLayout 表示可以灵活指定布局模式
30 log4cpp.appender.TESTAppender.layout=PatternLayout
31
32 #append=true 信息追加到上面指定的日志文件中,false表示将信息覆盖指定文件内容
33 log4cpp.appender.TESTAppender.append=true
34 log4cpp.appender.TESTAppender.layout.ConversionPattern=[%d{%Y-%m-%d %H:%M:%S.%l} - %p] (%c): %m%n 

ConversionPattern的参数含义:

  • %d 输出日志时间点的日期或时间,可以在其后指定格式,如上%d{%Y-%m-%d %H:%M:%S.%l},输出类似:2017-02-14 09:25:00.953
  • %p 优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  • %c 输出日志信息所属的类目,通常就是所在类的全名
  • %m 输出log的具体信息
  • %n 回车换行

四、实际应用

在问题定位的过程中,有时由于设置的日志级别较高,打印出来的信息不够全面,因此需要通过修改配置文件来动态调整日志级别,即修改属性值log4cpp.rootCategory=ERROR 为 log4cpp.rootCategory=DEBUG 这样就可以看到最新的DEBUG级别以上的日志信息了。

时间: 2024-10-05 04:43:44

Log4cpp配置文件及动态调整日志级别的方法的相关文章

hadoop 动态设置调整日志级别

Hadoop急诊室的半小时:动态设置调整日志级别 技术 大数据蜗牛 2015.02.03 本文通过一个在实际工作中所遇到的线上问题来告诉广大数据从业者一条通俗有用的人生哲理:线上遇到这样的问题,千万要冷静,越是着急越容易出乱子!心急吃不了热豆腐. 十万火急 上周二,朋友公司的Hadoop集群服务不可用,从早上9点开始一直持续到12点.业务方催得比较急,希望尽快恢复,至少给个可以恢复的时间点.这种心情做过线上服务运维的同学应该都能理解.特别是在没有任何思路的情况下,就只能干着急! 症状了解 朋友联

SpringBoot系列十一:SpringBoot整合Restful架构(使用 RestTemplate 模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别)

1.概念:SpringBoot整合Restful架构 2.背景 Spring 与 Restful 整合才是微架构的核心,虽然在整个 SpringBoot(SpringCloud)之中提供有大量的服务方便整合,但是这些 整合都不如 Rest 重要,因为 Rest 是整个在微架构之中进行通讯的基础模式.那么对于 Rest 首先必须对其有一个最为核心的解释: 利用 JSON 实现数据的交互处理.而且 Spring 里面提供有一个非常强大的 RestTemplate 操作模版,利用此模版可以非常轻松的实

springboot动态修改日志级别+权限认证

1. springboot动态修改日志级别+权限认证 1.1. 需求 网上找到的动态修改日志级别的方式,基本都是没有权限验证的,或者特地关闭权限验证,但也没给出加上验证的解决方式 修改日志等级也是一个敏感操作,最好不能暴露地址直接修改,所以我研究了下,把权限验证加上了 1.2. 解决 1.2.1. pom 首先加上pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>

动态设置日志级别

设置包的日志等级 Level level = Level.toLevel(Level.DEBUG);Logger logger = LogManager.getLogger(“package”);logger.setLevel(level); 设置全局日志等级 Level level = Level.toLevel(Level.DEBUG); 动态设置日志级别

log4j2和logback动态修改日志级别工具类

工作中,有些场景需要动态修改线上日志记录器的打印日志级别, 本文的两个工具类使用的版本如下: ----------------logback--------------------- <dependency>   <groupId>ch.qos.logback</groupId>   <artifactId>logback-core</artifactId>   <version>1.1.8</version></d

设置Spark日志级别

编辑Spark中conf中配置文件log4j.properties 设置日志级别为WARN,即:log4j.rootCategory=WARN, console 原文地址:https://www.cnblogs.com/zhangtianyuan/p/8384246.html

Apollo配置中心动态刷新日志级别

Apollo配置中心动态刷新日志级别 添加次配置后,当在apollo上面调整日志级别不需要重启服务器,马上就能生效 /** * 结合apollo动态刷新日志级别 * @author: nj * @date: 2019/1/21:下午5:00 */ @Configuration public class LogListenerConfig { private static final Logger logger = LoggerFactory.getLogger(LoggerConfigurati

log4j动态日志级别调整

1. 针对root logger的设置 log4j.rootLogger=INFO, CONSOLELogger.getRootLogger().setLevel(org.apache.log4j.Level.DEBUG) 2. 针对Appender的Appender设置 log4j.appender.CONSOLE.Threshold=DEBUG((org.apache.log4j.ConsoleAppender)Logger.getRootLogger().getAppender("CONS

基于JMX动态配置Log4J日志级别

先来看比较low的修改日志级别的方式,在写程序里面. http://blog.gssxgss.me/java%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8A%A8%E6%80%81%E6%94%B9%E5%8F%98%E6%97%A5%E5%BF%97%E7%BA%A7%E5%88%AB/ 再来通过JMX的方法动态修改程序的日志级别. https://blog.csdn.net/z2007130205/article/details/23910431 package com.m