• 2、log4cxx的配置和使用


    一、log4cxx配置文件的组成部分

    1.优先级

    Logger的语法:               

    log4j.rootLogger = [ level ] , appenderName, appenderName, …   

      其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。

      Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。比如这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 

      appenderName名字任意,用来标示日志信息输出到哪里,可以同时指定多个。 

    2.输出目的地

    Appender的语法:               

    1 log4j.appender.appenderName = fully.qualified.name.of.appender.class         
    2 log4j.appender.appenderName.option1 = value1            
    3 4 log4j.appender.appenderName.option = valueN 

    其中,Log4j提供的appender有以下几种:  

    1 org.apache.log4j.ConsoleAppender 控制台            
    2 org.apache.log4j.FileAppender 文件             
    3 org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件          
    4 org.apache.log4j.RollingFileAppender 文件大小到达指定尺寸的时候产生一个新的文件        
    5 org.apache.log4j.WriterAppender 将日志信息以流格式发送到任意指定的地方

    3.输出格式

    1 log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class        
    2 log4j.appender.appenderName.layout.option1 = value1           
    3 4 log4j.appender.appenderName.layout.option = valueN     

    Log4j提供的Layout有以下几种:            

    1 org.apache.log4j.HTMLLayout 以HTML表格形式布局           
    2 org.apache.log4j.PatternLayout 可以灵活地指定布局模式           
    3 org.apache.log4j.SimpleLayout 包含日志信息的级别和信息字符串          
    4 org.apache.log4j.TTCCLayout 包含日志产生的时间、线程、类别等等信息     

    Log4j采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

    1 %m 输出代码中指定的消息              
    2 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL           
    3 %r 输出自应用启动到输出该log信息耗费的毫秒数            
    4 %c 输出所属的类目,通常就是所在类的全名            
    5 %t 输出产生该日志事件的线程名             
    6 %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”          
    7 %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:
        %d{yyy MMM dd HH:mm:ss,SSS},输出2008年11月14日 15:16:17,890 8 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

    二、配置实例

    log4cxx.properties log4cxx配置文件

     1 #设置日志level为INFO,fa为文件输出对象,ca为控制台输出对象
     2 log4j.rootLogger=INFO,fa,ca
     3 #设置日志对象
     4 log4j.logger.console=INFO,ca
     5 log4j.logger.file=INFO,fa
     6 #不向默认对象(rootLogger)输出,因此信息只能输出到文件
     7 log4j.additivity.file=false
     8 
     9 #**************************  
    10 #控制台,同时也会输出到默认输出对象  
    11 #**************************
    12 log4j.appender.ca=org.apache.log4j.ConsoleAppender  
    13 log4j.appender.ca.layout=org.apache.log4j.PatternLayout  
    14 log4j.appender.ca.layout.ConversionPattern=[%-5p][%d] : %m%n 
    15 
    16 #**************************  
    17 #设置日志文件信息,比如大小,时间格式
    18 #**************************  
    19 log4j.appender.fa=org.apache.log4j.DailyRollingFileAppender  
    20 log4j.appender.fa.File=./log/today.log  
    21 log4j.appender.fa.Append=fasle  
    22 log4j.appender.fa.MaxFileSize=10MB  
    23 log4j.appender.fa.MaxBackupIndex=1000  
    24 log4j.appender.fa.DatePattern=yyyy-MM-dd  
    25 log4j.appender.fa.layout=org.apache.log4j.PatternLayout  
    26 log4j.appender.fa.layout.ConversionPattern=[%-5p][%d] : %m%n

      上面是一个常规配置,总共有两个输出对象fa和ca,分别表示输出到文件和输出到控制台。我又配置了三个代码中需要的对象,分别是:

      (1)rootLogger  默认对象,引用了fa和ca,即输出到控制台和文件;

      (2)file 只引用到fa,输出到文件,但file多了一项配置log4j.additivity.file=false,这是不向默认对象(rootLogger)输出,因此信息只能输出到文件;

      (3)console 只引用到ca,输出到控制台,但additivity的默认值是true,也就是信息除了输出到ca外,还会输出到rootLogger,因此控制台会有两次的信息输出和一次的文件输出。

    三、使用实例

    下面是一个使用log4CXX的实例main.cpp

     1 #include <log4cxx/logger.h>
     2 #include <log4cxx/basicconfigurator.h>
     3 #include <log4cxx/helpers/exception.h>
     4 #include <log4cxx/propertyconfigurator.h>
     5 
     6 using namespace log4cxx;
     7 using namespace log4cxx::helpers;
     8 
     9 LoggerPtr logger_file(Logger::getLogger("file"));//获取配置文件中file对应的句柄
    10 LoggerPtr logger_console(Logger::getLogger("console"));//获取配置文件中console对应的句柄
    11 
    12 int main(){
    13     PropertyConfigurator::configure("./log4cxx.properties");//加载配置文件,下面会细说
    14     LOG4CXX_INFO(logger_file,"This is a test");
    15     LOG4CXX_INFO(logger_console, "hello log4cxx");   
    16   
    17     return 0;
    18 }

    编译执行:

    1 g++ main.cpp -o main -llog4cxx
    2 ./mai

     执行结果:

    这是在终端显示的内容,同时在当前目录下会产生一个log文件夹,,里面会有一个taday.log,cat一下看一下输出:

    到这里log4cxx已经完成了初步的配置和使用。

  • 相关阅读:
    第 五 课 golang语言变量
    【托业】【新托业TOEIC新题型真题】学习笔记9-题库七+八--P4-5
    【托业】【语法题】笔记
    【托业】【新托业TOEIC新题型真题】学习笔记8-题库五->P7
    【托业】【金山词霸】1-42待巩固词汇(包含首次背诵措词)
    【托业】【新托业TOEIC新题型真题】学习笔记7-题库二->P1~4
    【托业】【新托业TOEIC新题型真题】学习笔记5-题库二->P7
    【托业】【新托业TOEIC新题型真题】学习笔记4-题库一->P7
    【托业】【新托业TOEIC新题型真题】学习笔记3-题库二->P5-6
    【托业】【新托业TOEIC新题型真题】学习笔记2-题库一-->P5-6
  • 原文地址:https://www.cnblogs.com/Long-w/p/9577031.html
Copyright © 2020-2023  润新知