C# 利用Log4Net进行日志记录
概述
本文主要简单说明如何使用Log4Net进行日志记录,在程序开发过程中记录日志的优点:
- 它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;
- 一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。
- 日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。
关于Log4Net的官方说明:
The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets. log4net is a port of the excellent Apache log4j™ framework to the Microsoft® .NET runtime. We have kept the framework similar in spirit to the original log4j while taking advantage of new features in the.NET runtime。
【粗略翻译】Apache log4net 类库是一个帮助程序员输出日志状态到多种目标平台。log4net 是优秀的 Apache log4jTM 框架在微软.Net平台的一个实现。在保持原有log4j的思想的前提下,同时利用.Net的新特性。
Log4Net 在程序中使用,可以通过配置文件,进行配置,也可以通过程序代码进行定义。本文主要讲解一下通过配置的方式实现
配置文件结构,如下图所示:

配置文件可以配置在App.config中【编译后会生成对应的[程序名].exe.config】,也可以配置在独立的xml文件中。
如果配置在独立的xml文件中,需要在Assembly.cs中增加一句说明,如下所示:
[assembly: log4net.Config.DOMConfigurator(ConfigFile = "Log4NetConfig.xml", ConfigFileExtension = "xml", Watch = true)]
如果配置在App.config中,除了配置log4net节点外,还要对节点进行声明,即要增加configSection节点【放在根节点的第一个元素】,如下所示
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
生成的日志文件内容,如下图所示:

核心代码
代码如下:
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; [assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace DemoLog4Net
{
/// <summary>
/// 日志记录
/// </summary>
public class LogHelper
{
/// <summary>
/// 日志实例
/// </summary>
private static ILog logInstance=LogManager.GetLogger("testApp"); public static void WriteLog(string message ,LogLevel level) {
switch (level) {
case LogLevel.Debug:
logInstance.Debug(message);
break;
case LogLevel.Error:
logInstance.Error(message);
break;
case LogLevel.Fatal:
logInstance.Fatal(message);
break;
case LogLevel.Info:
logInstance.Info(message);
break;
case LogLevel.Warn:
logInstance.Warn(message);
break;
default:
logInstance.Info(message);
break;
}
}
} public enum LogLevel {
Debug=,
Error=,
Fatal=,
Info=,
Warn=
}
}
独立配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
<logger name="testApp">
<level value="DEBUG" />
</logger>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<param name="File" value="${TMO}log-file.txt" />
<StaticLogFileName value="false"/>
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header] "/>
<param name="Footer" value="[Footer] "/>
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
</log4net>
附加:
如何设置环境变量:
System.Environment.SetEnvironmentVariable("TMO", DateTime.Now.ToString("yyyyMMdd"));
日志记录优先级如下表所示:
| 级别 | 允许的方法 | Boolean属性 | 优先级别 |
| OFF | Highest | ||
| FATAL | void Fatal(...); | bool IsFatalEnabled; | |
| RROR | void Error(...); | bool IsErrorEnabled; | |
| WARN | void Warn(...); | bool IsWarnEnabled; | |
| INFO | void Info(...); | bool IsInfoEnabled; | |
| DEBUG | void Debug(...); | bool IsDebugEnabled; | |
| ALL | Lowest |
备注:
log4net确实是一个应用广泛且简单好用的日志记录框架,本文只是简单的说明,后续工作中会继续研究其他的功能
C# 利用Log4Net进行日志记录的更多相关文章
- Log4Net异常日志记录在asp.net mvc3.0的应用
前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...
- Log4Net异常日志记录在asp.net mvc3.0的应用(转载)
这篇博客写的很好:http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html 前言 log4net是.Net下一个非常优秀的开源 ...
- 【改进】用Log4net建立日志记录
上一篇随笔中只使用了普通的文件读写来进行日志的写入,正如很多朋友说的,频繁的对文件进行读写会造成很多的问题,代码缺少边界控制和操作控制,没有对资源进行管理,是非常典型的bad code. 然后经过前辈 ...
- 【转】使用Log4Net进行日志记录
首先说说为什么要进行日志记录.在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分.它可以记录下系统所产生的所有行为,并按照某种规范表达出来.我们可以使用日志系统所记录的信息为系统进行排错, ...
- 利用log4net创建日志文件时过滤日志,这是坑还是?
前言 网上貌似没有太多关于log4net过滤日志的资料,在研究过程中发现一点小问题,这里做下记录,希望对后续有用到的童鞋起到一丢丢帮助作用. log4net日志过滤 由于是在.NET Core中使用, ...
- winform 应用log4net做日志记录到mysql
1.nuget装log4net 2.nuget控件台装 mysql.data Install-Package mysql.data -version 6.8.3 (太高的版本用不了,切记) 3.修改a ...
- C# 利用log4net 把日志写入到数据库表中
效果图: 1:第一步创建SQL表结构 CREATE TABLE [dbo].[LogDetails] ( [LogID] int NOT NULL IDENTITY(1,1) , [LogDat ...
- C# 利用log4net 把日志写入到数据库
效果图: 1:第一步创建SQL表结构 CREATE TABLE [dbo].[LogDetails] ( [LogID] int NOT NULL IDENTITY(1,1) , [Log ...
- webAPI中使用log4net进行日志记录
1.从nuget下载log4net 2.根据需求配置web.config,或者另外写一个log4net.config文件,各个节点的意义详细查询api <section name="l ...
随机推荐
- Scala - Tips
1- 运行scala命令,提示报错 问题现象: 在Windows7系统中安装scala后(直接安装MSI包,或者解压zip包添加环境变量的方式),执行scala命令报错,但可以执行scala -ver ...
- MapReduce中的Join
一. MR中的join的两种方式: 1.reduce side join(面试题) reduce side join是一种最简单的join方式,其主要思想如下: 在map阶段,map函数同时读取两个文 ...
- Java核心技术及面试指南 面向对象部分的面试题总结以及答案
问题2.7.1,开放性问题,说一下你对面向对象思想的了解. 要点1,先说基础概念,比如面向对象思想包括封装.继承.多态,然后说些语法,比如可以通过extends继承类.通过implement来实现接口 ...
- mysql 开发基础系列6 数值与日期函数
一. 数值函数 1. abs(x) 返回x的绝对值 SELECT ABS(-0.8),ABS(0.8); 2.ceil(x) 返回大于x的最大整数 SELECT CEIL(-0.8),CEIL(0. ...
- 搞懂ES6的import export
引言 说来惭愧,这两个关键字几乎天天在写,但是自己写的模块export出去的对象,import居然拿不到,也是没谁了
- Activity的生命周期函数
前言: 上一篇文章写了关于Activity生命周期和生命周期状态的介绍,这一篇文章给大家聊聊Activity生命周期函数. 主Activity: 应用程序的入口一般都是桌面应用程序图标,用户点击应用图 ...
- shell脚本示例:计算毫秒级、微秒级时间差
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 有时候需要计算命令的执行时间长度,可以使用time命令,虽然t ...
- Git+Gitlab+Ansible剧本实现一键部署动态网站(二)--技术流ken
项目前言 之前已经写了一篇关于git和ansible的博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>.关于git,gitliab,ansible在我 ...
- Hystrix降级逻辑中如何获取触发的异常
通过之前Spring Cloud系列教程中的<Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)>一文,我们已经知道如何通过Hystrix来保护自己的服务不被外 ...
- 记录Newtonsoft.Json的日常用法
最近在做一个使用基于.net mvc 实现前后台传输Json的实例.网上找了一些资料.发现在开发的时候,许多的数据交互都是以Json格式传输的.其中涉及序列化对象的使用的有DataContractJs ...