一、log4net简单实例创建步骤如下

1、第一步:在项目中添加对log4net.dll的引用,这里引用版本是2.0.8.0

2、第二步:程序启动时读取log4net的配置文件。

  读取log4net的配置文件有两种方式

  (1)如果是CS程序,在根目录的Program.cs中的Main方法中添加:log4net.Config.XmlConfigurator.Configure();

      如果是BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加:log4net.Config.XmlConfigurator.Configure();

  (2)无论BS还是CS程序都可直接在项目的AssemblyInfo.cs文件里添加以下的语句:[assembly: log4net.Config .XmlConfigurator()]

3、第三步:在程序使用。

二、具体代码解析

  1、建立日志级别枚举

  

   public enum ELogLevel
{
/// <summary>
/// 错误信息
/// </summary>
Error = ,
/// <summary>
/// 跟踪信息
/// </summary>
Trace = ,
/// <summary>
/// 调试信息
/// </summary>
Debug = ,
/// <summary>
/// 记录信息
/// </summary>
Info =
}

  2、定义ILog接口

   public interface ILogger : IDisposable
{
void LogWithTime(string msg, ELogLevel logLevel = ELogLevel.Error);
bool Enabled { get; set; }
}

  3、实现ILog接口并且通过代码读取log4net.xml

   public class FileLogger : ILogger
{
private log4net.ILog _log = null;
private string _configLogLevel = null;
private bool _enabled = true; public FileLogger()
{
this._configLogLevel = GetAppSettingValue("LogLevel");
string logName = GetAppSettingValue("LogName");
string configPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.xml");
log4net.Config.XmlConfigurator.Configure(new FileInfo(configPath));
this._log = log4net.LogManager.GetLogger(logName);
}
/// <summary>
/// 获取AppSetting的值
/// </summary>
/// <returns></returns>
public static string GetAppSettingValue(string key)
{
string value = null;
foreach (string item in System.Configuration.ConfigurationManager.AppSettings)
{
if (item.Equals(key, StringComparison.CurrentCultureIgnoreCase))
{
value = System.Configuration.ConfigurationManager.AppSettings[key];
break;
}
}
return value;
} #region ILogger成员
public void LogWithTime(string msg, ELogLevel logLevel)
{
if (string.IsNullOrWhiteSpace(msg) || !this._enabled)
{
return;
}
#if DEBUG
Trace.TraceInformation(msg);
#endif
if (string.IsNullOrWhiteSpace(this._configLogLevel))
{
this._configLogLevel = ((int)ELogLevel.Error).ToString();
}
int configLogLevel = Convert.ToInt32(this._configLogLevel);
if ((int)logLevel <= configLogLevel)
{
try
{
switch (logLevel)
{
case ELogLevel.Error:
this._log.Error(msg);
break;
case ELogLevel.Trace:
this._log.Warn(msg);
break;
case ELogLevel.Debug:
this._log.Debug(msg);
break;
case ELogLevel.Info:
this._log.Info(msg);
break;
default:
break;
}
}
catch
{
}
}
} public bool Enabled
{
get { return this._enabled; }
set { this._enabled = value; }
}
#endregion #region IDisposable
public void Dispose()
{ }
#endregion
}

  4、使用log4net

   public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void btnLog4net_Click(object sender, EventArgs e)
{
ILogger _fileLogger = new FileLogger();
_fileLogger.LogWithTime("log4net 日志记录",ELogLevel.Info);
MessageBox.Show("生成的日志地址:"+System.AppDomain.CurrentDomain.BaseDirectory);
}
}

三、log4net.xml配置

<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
<appender name="FlatFile" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="logs/website.log" />
<param name="Encoding" value="utf-8" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="ImmediateFlush" value="true" />
<param name="MaximumFileSize" value="50MB"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="DatePattern" value="-yyyy.MM.dd'.log'" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%-5level [%logger] - %message [%date] %newline" />
</layout>
</appender>
<root>
<priority value="DEBUG" />
<appender-ref ref="FlatFile" />
</root>
</log4net>

