logger配置文件|log4jlogger写入哪个配置文件

1. Springboot配置logback

因为logback其他配置尚好理解,本文只说明比较少用,但是却起关键作用的两个子节点。1、依赖: 实际开发中我们不需要直接添加该依赖,你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,Spring Boot为我们提供了很多默认的日志配置,所以,只要将spring-boot-starter-logging作为依赖加入到当前应用的classpath,则“开箱即用”。 2、日记的等级 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL 3、配置 这里对日志框架的支持有两种配置方式,一般来讲我们倘若不是要较复杂的需求,可以直接在 application.yml 配置文件配置下即可: application.properties 或  application.yml (系统层面) 参考网站: https://www.cnblogs.com/nuccch/p/6221255.html logback-spring.xml                               (自定义文件方式) 参考网站: http://tengj.top/2017/04/05/springboot7/ 4、彩色打印 参考: https://my.oschina.net/360yg/blog/1810625 5、@Slf4j注解 安装lombok插件,在需要打印的类名上加上该注解即可 替代下面语句的编写 private Loggerlogger = LoggerFactory.getLogger(this.getClass()); 6、打印不出json的问题 不是打印不出而是正确的要加一个占位符 {},如下 log.info("hospital{}", JSON.toJSONString(hospitalEntity2)); 7、log存放文件路径定义 最关键的两个节点,你可以理解之前的property、appender嵌套property只是一些定义好的变量,真正定义方法怎么去运用这些变量是这两个节点所要做的。 1、子节点–<root> root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性,不区分大小写,默认是DEBUG。 可以包含零个或多个元素,标识这个appender将会添加到这个 loger (理解root为一个全局的loger)。 举例子: 上图这是我定义好的文件输出的appender节点,对应下图的<appender-ref>节点,ref对应<appender>的name属性,上面说到<root>节点好比一个方法,所以现在这个方法的意思是全局打印等级为INFO,而且四个<appender>变量都执行,即正常的控制台输出和warn、info、error的三个文件输出,可以到对应的控制台和日志文件里面看到的确有日志。反之倘若我们level定为Debug,或者去除name为“WARN”的<appender>则是输出Debug以上等级的日志,WARN.log日志文件也不会再有日志打印进去。 2、子节点–<loger> <loger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>,也就是只管辖指定的区域的日志输出规则。<loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。 注意:这里说的上级就是root节点 name :用来指定受此loger约束的某一个包或者具体的某一个类。 level :用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。 addtivity :是否向上级loger传递打印信息。默认是true。 举例子: 控制com..controller.LearnController类的日志打印,打印级别为“WARN”; additivity属性为false,表示此loger的打印信息不再向上级传递; 指定了名字为“console”的appender; 这时候执行com..controller.LearnController类的login方法时,先执行<logger name="com..controller.LearnController" level="WARN" additivity="false">, 将级别为“WARN”及大于“WARN”的日志信息交给此loger指定的名为“console”的appender处理,在控制台中打出日志,不再向上级root传递打印信息。 注意: 当然如果你把additivity=”false”改成additivity=”true”的话,就会打印两次,因为打印信息向上级传递,logger本身打印一次,root接到后又打印一次。 四、配合多环境 据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在 logback-spring.xml中使用 springProfile 节点来定义,方法如下:文件名称不是logback.xml,想使用spring扩展profile支持,要以logback-spring.xml命名可以启动服务的时候指定 profile (如不指定使用默认),如指定prod 的方式为: java -jar xxx.jar –spring.profiles.active=prod 关于多环境配置可以参考 Spring Boot干货系列:(二)配置文件解析

2. log4net配置文件解析

<log net>

<root>

<level value= ALL />

<appender ref ref= rollingFile />

</root>

<appender name= rollingFile type= log net Appender RollingFileAppender log net >

<param name= File value= log txt />

<param name= AppendToFile value= false />

<param name= RollingStyle value= Date />

<param name= DatePattern value= yyyy MM dd />

<param name= StaticLogFileName value= true />

<layout type= log net Layout PatternLayout log net >

