log4net的封装

毋庸置疑,log4net在记日志的功能上无比强大。

但也有诟病的地方,比如配置太麻烦(这里只说记录文件日志,像记入数据库的日志本文不涉及,下同)

之前也看到过园子里有人发的封装成LogHelper的文章,少没少配置我没仔细看,但看下面评论有说日志记录还是有问题的

#8楼 2014-11-17 15:04 aeiiilowx

请教下楼主,使用封装后的loghelper类写日志,在配置文件的布局里,用%c、%f或%l 获取的日志类、文件和行号永远是loghelper类相应的行号了,也就是说不能正确获取到真正日志类、文件和行号了。有遇到这个问题吗?

这个问题我也遇到了,感觉不爽,当时放弃了。

昨天突然想把这个问题给解决掉,说干就干吧

 1     /// <summary>
 2     /// 记录日志Factory
 3     /// </summary>
 4     public class LogFactory
 5     {
 6         /// <summary>
 7         /// 静态构造函数
 8         /// </summary>
 9         static LogFactory()
10         {
11             var element = CreateConfigElement();//创建XmlElement
12             log4net.Config.XmlConfigurator.Configure(element);//配置log4net
13         }
14
15         /// <summary>
16         /// 创建一个ILog,用于记录日志
17         /// </summary>
18         /// <returns></returns>
19         public static log4net.ILog CreateLogger()
20         {
21             StackTrace st = new StackTrace();
22             var arr = st.GetFrame(1);
23             return log4net.LogManager.GetLogger(arr.GetMethod().DeclaringType);
24         }
25         /// <summary>
26         /// 创建配置log4net需要用到的XmlElement
27         /// </summary>
28         /// <returns></returns>
29         public static XmlElement CreateConfigElement()
30         {
31             var logDir = ConfigurationManager.AppSettings["LogDirectory"] ?? "";//获取配置文件中的日志目录
32             if(string.IsNullOrWhiteSpace(logDir))
33                 throw new DirectoryNotFoundException("please check the key ‘LogDirectory‘ in appsettings");
34             StringBuilder sb=new StringBuilder();
35             sb.Append(@"<?xml version=""1.0""?>");
36             //sb.Append(@"<configuration>");
37             //sb.Append(@"<configSections>");
38             //sb.Append(@"<section name=""log4net"" type=""log4net.Config.Log4NetConfigurationSectionHandler, log4net"" />");
39             //sb.Append(@"</configSections>");
40             sb.Append(@"<log4net>");
41             sb.Append(@"<appender name=""myAppender"" type=""log4net.Appender.RollingFileAppender,log4net"">");
42             sb.Append(@"<param name=""File"" value="""+logDir+@"""/>");
43             sb.Append(@"<param name=""AppendToFile"" value=""true""/>");
44             sb.Append(@"<param name=""RollingStyle"" value=""Composite""/>");
45             sb.Append(@"<param name=""DatePattern"" value=""yyyy-MM-dd/HH&quot;.log&quot;""/>");
46             sb.Append(@"<param name=""maximumFileSize"" value=""2MB""/>");
47             sb.Append(@"<param name=""maxSizeRollBackups"" value=""100""/>");
48             sb.Append(@"<param name=""StaticLogFileName"" value=""false""/>");
49             sb.Append(@"<layout type=""log4net.Layout.PatternLayout,log4net"">");
50             sb.Append(@"<param name=""ConversionPattern"" value=""%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %n%m%n""/>");
51             sb.Append(@"<param name=""Header"" value=""
----------------------header--------------------------
""/>");
52             sb.Append(@"<param name=""Footer"" value=""
----------------------footer--------------------------
""/>");
53             sb.Append(@"</layout>");
54             sb.Append(@"<filter type=""log4net.Filter.LevelRangeFilter"">");
55             sb.Append(@"<levelMin value=""INFO"" />");
56             sb.Append(@"<levelMax value=""ERROR"" />");
57             sb.Append(@"</filter>");
58             sb.Append(@"</appender>");
59             sb.Append(@"<!-- 所有日志 -->");
60             sb.Append(@"<root>");
61             sb.Append(@"<!-- 记录日志的日志级别: ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->");
62             sb.Append(@"<priority value=""ALL""/>");
63             sb.Append(@"<appender-ref ref=""myAppender""/>");
64             sb.Append(@"</root>");
65             sb.Append(@"</log4net>");
66             //sb.Append(@"</configuration>");
67
68             XmlDocument doc=new XmlDocument();
69             doc.LoadXml(sb.ToString());
70             return doc.DocumentElement;
71         }
72     }

LogFactory

1         private static readonly log4net.ILog Logger = LogFactory.CreateLogger();
2         static void Main(string[] args)
3         {
4             Logger.Info("test message");
5         }

使用方法

需要在配置文件内内添加

1   <appSettings>
2     <add key="LogDirectory" value="D:\log\Test\"/>
3   </appSettings>

----------------------header--------------------------
2016-11-10 11:42:21,567 [1] INFO _17MCP.Logger.Test.Program [(null)] <(null)> -
test message

----------------------footer--------------------------

上面就是记录的内容。

很简单的东西

封装后的log4net传送门在此

log4net.zip

时间: 2024-10-12 23:21:08

log4net的封装的相关文章

log4net使用封装,无缝切换 dotnet 和 dotnetcore

原文:log4net使用封装,无缝切换 dotnet 和 dotnetcore log4net使用封装,无缝切换 dotnet 和 dotnetcore Intro 自己有几个自己的小项目,有许多公用的方法/扩展/工具类等等,于是封装了一些常用的工具类/扩展方法 WeihanLi.Common,日志使用了自己比较常用的 log4net,开始默认使用的log4net进行处理日志,在1.0.12版本之前直接依赖 log4net,后来觉得这样做不太好,一是多了 log4net 这一依赖而且有点一个公共

在C#代码中应用Log4Net(二)典型的使用方式

不管用什么框架,学什么东西,最初的想法还不是尽快地用上这个框架,所以我们在这个章节还是不打算介绍具体配置节的应用,而是直接给出一个经典的使用样例,让你尽快上手.即使你对Log4Net的配置不熟悉也完全没有关系. (下面的文章假定你已经看过了第一篇,当然在有的操作中,我还是会简单地重复第一篇,以便加深你的记忆) 先说说这篇教程的思路,我们打算使用Log4Net,首先必须先引入Log4Net的库:然后我们要对Log4Net进行一些配置:最后,我们会在代码里面使用它. 1.引入Log4Net.dll组

基于Log4Net的日志系统

阅读目录 日志系统应具备的特性 Log4Net 配置文件:log4net.config 初始化 输出信息 对Log4Net的封装 log4net.config复杂配置 不管是Web应用程序还是WinForm应用程序,Visual Studio所带的调试功能都是足够强大,足以应付开发中的各种调试需求.但是,对于已经发布的应用,要记录错误.记载运行中的各种状态信息,就需要依靠日志系统了. 回到顶部 日志系统应具备的特性 一个好的日志系统,应该具备以下的特性: 1.运行稳定.因为日志的作用就是要在系统

整理自己的.net工具库

前言 今天我会把自己平日整理的工具库给开放出来,提供给有需要的朋友,如果有朋友平常也在积累欢迎提意见,我会乐意采纳并补充完整.按照惯例在文章结尾给出地址^_^. 之前我开放其他源码的时候(Framework.MongoDB.AutoBuildEntity),都有引用我的Framework工具库,但是为什么现在才开放出来呢原因有几点: 相对简单平常收集的朋友应该有很多 真想要可以去我开源代码反编译 之前遇到的奇葩事 遇到了个什么奇葩事呢,<.net平台的MongoDB使用>在我写的这篇文章最后一

简单封装的Log4net

1. [代码]使用     log = new Logger(this.GetType());log.Info("Hello world.");2. [代码]第二个版本,修复了Console重复发送消息的问题     using System;using System.Collections.Generic;using System.Text; using log4net;using log4net.Config;using log4net.Appender;using log4net

如何在通用权限管理系统中集成log4net日志功能

开发人员都知道,在系统运行中要记录各种日志,自己写一个日志功能,无论是在效率还是功能扩展上来说都不是很好,目前大多用的是第三方的日志系统,其中一个非常有名,用的最多的就是log4net.下面是关于这个组件的介绍 ”Log4net是基于.net开发的一款非常著名的记录日志开源组件.最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源, 于另外的一个非常著名的姐妹组件-log4j.现由Apache组织开发与维护.此日志架构是可灵活扩展,且通过配置文件来设置日志的属性及输出,

log4net.dll添加报错

描述: 新建项目Log4Net类库项目,添加log4net.dll,封装Log类对日志进行操作 新建webForm项目添加Log4Net类库生成的dll生成日志,页面报错,未能加载文件或程序集log4net,找到的程序集清单定义与程序集引用不匹配 找错:使用NuGet查找最新的log4net.dll稳定版本,2.0.8,添加之后还是报错,各种版本试了一遍,webform项目的framework版本是4.5,log4net.dll的版本也选的4.5 继续查找错误,检查[assembly: log4

程序的记事本--log4net

你是否在遇到程序运行问题时经常百度?你是否在遇到运行错误时经常去询问别人?如果有那么是时候改变啦,对于一个Developer来说那是不专业的表现,专业的Developer都会首先查看程序的运行日志,先从日志下手,分析问题发生的原因,然后修复它.这里面最重要的就是日志,那么你也就会很好奇,这些日志是如何记录的呢,偷偷的告诉你通常使用的是日志管理框架.那么是不是也想在开发程序时开发出一个日志管理的模块呢,不用着急下面就来介绍下如何做日志管理. 就我所知现在日志管理框架有多种如 Enterprise.

(一)使用log4net生成日志文件

1.引入log4net.dll 1.1 Nuget安装 或 http://logging.apache.org/log4net/下载log4net的源代码,编译后把log4net.dll引入项目. 2.配置log4net.config 2.1 在Web.config文件中进行添加configSections的节点 <configSections> <section name="log4net" type="log4net.Config.Log4NetConf