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的引 ...
随机推荐
- Netty学习(七)-Netty编解码技术以及ProtoBuf和Thrift的介绍
在前几节我们学习过处理粘包和拆包的问题,用到了Netty提供的几个解码器对不同情况的问题进行处理.功能很是强大.我们有没有去想这么强大的功能是如何实现的呢?背后又用到了什么技术?这一节我们就来处理这个 ...
- final,权限,引用类型数据
1. final关键字 1.概述 为了避免子类出现随意改写父类的情况,java提供了关键字final,用于修饰不可改变内容 final:不可改变,可以修饰类,方法和变量 类:被修饰的类,不能用于继承 ...
- SpringBoot分布式:Dubbo+zookeeper
西部开源-秦疆老师:SpringBoot + Dubbo + zookeeper 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! 基础知识 ...
- 记一次上线部分docker不打日志的问题排查
一次正常的上线,发了几台docker后,却发现有的机器打了info.log里面有日志,有的没有.排查问题开始: 第一:确认这台docker是否有流量进来,确认有流量进来. 第二:确认这台docker磁 ...
- (八)c#Winform自定义控件-分割线
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- 帝国CMS(EmpireCMS) v7.5配置文件写入漏洞分析
帝国CMS(EmpireCMS) v7.5配置文件写入漏洞分析 一.漏洞描述 该漏洞是由于安装程序时没有对用户的输入做严格过滤,导致用户输入的可控参数被写入配置文件,造成任意代码执行漏洞. 二.漏洞复 ...
- react native 8081 端口号被占
McAfee Agent 占用8081 端口号 公司电脑被标装,McAfee Agent关不掉 sudo lsof -n -i4TCP:8081 sudo launchctl list | grep ...
- 第一章 .NET基础-1.1.学前入门
一.1.1. 概念:.NET和C# l .NET/DOTNET:一般指.Net Framework框架.一种平台,一种技术.它提供了一个稳定的运行环境:来保障我们.Net平台正常的运转. l C#(C ...
- 《Java 8 in Action》Chapter 2:通过行为参数化传递代码
你将了解行为参数化,这是Java 8非常依赖的一种软件开发模式,也是引入 Lambda表达式的主要原因.行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式.一言以蔽之,它意味 着拿出一个代码 ...
- SpringBoot与Shiro整合权限管理实战
SpringBoot与Shiro整合权限管理实战 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] *观看本文章需要有一定SpringBoot整合经验* Shiro框架简介 Apach ...