<param name= ConversionPattern value= %d [%t] % p %c %m%n />

<param name= Header value= header />

<param name= Footer value= footer />

</layout>

</appender>

<appender name= consoleApp type= log net Appender ConsoleAppender log net >

<layout type= log net Layout PatternLayout log net >

<param name= ConversionPattern value= %d [%t] % p %c %m%n />

</layout>

</appender>

<logger name= Log NetTest LogTest >

<level value= DEBUG />

<appender ref ref= rollingFile />

<appender ref ref= coloredConsoleApp />

<appender ref ref= SystemEvent />

</logger>

</log net>

log net配置节的XSD层次如下

<log net>

<root><level /><appender ref ref= /></root>

<appender name= type= Appender的完全限定类名 >

<param name= value= />

<layout type= log net Layout PatternLayout log net >

<param name= value= />

</layout>

</appender>

<logger>

<level value= />

<appender ref ref= />

</logger>

log net是log net配置节的根标记

root标记定义一个根级别的记录者 log net的记录者采用层级组织的 每一个LOGGER(ROOT也是一个LOGGER 只不过 他是祖先而已 别的方面 跟其他LOGGER一样) 都可以定义Level

level定义记录的日志级别 就是说 你要记录哪个级别以上的日志 级别由高往低依次是:

None

Fatal

ERROR

WARN

DEBUG

INFO

ALL

级别的定义要注意 如果你定义DEBUG 那么低于DEBUG级别以下的信息 将不会记入日志 啥意思呢?就是说 就算你在程序里 用()来写入一个日志信息 可是你在配置中指定level为DEBUG 由于INFO级别低于DEBUG 所以 不会被记入日志 这样的处理非常灵活

Logger还有一个配置就是appender ref了 ref是参照的意思 log net的架构非常有意思 可扩展性非常高非常值得借鉴 他分为四个要素:

logger

appender

layout

filter

logger是负责日志的记录者

appender提供记录的介质

layout负责把记入的内容格式化

filter负责把内容进行筛选

可以说 整个过程就是一个日志流水线 每个成员负责其中的一个环节

logger发出记录信息 appender接到信息 根据内部的layout配置对记录信息格式化 根据filter决定此信息是否被过滤掉 最后 将其序列化

因此 logger的appender ref就是定义说 LOGGER要找谁去将内容写入磁盘 流或其他介质 因此 十分重要吧

既然是ref引用 那肯定要定义这个被引用的appender对象了呀

每个appender都代表了一个输出介质

name属性指定其名称 type则是log net Appender命名空间的一个类的名称 意思是 指定使用哪种介质

log net支持的appender类型有十几种 最常用的有rollingFileAppender AdoNetAppender EventLogAppender FileAppender 分别把日志记入文件 系统日志和数据库

除此之外 appender内的其他参数都用param标记 以key/value形式定义于其内

这里有个小提示 每一个appender log net并没有在文档中提出他们需要哪些参数 那么 我们怎么知道呢?

原来 这些param的名称 你可以直接查对应的appender类的属性名即可 例如 使用EventLogAppender时 通过查看类的属性 我们知道其有

LogName ApplicationName属性 那么 意味着 你可以直接在这个APPENDER的param里加入以下内容:

<param name= LogName value= Application />

<param name= ApplicationName value= log netTest />

定义了appender的NAME及TYPE属性 以及使用param为其指定参数后 一个appender就建立了 你可以使用他的名字在LOGGER的<appender ref中去 引用它 那么 引用它的LOGGER在写入日志时 就是写到了APPENDER中定义的介质中去了

一个LOGGER可以引用多个APPENDER 其结果是 同一个日志 被同时记录到多个介质中去 便如 同时发邮件 写入系统日志 发送到远程主机 不过 虽然可以这样做 但是还是要小心 因为 会对性能有一定的影响 除非你需要 否则 不要乱用此功能

另外 appender中可以定义可选的layout

