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 ...
随机推荐
- c# 导入导出excel方法封装
在很多项目中,都会使用到文件的上传下载等,为了方便,封装了一个帮助类,每次直接拿过来使用就可以了,下面是封装的类和使用方法. using Common.AttributeHelper; using N ...
- 微信小程序开发-第一弹
前言: 本篇文章为大家详细介绍微信小程序开发第一篇,后续步骤会逐步更新,欢迎大家关注. 第一步 注册 1.1 打开网址 https://mp.weixin.qq.com/ ...
- web.xml配置web中的key points(上)
一.定义 定义时注意:xml元素是区分大小写的. <web-app></web-app> 这些必须小写 二.url-pattern 1)url-pattern 的值必须以/或者 ...
- 前端测试框架Jest系列教程 -- Mock Functions(模拟器)
写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...
- 【深度学习与TensorFlow 2.0】入门篇
注:因为毕业论文需要用到相关知识,借着 TF 2.0 发布的时机,重新捡起深度学习.在此,也推荐一下优达学城与 TensorFlow 合作发布的TF 2.0入门课程,下面的例子就来自该课程. 原文发布 ...
- MySQL数据库——表操作
I.表操作 一.创建表 基本语法如下: create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=utf8: ...
- UnicodeDecodeError: 'ascii' codec can't decode byte
这个问题遇到过很多次了,但是每次都没记住,用完就忘了,这次记录下. 通过关键词谷歌一下: 解决方案: # encoding=utf8 import sys reload(sys) sys.setdef ...
- javascript小实例,移动端页面中的拖拽
上文说到,想将移动端的拖拽说一说,那现在趁有时间,就将这个福利文带来了,哈哈! 在我还不知道怎么做移动端的手势操作的时候,我觉得这TM实在是太难了,这是多么高深的学问啊,手势操作耶,上滑下滑左滑右滑的 ...
- TypeScript学习之WebStorm(1)
修改快捷键 本没有想要修改快捷键,调试的时候下意识的 按F10,发现还是习惯使用visual studio的快捷键.WebStorm支持修改快捷键,File=>Settings=>Keym ...
- 第一册:lesson seventy five。
原文: Uncomfortable Shoes. Do you have any shoes like this? What size? Size five. What color? Black. I ...