一、前言

在上一篇文章【(转载)非常完善的Log4net配置详细说明】介绍了Log4Net的配置说明,如果不知道的可以去看看,这里我们就介绍一下日志记录的实现,说得都比较基础,所以大神请绕过。

二、Log4Net实现

前面介绍了了Log4Net的配置,这里我在把我用的额Log4Net 的配置信息展示出来

<log4net debug="false">
<root>
<level value="ALL" />
</root> <logger name="PFTLog">
<level value="DEBUG"/>
<appender-ref ref="ErrorRollingFileAppender" />
<appender-ref ref="DebugRollingFileAppender" />
<appender-ref ref="InfoRollingFileAppender" />
</logger> <!--数据日志-->
<appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="LogFile\Info\" />
<appendToFile value="true" />
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<Encoding value="UTF-8" />
<!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
<MaxSizeRollBackups value="20" />
<!--是否只写到一个文件中-->
<StaticLogFileName value="false" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<rollingStyle value="Composite" />
<!--按日期产生文件夹和文件名[在日期方式与混合方式下使用]-->
<!--这是按日期产生文件夹,并在文件名前也加上日期-->
<datePattern value="yyyyMMdd-&quot;-Info.log&quot;" />
<!--每个文件的大小。
只在混合方式与文件大小方式下使用。
超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。
不要使用小数,否则会一直写入当前日志-->
<maximumFileSize value="1MB" />
<!--计数类型为1,2,3…-->
<!--<CountDirection value="1" />-->
<!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n记录时间:%date %n线程ID[%thread]
%n日志级别:%-5level %n记录类:%logger %n扩展信息:%property
-%n异常:%exception %n错误描述:%message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender> <!--错误日志-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="LogFile\Error\" />
<appendToFile value="true" />
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<Encoding value="UTF-8" />
<!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
<MaxSizeRollBackups value="20" />
<!--是否只写到一个文件中-->
<StaticLogFileName value="false" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<rollingStyle value="Composite" />
<!--按日期产生文件夹和文件名[在日期方式与混合方式下使用]-->
<!--这是按日期产生文件夹,并在文件名前也加上日期-->
<datePattern value="yyyyMMdd&quot;-Error.log&quot;" />
<!--每个文件的大小。
只在混合方式与文件大小方式下使用。
超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。
不要使用小数,否则会一直写入当前日志-->
<maximumFileSize value="1MB" />
<!--计数类型为1,2,3…-->
<!--<CountDirection value="1" />-->
<!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n记录时间:%date %n线程ID[%thread]
%n日志级别:%-5level %n记录类:%logger %n扩展信息:%property
-%n异常:%exception %n错误描述:%message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender> <!--调试日志-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="LogFile\Debug\" />
<appendToFile value="true" />
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<Encoding value="UTF-8" />
<!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
<MaxSizeRollBackups value="20" />
<!--是否只写到一个文件中-->
<StaticLogFileName value="false" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<rollingStyle value="Composite" />
<!--按日期产生文件夹和文件名[在日期方式与混合方式下使用]-->
<!--这是按日期产生文件夹,并在文件名前也加上日期-->
<datePattern value="yyyyMMdd&quot;-Debug.log&quot;" />
<!--每个文件的大小。
只在混合方式与文件大小方式下使用。
超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。
不要使用小数,否则会一直写入当前日志-->
<maximumFileSize value="1MB" />
<!--计数类型为1,2,3…-->
<!--<CountDirection value="1" />-->
<!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n记录时间:%date %n线程ID[%thread]
%n日志级别:%-5level %n记录类:%logger %n扩展信息:%property
-%n异常:%exception %n错误描述:%message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender> </log4net>

里面配置了3个日志的等级(ERROR,DEBUG和INFO),根据日志的不同等级,记录到对应的文件里面。

下面是具体的实现代码

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
namespace PFT.Standard
{
public class PFTLog
{
private static ILog log = LogManager.GetLogger(Assembly.GetCallingAssembly(), "PFTLog"); public static void Error(string message, Action RegistedProperties)
{
RegistedProperties();
log.Error(message);
}
public static void Error(string message, Exception exception, Action RegistedProperties)
{
RegistedProperties();
log.Error(message, exception);
}
public static void Error(Exception exception, Action RegistedProperties)
{
RegistedProperties();
log.Error("系统Error信息", exception);
} public static void Debug(string message, Action RegistedProperties)
{
RegistedProperties();
log.Debug(message);
}
public static void Debug(string message, Exception exception, Action RegistedProperties)
{
RegistedProperties();
log.Debug(message, exception);
}
public static void Debug(Exception exception, Action RegistedProperties)
{
RegistedProperties();
log.Debug("系统Debug信息", exception);
} public static void Info(string message, Action RegistedProperties)
{
RegistedProperties();
log.Info(message);
}
public static void Info(string message, Exception exception, Action RegistedProperties)
{
RegistedProperties();
log.Debug(message, exception);
}
public static void Info(Exception exception, Action RegistedProperties)
{
RegistedProperties();
log.Info("系统Info信息", exception);
} }
}