layout的定义非常有必要 如果你不想将来看到你的日志会感觉头晕的话 虽然log net帮你写入日志 但是 日志信息的格式却是我们使用者自行定义的layout的type参数指定使用哪个类的定义来格式化 常用的有XmlLayout SimpleLayout PatternLayout 这个当然要根据你的需要 以及你要产生的格式来选啦 如果你要输出成XML文档格式 你肯定不能用simplelayout吧

layout使用param以KEY/VALUE形式定义其参数

各个Layout类使用的参数当然不一样啦 具体的 你可以去看各个Layout类的属性

其中 PatternLayout可以使用ConversionPattern参数来指定一个格式化字符串

以及可以指定一个Header参数 做为日志开头的字符串 Footer来指定结尾字符串

这里有一个小技巧 日志中开头和结尾总想产生回车符吧 虽然logger在写入一条日志会自动回车 可是Header和FOOTER却不会 咋办?用
吗?(我从别人的BLOG上看到过)经实践
会原样定改日志 根本不会转换 其实 我们可以用XML实体呀 使用&# ;&# ;就可以在指定位置插入一个回车换行符了

最后 像log net的文档中说的那样 如果你不想你的日志文件变得很大 使读写的性能下降的话 建议你还是分级管理日志 把粒度变小点 也就是说 除了定义ROOT外 最后 对每一个模块或每一个实体 依据用途 目的 定义各自的LOGGER配置 这样的好处是日志被分散了 日志文件增长就没那么快了 每一个LOGGER的结构跟ROOT是一模一样的 这里不再叙述了 像前面说的那样 如果你相让日志产生层级关系 你可以跟他们的NAME属性像C#中的namespace那样命名就可以了

要说明的是 LOGGER的定义是非必须的 只是一种建议罢了 Log net的配置中 除了必须定义一个ROOT和一个APPENDER外 其他的都是可选的

lishixin/Article/program/net/201311/11448

3. 【日志】Log4j2配置

在同步日志模式下, Logback的性能是最糟糕的,log4j2的性能无论在同步日志模式还是异步日志模式下都是最佳的。本章主要介绍Spring Boot如何集成并配置使用Log4j2

引入Log4j2依赖包,其它依赖和Logback一样,使用SLF4J统一输出

然后需要在resource下面添加log4j2.xml配置文件,当然了如果你不添加,springboo会提示你没有对应文件,并使用默认的配置文件,这个时候级别可以在application.properties中配置

和logback配置类似,主要是含有loggers、appenders,其中loggers由logger,root组成。appenders由console(控制台),File、RollingFile(输出文件)组成,作用和配置和logback差不多

(1)Console 用来定义输出到控制台的Appender,主要设置输出格式和level级别

ThresholdFilter: 定义打印级别,onMismatch值设置是否拒绝其它 (2)File 用来定义输出到指定位置的文件的Appender

(3)RollingFile 用来定义超过指定条件自动删除旧的,创建新的Appender

参数说明:

Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出

参数说明:

变量配置,类似常量定义

默认情况下springboot是不将日志输出到日志文件中,这里对日志框架的支持有两种配置方式(和logback一样): (1)application.properties 或 application.yml (系统层面) (2)logback-spring.xml (自定义文件方式)

默认名log4j2-spring.xml,可以省下在application.yml中配置,如果自定义了文件名,需要在application.yml中配置

此种方式可以处理比较复杂的情况,比如区分 info 和 error 日志、每天产生一个日志文件。

通过在DefaultRolloverStrategy 标签下添加Delete标签实现,保留7天的日志

IfLastModified .age要和filePattern精确的时间一致, 否则貌似无效.

4. log4j.logger写入哪个配置文件

