Log4Net 日志记录的实现
一、前言
在上一篇文章【(转载)非常完善的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-"-Info.log"" />
<!--每个文件的大小。
只在混合方式与文件大小方式下使用。
超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位: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"-Error.log"" />
<!--每个文件的大小。
只在混合方式与文件大小方式下使用。
超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位: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"-Debug.log"" />
<!--每个文件的大小。
只在混合方式与文件大小方式下使用。
超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位: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 日志记录的实现的更多相关文章
- log4net日志记录
这里是接着上一篇来优化的,上篇:ASP.NET MVC中错误日志信息记录 log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件,数据库,EventLog等),日志就是程序的黑 ...
- Log4Net日志记录两种方式
简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. log4net是Ap ...
- C#- 实用的Log4Net日志记录例子
工作中也是要用到日志记录的,LOG4NET在这块做的不错,以后可以继续拿来用. 1.引用DLL 2.LOG4NET的配置文件 <?xml version="1.0" enco ...
- C#Log4net日志记录组件的使用
一.Log4Net介绍 Log4net是基于.NET开发的一款非常著名的记录日志开源组件.它通过一套XML配置的日志引擎,将日志分不同的等级,分别是:FATAL . ERROR. WARN. INFO ...
- Log4Net日志记录介绍
原文地址 : http://www.cnblogs.com/wolf-sun/p/3347373.html#3009010 简介 log4net库是Apache log4j框架在Microsoft . ...
- .net 项目如何添加log4net日志记录
1.在项目根目录新建文件log4net.config,此文件中的节点解释还请自动百度. 文件实例: <?xml version="1.0"?><configura ...
- Log4net日志记录、详细配置(自己使用)
[来自百度百科的一句介绍]log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. 1.首先添 ...
- ASP.NET MVC4中加入Log4Net日志记录功能
前言 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging等,虽然多多少少使用起来有点费劲,但这里还是简单分享一下Log4Ne ...
- Log4net日志记录、详细配置(自己使用>)
log4net库是Apache log4j框架在Microsoft.NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具 1.首先添加对log4net.dll的引 ...
随机推荐
- Spring IoC源码解析之getBean
一.实例化所有的非懒加载的单实例Bean 从org.springframework.context.support.AbstractApplicationContext#refresh方法开发,进入到 ...
- 10.Go-goroutine,waitgroup,互斥锁和channel
10.1.goroutine goroutine的使用 //Learn_Go/main.go package main import ( "fmt" "time" ...
- 2019牛客多校训练第三场H.Magic Line(思维)
题目传送门 大致题意: 输入测试用例个数T,输入点的个数n(n为偶数),再分别输入n个不同的点的坐标,要求输出四个整数x1,y1,x2,y2,表示有一条经过点(x1,y1),(x2,y2)的直线将该二 ...
- Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?
前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...
- 什么是HTML,HTML的简介,HTML结构
html:超文本标记语言(Hyper Text Markup Language) ==============基本结构================= <html><!--最外层为 ...
- SAP-采购订单跟踪报表
*&---------------------------------------------------------------------**& Report ZMM_CGDDFX ...
- 洛谷 P3648 [APIO2014]序列分割
题意简述 有一个长度为n的序列,分成k + 1非空的块, 选择两个相邻元素把这个块从中间分开,得到两个非空的块. 每次操作后你将获得那两个新产生的块的元素和的乘积的分数.求总得分最大值. 题解思路 f ...
- JSP引擎、JSP容器、Web服务器
JSP引擎与JSP容器指的都是同一样的东西,他们都是用来同一管理和运行Web引用程序的“软件”.常见的JSP引擎有Tomcat.JRun.Resin 广义上来说,JSP引擎是用来管理和运行Web应用程 ...
- Jupter NotebooK学习
1.参考资料 B站上学习视频 Jupyter 安装与使用 2.安装 在cmd窗口中输入(创建的文件会再当前的目录下):pip install jupyter 然后输入:jupyter notebook ...
- Dubbo(一):Dubbo运行原理
前言: 在开始入门Javaweb时,学的基本都是MVC开发模式,一个项目基本上就是model,view,controller三层.但是随着系统的服务逐渐加多,SOA模式更加适合目前项目开发.而SOA模 ...