四、注意事项

  在Debug模式一切正常,但是在release模式下log4net不工作,查了很多资料,终于解决。具体做如下检查修改。

  1、检查log4net写入日志文件路径是否正确;

  2、检查对应日志文件路径是否有权限;

  3、检查程序log4net配置获取路径;

  最常见的问题是第三步,一般都是在AssemblyInfo.cs文件中写入如下代码

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

但这个方式在Debug模式下没有问题,但是在release模式下就不好用了,需要在Global.asax文件中具体再次指定配置文件所在位置,例如:

string configPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.xml");
log4net.Config.XmlConfigurator.Configure(new FileInfo(configPath));

重新编译发布就可以了。

下一篇介绍NLog日志

日志学习系列(二)——Log4net的实例的更多相关文章

  1. 日志学习系列(一)——Log4net的基础知识学习

    今天把Log4net日志记录做了封装,作为一个公共的类库.记录一下应该注意的地方.先了解一下log4net的理论知识. 参考百度百科 一.log4net是什么? log4net库是Apache log ...

  2. 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

    项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...

  3. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  4. Maven学习系列二(1-5)

    Maven学习系列二(1-5) 本文转自 QuantSeven 博客,讲解精炼易懂,适合入门,链接及截图如下 http://www.cnblogs.com/quanyongan/category/47 ...

  5. scrapy爬虫学习系列二:scrapy简单爬虫样例学习

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  6. DocX开源WORD操作组件的学习系列二

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  7. [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参

    [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...

  8. RabbitMQ学习系列二-C#代码发送消息

    RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...

  9. .net reactor 学习系列(二)---.net reactor界面各功能说明

    原文:.net reactor 学习系列(二)---.net reactor界面各功能说明         安装了.net reactor之后,可以在安装目录下找到帮助文档REACTOR_HELP.c ...

随机推荐

  1. 使用Flume消费Kafka数据到HDFS

    1.概述 对于数据的转发,Kafka是一个不错的选择.Kafka能够装载数据到消息队列,然后等待其他业务场景去消费这些数据,Kafka的应用接口API非常的丰富,支持各种存储介质,例如HDFS.HBa ...

  2. 精读《React PowerPlug 源码》

    1. 引言 React PowerPlug 是利用 render props 进行更好状态管理的工具库. React 项目中,一般一个文件就是一个类,状态最细粒度就是文件的粒度.然而文件粒度并非状态管 ...

  3. [七]JavaIO之 PipedInputStream 和 PipedInputStream

    管道简介

  4. windows powershell一些操作

  5. Scala(四) —— 集合

    一.List var x = List(1,2,3,4) //x:List[Int] = List(1, 2, 3, 4) var y = List("x","y&quo ...

  6. 第25章 退出外部身份提供商 - Identity Server 4 中文文档(v1.0.0)

    当用户注销 IdentityServer并且他们使用外部身份提供程序登录时,可能会将其重定向到注销外部提供程序.并非所有外部提供商都支持注销,因为它取决于它们支持的协议和功能. 要检测是否必须将用户重 ...

  7. MTF测试图卡规格

    1.Imatest Chart Finder计算图卡大小 测试camera MTF时,需要知道所需要的图卡的大小,Imatest提供了一个网页,只要输入sensor的像素, 镜头的视场角,还有镜头到图 ...

  8. CentOS 7上安装Docker 1.8

    Docker支持运行在以下CentOS版本: CentOS 7.X 安装在二进制兼容的EL7版本如 Scientific Linux也是可能成功的,但是Docker没有测试过并且不官方支持. 此文带你 ...

  9. 【学习笔记】非监督学习-k-means

    目录 k-means k-means API k-means对Instacart Market用户聚类 Kmeans性能评估指标 Kmeans性能评估指标API Kmeans总结 无监督学习,顾名思义 ...

  10. TensorFlow资料汇总

    升级mac自带的python 使用virtualenv进行python环境隔离 tf.nn.conv2d.卷积函数 max_pool 池化函数 TF.VARIABLE.TF.GET_VARIABLE. ...