Log4net - 规则简介(续)

本文详细介绍了log4net配置文件中的各个标签及其属性,包括<log4net>、<root>、<logger>和<appender>等标签的使用方法,并提供了写入文件和数据库的具体配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前对于配置并没有结束, 中间插了一个demo进去, 能够更直观的看到日志是怎么使用的. 这一篇, 我加了一些自己的东西进去, 可以更直观的来理解这些配置内容.

这里就继续介绍配置文件中的内容.

1. <log4net> 标签

<log4net debug="true"></log4net>

支持的属性:

debug可选,取值是true或false,默认是false。设置为true,开启log4net的内部调试。
update可选,取值是Merge(合并)或Overwrite(覆盖),默认值是Merge。设置为Overwrite,在提交配置的时候会重置已经配置过的库。
threshold可选,取值是repository(库)中注册的level,默认值是ALL。

支持的元素:

appender0或多个
logger0或多个
renderer0或多个
root最多一个
param0或多个

 

2. <root>标签

<root>
  <level value="ALL" />
  <appender-ref ref="ErrorLogFileAppender" />
  <appender-ref ref="TraceLogFileAppender" />
</root>

根元素, 其他所有的logger都默认继承他, root没有属性

支持的子元素:

appender-ref0个或多个,要引用的appender的名字。
level

最多一个。 只有在这个级别或之上的事件才会被记录。

OFF / FATAL / ERROR / WARN / INFO / DEBUG  / ALL 

param0个或多个, 设置一些参数。

 

3. <logger>标签

从上一篇的例子中, 其实是找不到logger标签的, 如果只是简单的记录日志, 其实并不需要使用到这个标签

支持的属性:

name必须的,logger的名称
additivity可选,取值是true或false,默认值是true。设置为false时将阻止父logger中的appender。

支持的子元素:

appender-ref0个或多个,要引用的appender的名字。
level最多一个。 只有在这个级别或之上的事件才会被记录。
param0个或多个, 设置一些参数。

 

4. <appender>标签

<appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Logs\Trace\" />
  <appendToFile value="true" />
  <MaxSizeRollBackups value="20" />
  <RollingStyle value="Date" />
  <DatePattern value="yyyy-MM-dd'.txt'" />
  <StaticLogFileName value="false" />
  <!--<MaximumFileSize  value="10MB"/>-->
  <layout type="log4net.Layout.PatternLayout,log4net">
    <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
    <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
    <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter,log4net">
    <levelMin value="DEBUG" />
    <levelMax value="INFO" />
  </filter>
</appender>

定义日志的输出方式,只能作为 log4net 的子元素。name属性必须唯一,type属性必须指定。

支持的属性:

name必须的,Appender对象的名称
type必须的,Appender对象的输出类型

支持的子元素:

appender-ref0个或多个,允许此appender引用其他appender,并不是所以appender类型都支持。
filter0个或多个,定义此app使用的过滤器。
layout最多一个。定义appender使用的输出格式。
param0个或多个, 设置Appender类中对应的属性的值。

 

实际上<appender>所能包含的子元素远不止上面4个。

在我过去的项目中, 常用的也就两种, 一种是写入文件中, 另一种是写入数据库中. 对于发送到邮件中的, 暂时还没有使用过. 那就主要介绍下前面两种方式吧.

4.1 写入文件中

写入文件中, 各人习惯可能有些不一样, 当然也是与项目相关的. 有些人喜欢按照日期来存, 有些人喜欢放入一个文件中, 设置最大存储值来存. 都是可以的. 如果项目日志文件多, 可以分日期, 如果项目日志文件少, 那么分日期, 就不合算了, 可能会导致文件和日志一样多.

1). 日期方式

<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <!--文件目录或者文件名-->
  <file value="Logs\Error\" />
    <!--为true时, 日志文件只取file的名字; 为false时, 日志文件取名规则为 file+DatePattern-->
  <StaticLogFileName value="false" />
  <!--文件名格式-->
  <DatePattern value="yyyy-MM-dd'.txt'" />
  <!--记录日志的形式, Date/Size 两种, 此处表示按日期记录日志-->
  <RollingStyle value="Date" />
  <!--是否追加到日志中, 默认为true, 无需设置-->
  <appendToFile value="true" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
    <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
    <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter,log4net">
    <levelMin value="ERROR" />
    <levelMax value="FATAL" />
  </filter>
</appender>

日期方式, 要注意的几个地方, 我在上面用背景色标注出来了.

 

2). 文件大小限制方式

<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Logs\Error.log" />
  <RollingStyle value="Size" />
  <!--文件夹下记录的日志文件个数, 需要与MaximumFileSize配合使用-->
  <MaxSizeRollBackups value="2" />
  <!--每个日志文件大小, 不能为小数, 如果这里限制100kb, 但是需要记录的内容有150kb, 会全部记录的-->
  <!--可用单位 : KB / MB / GB -->
  <MaximumFileSize  value="100KB"/>
  <StaticLogFileName value="true" />
  <appendToFile value="true" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
    <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
    <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter,log4net">
    <levelMin value="ERROR" />
    <levelMax value="FATAL" />
  </filter>