其中RegistedProperties注册扩展字段。

例如:C#代码

  LogManager.Info("测试扩展字段", () => {
LogicalThreadContext.Properties["LogType"] = "扩展字段内容";
});

info日志文件为

这样的字段扩展,可以保存到数据库,也可以与第三方传值字段对接,是不是很方便。

三、总结

Log4Net的基本实现,就先介绍到这里。本来计划把与Kibana结合也一起写了,结果发现Kibana结合到具体项目例子,才更方便讲解。所以接下来,我将开始介绍一些单个的模块实现,然后在基于这些模块,搭建一个简单的项目,然后在基于这个项目,写一些项目应用的文章。

Log4Net 日志记录的实现的更多相关文章

  1. log4net日志记录

    这里是接着上一篇来优化的,上篇:ASP.NET MVC中错误日志信息记录 log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件,数据库,EventLog等),日志就是程序的黑 ...

  2. Log4Net日志记录两种方式

     简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.     log4net是Ap ...

  3. C#- 实用的Log4Net日志记录例子

    工作中也是要用到日志记录的,LOG4NET在这块做的不错,以后可以继续拿来用. 1.引用DLL 2.LOG4NET的配置文件 <?xml version="1.0" enco ...

  4. C#Log4net日志记录组件的使用

    一.Log4Net介绍 Log4net是基于.NET开发的一款非常著名的记录日志开源组件.它通过一套XML配置的日志引擎,将日志分不同的等级,分别是:FATAL . ERROR. WARN. INFO ...

  5. Log4Net日志记录介绍

    原文地址 : http://www.cnblogs.com/wolf-sun/p/3347373.html#3009010 简介 log4net库是Apache log4j框架在Microsoft . ...

  6. .net 项目如何添加log4net日志记录

    1.在项目根目录新建文件log4net.config,此文件中的节点解释还请自动百度. 文件实例: <?xml version="1.0"?><configura ...

  7. Log4net日志记录、详细配置(自己使用)

    [来自百度百科的一句介绍]log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. 1.首先添 ...

  8. ASP.NET MVC4中加入Log4Net日志记录功能

    前言 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging等,虽然多多少少使用起来有点费劲,但这里还是简单分享一下Log4Ne ...

  9. Log4net日志记录、详细配置(自己使用>)

    log4net库是Apache log4j框架在Microsoft.NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具 1.首先添加对log4net.dll的引 ...

随机推荐

  1. java并发编程(二十二)----(JUC集合)ConcurrentHashMap介绍

    这一节我们来看一下并发的Map,ConcurrentHashMap和ConcurrentSkipListMap.ConcurrentHashMap通常只被看做并发效率更高的Map,用来替换其他线程安全 ...

  2. [转载]关于ActiveMQ集群

    转载于 http://blog.csdn.net/nimmy/article/details/6247289 近日因工作关系,在研究JMS,使用ActiveMQ作为提供者,考虑到消息的重要,拟采用Ac ...

  3. Notepad++编辑器——Verilog、代码片段、F6编译

    Notepad++是一款精致小巧的编辑器,自带Verilog语法识别功能,插件也挺好用的.这里陈列一下我的设置. 版本:Notepad++ 7.6.6 ,32位 //================= ...

  4. c#小灶——自动类型转换和强制类型转换

    前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢? ; double b = a; Console.WriteLine(b); 运行结果是:1 我们把一个整型的变量赋值给了一个 ...

  5. Spring源码剖析4:其余方式获取Bean的过程分析

    原型Bean加载过程 之前的文章,分析了非懒加载的单例Bean整个加载过程,除了非懒加载的单例Bean之外,Spring中还有一种Bean就是原型(Prototype)的Bean,看一下定义方式: 1 ...

  6. RobotFrameWork Web自动化测试环境搭建

    前言 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于轮次很多的验收 ...

  7. 一句道破所有的springmvc(面试必备)

    springmvc流程 : URL--------前端控制器DispatcherServlet---------HandlerMapping处理器映射器-------调用HandlerAdapter处 ...

  8. shift键复选dataGrid的记录时多余的文本总被选择了。

    document.onkeydown = function(event) { if (event.shiftKey) { document.onselectstart = function(event ...

  9. Log4j2源码分析系列:(一)配置加载

    前言 在实际开发项目中,日志永远是一个绕不开的话题.本系列文章试图以slf4j和log4j2日志体系为例,从源码角度分析日志工作原理. 学习日志框架,首先要熟悉各类日志框架,这里推荐两篇文章,就不再赘 ...

  10. 计算机基础+python初阶

    今日内容: 1.计算机基础知识 2.python简介 3.快速入门 今日内容: 一.计算机基础 1. 计算机什么组成的 输入输出设备 cpu 硬盘 内存 中央处理器 处理各种数据 相当于人的大脑 内存 ...