前言

因为项目日志太杂乱而且很大,打开一个就卡死了,何况用户电脑也扛不住日志积累,要做一个日志记录器管理日志。但对里面的配置有一些不熟悉(毕竟都是复制粘贴的),所以记录一下各个项的作用。方便后续复习。

1.0 使用配置文件

众所周知,如果要使用一个配置文件,则需要声明: [assembly: log4net.Config.XmlConfigurator(Watch = true)]。

可以放在 AssemblyInfo.cs文件中,也可以放在代码内,如下代码目的是把日志输出到控制台上。

using log4net;
using System;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
ILog log = log4net.LogManager.GetLogger("Test");
log.Error("错误", new Exception("发生了一个异常"));//错误
log.Fatal("严重错误", new Exception("发生了一个致命错误"));//严重错误
log.Info("信息"); //记录一般信息
log.Debug("调试信息");//记录调试信息
log.Warn("警告");//记录警告信息
Console.WriteLine("日志记录完毕。");
Console.Read();
}
}
}

其中配置文件放在 App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration> <configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<appender name="控制台输出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
<logger name="Test">
<level value="ALL"/>
<appender-ref ref="控制台输出" />
</logger>
</log4net> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

在很多demo上,也有 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)],实际上都是差不多,意思是 使用一个叫 log4net.config,后缀名为 config配置文件。

2 配置文件内容介绍

2.1 logger.level

通过上面简单的配置文件,可以发现是通过一个叫 <logger name="Test">来控制的。那么可以通过如下代码找到它。这个 ILog就提供了一堆方法(Error,Info...)让我们使用。

ILog log = log4net.LogManager.GetLogger("Test");

<logger name="Test">内部还有一个 <level value="ALL"/>,就是日志的记录等级 由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF,那么这个ALL就是什么都输出。如果把等级改为 WARN。那么上面代码输出如下,很明显,DEBUG|INFO已经失效了。

2.1 logger.appender

上文给出的demo是针对控制台输出的,那么它是怎么控制的呢。这个时候就需要  <appender-ref ref="控制台输出" />和它名字下的一起控制了

<appender name="控制台输出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>

其中type还有很多类型。这里就说几个常用的。

ConsoleAppender在控制台写日志

ColoredConsoleAppender 额,名字有点直白,就是控制台输出的还有颜色

FileAppender往文件里面写日志

RollingFileAppender基于FileAppender,不过它可以管理文件大小之类的。

具体的例子我们以后再看。

2.2 logger.layout

到这里就是控制记录格式了。其中常用的是 <layout type="log4net.Layout.PatternLayout">,通过标识符来控制格式,以下是一些解释

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

%n(new line):换行

%d(datetime):输出当前语句运行的时刻

%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

%t(thread id):当前语句所在的线程ID

%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

%c(class):当前日志对象的名称

2.3 logger.filter

接下来,我们来点复杂的配置 <filter type="log4net.Filter.LevelRangeFilter">,为了避免看走神,我们把配置文件再展示一次。加入这个类似于过滤,意思是只有等级区间内INFO|WARN|ERROR的才可以输出。

<?xml version="1.0" encoding="utf-8" ?>
<configuration> <configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<appender name="控制台输出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<logger name="Test">
<level value="ALL"/>
<appender-ref ref="控制台输出" />
</logger>
</log4net> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

2.4 root

可以把它看做是根logger,如果没有显示定义logger,那么使用根日志定义的属性。

<root>
<level value="ALL" />
<appender-ref ref="控制台输出" />
</root>

2.4 综合使用

现在已经了解基础配置了,快来试一试复杂的配置吧

<?xml version="1.0" encoding="utf-8"?>
<configuration> <configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<File value="Log\\"/>
<!--是否是向文件中追加日志-->
<AppendToFile value="true"/>
<!--创建新文件的方式-->
<param name="RollingStyle" value="Date"/>
<!--日志文件名-->
<param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;"/>
<!--log文件大小-->
<MaximumFileSize value="1024"/>
<!--备份日志数目-->
<MaxSizeRollBackups value="30"/>
<!--日志文件名是否是固定不变的-->
<StaticLogFileName value="false"/>
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--输出格式-->
<layout type="log4net.Layout.PatternLayout">
<!--日期 [级别]-->
<conversionPattern value="%d [%-5p] [%t%] -%m%n"/>
</layout>
<!--控制器,只记录级别在INFO-INFO之间的信息-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ALL" />
<param name="LevelMax" value="OFF" />
</filter>
</appender>
<logger name="Test">
<level value="ALL"/>
<appender-ref ref="SysAppender"/>
</logger>
</log4net> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
</configuration>

3.0 通过代码获取配置信息

除了 log4net.LogManager.GetLogger("Test");还有一种可以获取以上配置信息 Repository