</appender>

从上面的配置看到, 文件夹下能建的日志文件是可以限制的, 那么如果满了怎么办? log4net 不会再创建新文件了, 而是重写的方式去记录日志. 换句通俗的说法, 就是在这几个文件里面转圈圈.

 

4.2 写入数据库中

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="ADONetAppender" />
  </root>

  <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
    <!--缓存条数, 一次性写入数据库, 调试时, 此处设置为1-->
    <bufferSize value="1" />
    <param name="ConnectionType"  value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
    <param name="ConnectionString"  value="server=localhost;user id=root;password=root;database=current;port=3306;CharSet=utf8;" />
    <commandText value="insert into ErrorLog(dtDate,sThread,sLevel,sLogger,sMessage,sException) values (@log_date, @thread, @log_level, @logger, @message, @exception);" />

    <parameter>
      <parameterName value="@log_date" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
      <parameterName value="@thread" />
      <dbType value="String" />
      <size value="100" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%t" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@log_level" />
      <dbType value="String" />
      <size value="200" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%p" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@logger" />
      <dbType value="String" />
      <size value="500" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%logger" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="3000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%m" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@exception" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
  </appender>
</log4net>

附上建表sql

CREATE TABLE `errorlog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dtDate` datetime DEFAULT NULL,
  `sThread` varchar(100) DEFAULT NULL,
  `sLevel` varchar(200) DEFAULT NULL,
  `sLogger` varchar(500) DEFAULT NULL,
  `sMessage` varchar(3000) DEFAULT NULL,
  `sException` varchar(4000) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COMMENT='错误日志表'

OK, 接下来可以直接看结果了:

还是蛮好用的, 配置起来也很简单. 使用起来更简单.

 

参考:

  log4net使用手册

 

转载于:https://www.cnblogs.com/elvinle/p/6264327.html

root@cvm-3m8si6a2da225:~# certbot renew Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/gaoerji.net.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not yet due for renewal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The following certs are not due for renewal yet: /etc/letsencrypt/live/gaoerji.net/fullchain.pem expires on 2025-09-03 (skipped) No renewals were attempted. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - root@cvm-3m8si6a2da225:~# sudo certbot certificates Saving debug log to /var/log/letsencrypt/letsencrypt.log Cannot extract OCSP URI from /etc/letsencrypt/live/gaoerji.net/cert.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Found the following certs: Certificate Name: gaoerji.net Domains: gaoerji.net Expiry Date: 2025-09-03 12:55:10+00:00 (VALID: 62 days) Certificate Path: /etc/letsencrypt/live/gaoerji.net/fullchain.pem Private Key Path: /etc/letsencrypt/live/gaoerji.net/privkey.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - root@cvm-3m8si6a2da225:~# sudo certbot renew --force-renewal Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/gaoerji.net.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Plugins selected: Authenticator nginx, Installer nginx Renewing an existing certificate nginx: [warn] conflicting server name "gaoerji.net" on 0.0.0.0:80, ignored nginx: [warn] conflicting server name "gaoerji.net" on 0.0.0.0:443, ignored - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of nginx server; fullchain is /etc/letsencrypt/live/gaoerji.net/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/gaoerji.net/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - root@cvm-3m8si6a2da225:~#
07-04
内容概要:本文档详细介绍了基于Google Earth Engine (GEE) 构建的阿比让绿地分析仪表盘的设计与实现。首先,定义了研究区域的几何图形并将其可视化。接着,通过云掩膜函数和裁剪操作预处理Sentinel-2遥感影像,筛选出高质量的数据用于后分析。然后,计算中值图像并提取NDVI(归一化差异植被指数),进而识别绿地及其面积。此外,还实现了多个高级分析功能,如多年变化趋势分析、人口-绿地交叉分析、城市热岛效应分析、生物多样性评估、交通可达性分析、城市扩张分析以及自动生成优化建议等。最后,提供了数据导出、移动端适配和报告生成功能,确保系统的实用性和便捷性。 适合人群:具备一定地理信息系统(GIS)和遥感基础知识的专业人士,如城市规划师、环境科学家、生态学家等。 使用场景及目标:①评估城市绿地分布及其变化趋势;②分析绿地与人口的关系,为城市规划提供依据;③研究城市热岛效应及生物多样性,支持环境保护决策;④评估交通可达性,优化城市交通网络;⑤监测城市扩张情况,辅助土地利用管理。 其他说明:该系统不仅提供了丰富的可视化工具,还集成了多种空间分析方法,能够帮助用户深入理解城市绿地的空间特征及其对环境和社会的影响。同时,系统支持移动端适配,方便随时随地进行分析。用户可以根据实际需求选择不同的分析模块,生成定制化的报告,为城市管理提供科学依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值