有没有想过为什么我们用:Logger logger = Logger.getLogger(ABC.class) ;来得到 logger?不想只看人家的 demo, demo 毕竟是 Hello World 级别的简单入门样例,我们需要知道 API 是如何描述它们的。Logger.getLogger() 除非用类当参数外还有用字符串当参数的,意思就是说“你可以给你的 Logger 取任意的名字,不是非要使用类名”。上面这句话是说你可以在log4j.properties 里面配置:Log4j.appender.FileAppenderA.file = a.log…Log4j.appender.FileAppenderB.file = a.log…Log4j.appender.FileAppenderB.file = a.log…Log4j.logger.MyABC1Logger = FileAppenderALog4j.logger.MyABC2Logger = FileAppenderBLog4j.logger.MyABC3Logger = info,FileAppenderA,FileAppenderB,FileAppenderC代码中一个类可以得到多个 logger,然后你想使用哪个就是随你的便了。Logger loggerA = Logger.getLoger("MyABC1Logger ");Logger loggerB = Logger.getLoger("MyABC2Logger ");Logger loggerC = Logger.getLoger("MyABC3Logger ");如果你选择了 logger C 的话,一次写入消息会同时出现在 3 个 appender 对应的日志文件中。

5. logger能不能使用代码获得配置文件中的路径

一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件。<log4net> <!– 错误日志类–> <logger name="logerror"> <level value="ALL" /> <appender-ref ref="ErrorAppender" /> </logger> <!– 信息日志类 –> <logger name="loginfo"> <level value="ALL" /> <appender-ref ref="InfoAppender" /> </logger> <!– 错误日志附加介质–> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogError\\" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="100" /> <param name="MaxFileSize" value="10240" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyyMMdd".htm"" /> <param name="RollingStyle" value="Date" /> <!–布局–> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=red>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> <!– 信息日志附加介质–> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogInfo\\" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyyMMdd".htm"" /> <param name="RollingStyle" value="Date" /> <!– 信息日志布局–> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=blue>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender></log4net>

6. Spring Boot Logging 配置

Spring Boot 能够使用Logback, Log4J2 , java util logging 作为日志记录工具。Spring Boot 默认使用Logback作为日志记录工具。日志默认输出到控制台但也能输出到文件中。我们通过spring-boot-starter-logging 加入Logback依赖,其实只要我们加入任意的Spring Boot starter 都会默认引入spring-boot-starter-logging,因此 我们不需要分开加入他们。

logging.level.* : 作为package(包)的前缀来设置日志级别。 logging.file : 配置日志输出的文件名,也可以配置文件名的绝对路径。 logging.path : 配置日志的路径。如果没有配置 logging.file ,Spring Boot 将默认使用spring.log作为文件名。 logging.pattern.console : 定义console中logging的样式。 logging.pattern.file : 定义文件中日志的样式。 logging.pattern.level : 定义渲染不同级别日志的格式。默认是%5p. logging.exception-conversion-word : .定义当日志发生异常时的转换字 PID : 定义当前进程的ID

下面将讨论在 application.properties , application.ym , Logback XML 中配置Logback以及在Spirng Boot 应用中使用Log4J2.

logging.level设置日志级别。我们可以使用TARCE , DEBUG , INFO , WARN , ERROR , FATAL , OFF 。可以使用root级别和package级别来控制日志的输入级别。创建一个具有以下依赖关系的应用程序。

使用 srcmainesourcesapplication.properties 配置日志级别

使用 srcmainesourcesapplication.yml

Spring Boot 默认把日志输入到console,如果我们要把日志输入到文件中,需要配置logging.file 或者logging.path属性性。logging.file属性用来定义文件名。他不仅仅可以配置文件名,也可以路径+文件名。

在这种情况下mylogfile.log将在根目录中创建。我们也可以为为mylogfile.log分配一个路径,如concretepage/mylogfile.log。这种情况下我们将在相对根目录下创建concretepage/mylogfile.log。我们也可以为日志文件配置绝对路径。 application.yml 中配置

配置logging.path或者logging.path属性将日志输出到文件夹中。logging.path属性用来定义日志文件路径 在 application.properties 中配置logging.path属性

将会相对根路径下创建concretepage/logs/spring.log ,也可以配置绝对路径

application.yml 配置

通过设置logging.patter.console属性我们能改变输出到console的日志样式。日志样式包括时间,日志级别,线程名,日志名以及消息。我们可以按我们的喜好改变日志样式。 application.properties

