利用log4net创建日志文件时过滤日志,这是坑还是?

前言

网上貌似没有太多关于log4net过滤日志的资料,在研究过程中发现一点小问题,这里做下记录,希望对后续有用到的童鞋起到一丢丢帮助作用。

log4net日志过滤

由于是在.NET Core中使用,所以这里为了演示,我们创建一个.NET Core控制台程序,同时呢通过安装log4net最新稳定版本(2.0.8),好了,对于.NET Core而言,在开发时可直接配置web.config启用日志功能,此时会将不同级别日志直接放在同一文件中,在实际开发中无论我们使用log4net还是serilog或者自己写一个也好,大部分都会根据不同级别创建不同目录,这样更加易于后续跟踪和排查问题。但是也会存在特殊的需求,比如本文中,我们只需要创建两个日志文件,一个用于正常的信息文件记录,一个是审计信息记录,而且日志文件名可能不是日期格式,而是由我们自己根据配置给定,所以基于以上需求,我们来完成此项任务,首先,我们在控制台根目录下创建如下单独的log4net .config配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log.txt" />
    <appendToFile value="true" />
    <countDirection value="1"/>
    <maximumFileSize value="10MB" />
    <maxSizeRollBackups value="-1" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"  />
    </layout>
  </appender>
  <root>
    <level value="DEBUG"/>
    <appender-ref ref="RollingFileAppender" />
  </root>
</log4net>

接下来则是读取上述配置文件,在.NET Framework中我们需要在Properties文件夹下的AssemblyInfo类中添加读取上述日志配置文件类,如下:

[assembly: log4net.Config.XmlConfigurator(ConfigFile ="log4net.config", Watch = true)]

但是到了.NET Core中压根就没有了上述Properties文件夹,此时我能想到的办法只能根据日志配置文件所在的目录去读取(不知是否还有其他更好的办法),并按照所提供的api,创建控制台程序集仓储和读取配置文件中XML的根节点并最终写到log4net配置中,如下:

            var log4netFullPath = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\..\..\"));

            var log4netConfig = new XmlDocument();
            log4netConfig.Load(File.OpenRead(Path.Combine(log4netFullPath, "log4net.config")));

            var repo = LogManager.CreateRepository(Assembly
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值