博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
配置多个Log4net实例
阅读量:5319 次
发布时间:2019-06-14

本文共 3312 字,大约阅读时间需要 11 分钟。

应用场景:

控制软件工程拆分为多个子项目,在开发阶段希望每个子项目的日志是单独的。同时又希望日志统一集中定义在Tools(Tools为工具类项目,生成Tools.dll)下,而不是分散在各个子项目中。这就需要解决以下几个问题:

如何在DLL方案中配置Log4net;如何分类Logger;如何在外部使用Logger。

 

  1.在DLL中使用App.config配置Log4net

    • 使用NuGet添加log4net引用。
    • 为此项目添加应用程序配置文件 Tools.config。
    • 在Assembled中监视此配置文件。
    • 在Tools.config的文件属性中选择"如果较新则复制"。

 

2.在Log4net中配置多个名称的Logger对象
    • 在Tools.config中添加日志配置。其中 <root>定义了日志的记录级别,当前为全记录。<logger/>会继承<root/>的属性。
    • 配置不同的日志输出目标。在配置文件中表现为<appender/>的定义。
    • 关联<logger/>与<appender/>。同时指定<logger>的name属性,获取不同日志对象时使用。

 

 

 
3.在其他项目中使用
 
public static class Logger{  public static ILog DefaultLogger { get; }  public static ILog HardwareLogger { get; }  static Logger()  {    DefaultLogger = LogManager.GetLogger(@"Doraemon.Default");    HardwareLogger = LogManager.GetLogger("Doraemon.Hardware");  }}

 

 

4.单元测试

  

[TestMethod]public void LoggerTest(){  var loggerCollect = new List
()      {          DefaultLogger,          HardwareLogger,      };  var select = loggerCollect.FindAll((p) =>                         p.IsDebugEnabled == p.IsErrorEnabled == p.IsFatalEnabled == p.IsInfoEnabled == p.IsWarnEnabled);  Assert.AreEqual(loggerCollect.Count, select.Count, "日志对象初始化存在问题");}
 
5.参考
ConfigManager.Net - App.config and Web.config helper utility, http://www.codeproject.com/Articles/26544/ConfigManager-Net-App-config-and-Web-config-helperLog4net, http://logging.apache.org/log4net/download_log4net.cgi

 

2016-05-03 更新:

  如果不想将Log4net的配置文件集成在工程.config中,可以将它以XML格式存在在外部文件中。这样做的好处是随时可以自定义格式、自定义目标。配置到外部XML文件并没有什么不同,与配置在.config中及其相似,以下文件存储为log.config.xml.

 

 

在代码中访问也没有什么不同:)

class Program    {        private static readonly ILog log = LogManager.GetLogger(@"Doraemon.Console");//@"Doraemon.UI"); begins by importing log4net related classes.               static void Main(string[] args)        {            // Set up a simple configuration that logs on the console.            XmlConfigurator.Configure(new System.IO.FileInfo(@"log.config.xml"));  //使用正确的配置读取类别            log.Info("Entering application.");            var i = 0;            while (i++ < 10)                log.Info($"i = {i}");            log.Debug("Exiting application.");            Console.ReadLine();        }    }

 

2016-12-15 更新: 格式串

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息%n(new line):换行%d(datetime):输出当前语句运行的时刻%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数%t(thread id):当前语句所在的线程ID%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等%c(class):当前日志对象的名称,例如:%L:输出语句所在的行号%F:输出语句所在的文件名%-数字:表示该项的最小长度,如果不够,则用空格填充

 

转载于:https://www.cnblogs.com/jjseen/p/5086427.html

你可能感兴趣的文章
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
移动、联通和电信,哪家的宽带好,看完你就知道该怎么选了!
查看>>
Linux设置环境变量的方法
查看>>
Atitit.进程管理常用api
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
epoll使用具体解释(精髓)
查看>>
AndroidArchitecture
查看>>
原生JavaScript第六篇
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>