using System;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
log4net.Repository.Hierarchy.Hierarchy hier =
(log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository(); var logs = hier.GetCurrentLoggers(); //输出logger名称
foreach (var logger in logs)
{
Console.WriteLine(logger.Name);
} //输出appenders名称
var appenders = hier.GetAppenders();
foreach (var appender in appenders)
{
Console.WriteLine(appender.Name);
} Console.Read();
}
}
}

参考链接

log4net文档

C# log4net 配置

C#中log4net使用方法(一)

log4net面面观之工作原理

log4net面面观之Repository

C# Log4net配置文件 总结的更多相关文章

  1. log4net配置文件设置

    windows服务执行cmd命令 最长公共子字符串 log4net配置文件设置 2011-11-16 13:15:41|  分类: Notes |  标签: |字号大中小 订阅     log4net ...

  2. Log4net配置文件一般配置

    配置文件一般配置 <?xml version="1.0"?> <configuration> <configSections> <sect ...

  3. Window服务初级教程以及log4net配置文件初始化

    Window服务初级教程:http://www.jb51.net/article/48987.htm 另外,配置log4net这个日志功能的时候需要初始化,不然会报没有初始化的错误,而且初始化的节点应 ...

  4. log4net 配置文件配置方法

    转自:http://www.dozer.cc/2013/06/log4net-config-file-order/ 最近把项目中所有的日志都改成了 log4net ,同事也蠢蠢欲动,用起了 log4n ...

  5. AspNetCore配置多环境log4net配置文件

    前言 在之前的文章中有讲到AspNetCore多环境配置文件的应用,我们根据自己多种环境分别配置多个appsettings.$EnvironmentName.json文件. 在实际的开发中我们可能会遇 ...

  6. Log4net 配置文件组成

    Example: <?xml version="1.0" encoding="utf-8" ?><configuration><l ...

  7. log4net配置文件

    <?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...

  8. Log4net 配置文件

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <!--Log日记 ...

  9. Log4Net读取XML配置文件及在代码中完成添加Logger操作

    解决问题: 将log4net配置文件与app.config配置文件分开 手动读取log4net配置文件 手动创建logger 可将日志输出功能封装在类库中,应用程序引用时无需添加assembly引用及 ...

  10. 在C#代码中应用Log4Net系列教程(附源代码)

    Log4Net应该可以说是DotNet中最流行的开源日志组件了.以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了.没用过Log4Net,真心不知道原来日志组件也可以做得这么灵活,当然这 ...

随机推荐

  1. 在CentOS 8服务器上搭建FastDFS环境

    什么是FastDFS? 这里,我就摘录下百度百科上对于FastDFS的描述. FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下 ...

  2. 编写HelloWorld并运行

    1在任意地方右键点新建 2创建一个文本文档 3修改名字,改为HelloWorld.java 4打开文件扩展名,查看后缀 打开后再去看文件名后缀有没有.txt,如果有的话就不是java文件,把后缀的.t ...

  3. Hive之权限控制

    Hive之权限 一.库级的权限 -- 授予所有权限给某个用户 grant all on msta to user {userName}; -- 授权admin privilege权限 grant AD ...

  4. 在电脑主机(MainFrame)中只需要按下主机的开机按钮(on()),即可调用其它硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(Hard

    欢迎大家加入我的社区:http://t.csdn.cn/Q52km 社区中不定时发红包 文章目录 1.UML类图 2.源码 3.优缺点 1.UML类图 2.源码 package com.zheng; ...

  5. 一天五道Java面试题----第八天(怎么处理慢查询--------->简述Myisam和innodb的区别)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.怎么处理慢查询 2.ACID靠什么保证的 3.什么是MVCC 4.mysql主从同步原理 5.简述Myisam和inn ...

  6. 齐博x1注意事项:再强调严禁用记事本改任何文件

    提醒大家,X1任何文件,不要用记事本修改.比如这个用户就改出问题了 导致后台不能升级. 当然这是问题之一, 还有其它意料之外的问题.还没发现. 这个用户做一个测试风格. 配置文件可能是用记事本修改的. ...

  7. Android 13 新特性及适配指南

    Android 13(API 33)于 2022年8月15日 正式发布(发布时间较往年早了一些),正式版Release源代码也于当日被推送到AOSP Android开源项目. 截止到笔者撰写这篇文章时 ...

  8. "一键重装系统软件"操作流程

    博主之前重装系统都是直接用win10系统更新里的重置系统(版本不会变化),和U盘重装电脑出厂映像(有各种品牌自带的软件,而且由于是出场版本,版本很低) 所以这次用"小白一键重装系统" ...

  9. 11.pygame飞机大战游戏整体代码

    主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...

  10. SpringCloud微服务实战——搭建企业级开发框架(四十八):【移动开发】整合uni-app搭建移动端快速开发框架-使用第三方UI框架

      uni-app默认使用uni-ui全端兼容的.高性能UI框架,在我们开发过程中可以满足大部分的需求了,并且如果是为了兼容性,还是强烈建议使用uni-ui作为UI框架使用.   如果作为初创公司,自 ...