application.yml

改变文件中的日志样式我们需要设置logging.pattern.file属性。首先通过logging.file或logging.path属性,把日志记录到文件中。

通过logging.path属性将在根目录下创建concretepage/logs并默认使用spring.log作为文件名。logging.pattern.console是设置console的日志样式 application.yml

通过命令行改变日志的输出级别 Sping Boot 默认输出ERROR , WARN , INFO 级别的日志。我们可以通过命令行使能DEBUG ,TRACE级别的日志输出,效果是跟配置文件一样的。想象我们有一个名为my-app.jar的可执行的JAR包我们可以在启动应用是使能DEBUG级别日志输出。

在application.properties中配置

application.yml

相同的方式使能TRACE级别的日志

application.properties

application.yml

在应用程序中记录日志 创建一个SLF4J的例子,首先获得org.slf4j.Logger的实例。

在application.properties配置包com.concretepage日志记录级别

输出

使用Logback XML 文件 Sping Boot中默认使用logback, 我们可以在application.properties或者application.yml中设置日志级别。如果想使用XML配置Logback,我们需要在类路径下创建logback-spring.xml文件 srcmainesourceslogback-spring.xml

使用自定义日志:Log4J2 我们使用任何的starter,默认加入Logback 依赖spring-boot-starter-logging。为了使用Log4J2,我们首先要去除spring-boot-starter-logging并且引入spring-boot-starter-log4j2 依赖

现在我们可以在类路径下创建并配置log4j2-spring.xml

原文: http://www.concretepage.com/spring-boot/spring-boot-logging-example

7. logger.info(); 什么意思

logger是用log4j作为日志输出组件的,info是日志的级别。

使用了logger.info后,可以将日志信息写入,例登陆成功判断后,调用logger.info( "2010年12月17日12:20:25 用户xxx成功登录"),就能将日志信息写入配置的文件中。

设置保存日志的位置,以日期作为文件名:

public static final Logger logger=Logger.getLogger(Main.class.toString());

StringBuffer logPath=new StringBuffer();

logPath.append("f:\javalogs"); //设置保存路径

//设置文件名

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

logPath.append("\"+sdf.format(new Date())+".log");

//将输出handler加入logger

try {

FileHandler fileHandler=new FileHandler(logPath.toString(),true);

logger.addHandler(fileHandler);

}catch (IOException e){

e.printStackTrace();

}

8. 如何动态修改python logging配置文件

配置文件:#Configuration for log output#Naiveloafer#2012-06-04[loggers]keys=root,xzs[handlers]keys=consoleHandler,fileHandler,rotatingFileHandler[formatters]keys=simpleFmt[logger_root]level=DEBUG#handlers=consoleHandler#handlers=fileHandlerhandlers=rotatingFileHandler[logger_xzs]level=DEBUGhandlers=rotatingFileHandlerqualname=xzspropagate=0[handler_consoleHandler]class=StreamHandlerlevel=DEBUGformatter=simpleFmtargs=(sys.stdout,)[handler_fileHandler]class=FileHandlerlevel=DEBUGformatter=simpleFmtargs=("../log/p2pplayer.log", "a")[handler_rotatingFileHandler]class=handlers.RotatingFileHandlerlevel=DEBUGformatter=simpleFmtargs=("../log/p2pplayer.log", "a", 20*1024*1024, 10)[formatter_simpleFmt]format=%(asctime)s – %(name)s – %(levelname)s – %(message)s – [%(filename)s:%(lineno)s]datefmt=测试代码:def log_test02(): import logging import logging.config CONF_LOG = "../conf/p2pplayer_logging.conf" logging.config.fileConfig(CONF_LOG); # 采用配置文件 logger = logging.getLogger("xzs") logger.debug("Hello xzs") logger = logging.getLogger() logger.info("Hello root") if __name__ == "__main__": log_test02()输出:2012-06-04 15:28:05,751 – xzs – DEBUG – Hello xzs – [xlog.py:29]2012-06-04 15:28:05,751 – root – INFO – Hello root – [xlog.py:32]具体就不详细说明了,总之是能够运行的,这个文件配置搞了我两天时间。特别是class=XXXX要注意!!!

9. log4j2配置文件详解(springboot+slf4j+log4j2+yaml+lombok)

log4j2配置文件学习笔记: 说明1:本文主要针对yml配置,其他xml配置或者json配置。 说明2:下面是大致介绍了结构,什么作用,当然还有其他分类,比如:logger,AsyncLogger | appenders fileAppenders | rollingFile,rollingRandomAccessFile这些不同的分类和里面具体的参数设置。见官网,官网写的非常好: log4j2官网 yaml格式可以参考: YAML语法入门 大致配置(比较长,看有注释的就可以,没注释的大致都相同): 备注:关于各种filter的配置参数见: 官网filter介绍 springboot+slf4j+log4j2+yaml中使用:主要是@slf4j(topic="自定义的logger name")。 其实@slf4j注解就是实现:

10. python logging.conf是什么类型文件

下面的函数用于配置logging模块,它们位于logging.config模块中。你可以使用这些函数来配置,也可以在logging或是logging.handlers中声明它们来配置。logging.config.dictConfig(config)从dictionary中获取logging配置logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True)从指定的fname的配置文件中读取logging配置文件该函数可以在应用程序中多次调用logging.config.listen(port=DEFAULT_LOGGING_CONFIG_PORT)在指定端口启动socket server并侦听新配置logging.config.stopListening()关闭先前正在侦听的serverConfiguration file format被fileConfiguration()所理解的配置文件格式基于configparser功能。配置文件必须包含[loggers], [handlers]和[formatters],它们分别代表日志文件中定义的每种类型的实体。对这3种实体,后面有一个单独的section来定义该实体如何配置。因此,[loggers]节中名为log01的logger,相关的配置文件细节在[logger_log01]节中定义。类似地,[handlers]节中名为hand01的handler将在[handler_hand01]节中声明,[formatters]节中的form01将在[formatter_form01]声明。root logger配置必须在[logger_root]节声明。注意:fileConfig() API比dictConfig()旧,并不包含logging某些方面的功能。建议以后尽量使用dictConfig API。配置文件的例子如下:[loggers]keys=root,log02,log03,log04,log05,log06,log07[handlers]keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09[formatters]keys=form01,form02,form03,form04,form05,form06,form07,form08,form09root logger必须指定一个级别和handlers列表。示例如下:[logger_root]level=NOTSEThandlers=hand01其中level可以是DEBUG, INFO, WARNING, ERROR, CRITICAL or NOTSET之一,仅对root logger来说,NOTSET意味着所有的log message都会记录。对非root的logger,强制要求一些额外信息,比如[logger_parser]level=DEBUGhandlers=hand01propagate=1qualname=compiler.parser当一个非root的logger中level被配置为NOSET,它将通过上一级的logger来确定当前logger的有效级别。propagete为1表示message必须传播到上一级logger中,为0表示不传。qualname表示该logger的层级channel名称,这就是说,应用程序使用该名称可以得到该logger对象。handler类型很多,主要有StreamHandler,FileHandler,NullHandler,SysLogHandler,HTTPHandler等handler节对应的配置示例如下:[handler_hand01]class=StreamHandlerlevel=NOTSETformatter=form01args=(sys.stdout,)class表示该handler在logging包命名空间中的类名,level表示logger的级别,NONSET表示要记录所有日志。formatter表示该handler的formatter的键名,假如空白的话,就使用默认值logging._defaultFormatter。假如formatter指定了该名字,必须在对应的section声明。args字段是handler类的构造函数的变量列表,参考相关handler构造函数,或者下面的例子,去观察通常的元素是如何构造的。比如:[handler_hand02]class=FileHandlerlevel=DEBUGformatter=form02args=('python.log', 'w')下面是formatter的配置[formatter_form01]format=F1 %(asctime)s %(levelname)s %(message)sdatefmt=class=logging.Formatterformat字段是全局格式字符串,datefmt是strftime()兼容的date/time格式字符串,为空时使用默认的ISO8601格式,比如2003-01-23 00:29:50,411,class字段表示formatter的类名,日志级别如下:Level Numeric valueCRITICAL 50ERROR 40WARNING 30INFO 20DEBUG 10NOTSET 0logging.handlers解读logging模块中定义了这3个handler:StreamHandler, FileHandler and NullHandler其它的handler都在logging.handler中定义,一并说明如下:StreamHandler该类位于logging包,将logging output输出到流中,比如sys.stdout,sys.stderr或任何支持write()和flush()方法的类文件对象class logging.StreamHandler(stream=None)假如指定了stream名称,日志将输出到流实例中,否则,日志输出到sys.stderrFileHandler该类位于logging包,将logging output输出到磁盘文件中,文件默认无限增长class logging.FileHandler(filename, mode='a', encoding=None, delay=False)打开指定的文件并记录日志,假如mode没有设置,默认使用'a'表示追加日志到文件中。NullHandler该对象什么也不处理WatchedFileHandler一个FileHandler实例,监视日志文件的变化,假如文件变化了,它会关闭并重新打开,不建议在Windows下使用文件的变化可以发生,当应用程序使用newsyslog和logrotate来实现日志文件的回滚时。这个handle是在Unix/Linux下面,监视文件是否改变。(一个文件认为改变了,假如它的device厚实inode已经改变),将旧的文件关闭,这个流打开。class logging.handlers.WatchedFileHandler(filename[, mode[, encoding[, delay]]])指定的文件被打开,用来记录日志,假如mode未指示,默认使用aRotatingFileHandler支持磁盘文件的回滚class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)你可以使用 maxBytes和backupCount值去让日志文件在预设大小时回滚。只要日志文件在长度上接近maxBytes时,就会关闭旧日志文件,打开一个新的日志文件,实现回滚。假如maxBytes或backupCount为0,回滚不会发生。假如backupCount非零,系统会备份旧文件,文件名后加‘.1’, ‘.2’ 。比如,日志文件名为app.log,backupCount为5,将会得到app.log, app.log.1, app.log.2, 直到app.log.5这6个文件。写入日志的文件总是app.log,当这个文件填满时,就关闭它并重命名为app.log.1, 假如还存在app.log.1, app.log.2等文件,就逐一改名为app.log.2, app.log.3等等。TimedRotatingFileHandler支持在指定时间段内回滚日志class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)回滚基于when和interval设置,when指定interval的类型,参见下表,大小写不敏感,默认按小时回滚Value Type of interval'S' Seconds'M' Minutes'H' Hours'D' Days'W0'-'W6' Weekday (0=Monday)'midnight' Roll over at midnight回滚扩展名使用strftime format %Y-%m-%d_%H-%M-%S或其头部子字符串,当使用基于weekday的回滚时,W0表示周一,……,W6表示周日,interval的值不会用到backupCount表示备份数,当日志很多时,新日志会覆盖旧日志,删除逻辑使用interval值去决定删除哪些日志文件utc为true,表示使用UTC时间,否则使用本地时间SocketHandler通过网络套接字输出日志,SocketHandler类的基类使用TCP socketclass logging.handlers.SocketHandler(host, port)向指定地址和端口的远程主机发送日志DatagramHandler继承自基类SocketHandler类,使用UDP socket发送日志messageclass logging.handlers.DatagramHandler(host, port)SysLogHandler发送日志到远程或是本地unix syslogclass logging.handlers.SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)NTEventLogHandler发送日志消息到本地Windows NT, Windows 2000 or Windows XP event logclass logging.handlers.NTEventLogHandler(appname, dllname=None, logtype='Application')SMTPHandler通过SMTP将日志消息发送到email addressMemoryHandler支持将日志message缓存到内存中,周期性刷新日志到target handlerclass logging.handlers.BufferingHandler(capacity)class logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None)HTTPHandler使用GET或是POST,将日志message发送到web serverclass logging.handlers.HTTPHandler(host, url, method='GET')


赞 (0)