log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文介绍lognet4的基本使用。

第一步:新建一个项目LoginUI,然后在该项目下新建一个日志管理类LogManager,再添加对lognet4.dll的引用

  1.  

  1. namespace LoginUI
  2. {
  3. public class LogManager
  4. {
  5. private static LogManager _instance;
  6.  
  7. private static log4net.ILog _logger;
  8.  
  9. protected LogManager()
  10. {
  11. InitialiseLogger();
  12. }
  13.  
  14. public static LogManager Instance
  15. {
  16. get
  17. {
  18. if (_instance == null)
  19. _instance = new LogManager();
  20. return _instance;
  21. }
  22. }
  23.  
  24. public log4net.ILog Logger
  25. {
  26. get { return _logger; }
  27. }
  28.  
  29. void InitialiseLogger()
  30. {
  31. //通过系统配置文件配置logger ,GUIClientLogger这个名称和待会配置文件中的名称要一致
  32. _logger = log4net.LogManager.GetLogger("GUIClientLogger");
  33. }
  34. }
  35. }

第二步:在项目的配置文件App.Config中添加下述代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3. <configSections>
  4. <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0" />
  5. </configSections>
  6. <log4net>
  7. <root>
  8. <level value="WARN" />
  9. <appender-ref ref="LogFileAppender" />
  10. <!--<appender-ref ref="ConsoleAppender" />-->
  11. </root>
  12.  
  13. <logger name="GUIClientLogger">
  14. <level value="ALL" />
  15. </logger>
  16.  
  17. <!--输出到文件-->
  18. <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
  19. <param name="File" value="Log/" />
  20. <param name="AppendToFile" value="true" />
  21.  
  22. <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
  23. <param name="MaxSizeToRollBackups" value="-1" />
  24.  
  25. <!-- 每个文件的大小限制 -->
  26. <param name="MaximumFileSize" value="30MB" />
  27.  
  28. <!-- RollingStyle Composite 综合 Size 按大小 Date 按时间 -->
  29. <param name="RollingStyle" value="Composite" />
  30.  
  31. <!--设置文件名后缀的格式,那个&quot;起到的作用是转义,就是把.log当作字面义,而不是时间日期的格式定义,如果要改为txt的格式,把log改为txt即可-->
  32. <param name="DatePattern" value='yyyy-MM-dd/"GUIClientLog.log"' />
  33. <!--<param name="DatePattern" value='yyyy-MM-dd/"&quot;GUIClientLog_&quot;yyyyMMdd&quot;.log&quot;"' />-->
  34. <param name="PreserveLogFileNameExtension" value="true" />
  35.  
  36. <!-- 关掉固定文件名-->
  37. <param name="StaticLogFileName" value="false" />
  38. <layout type="log4net.Layout.PatternLayout">
  39. <param name="Header" value="[Header]
  40. " />
  41. <param name="Footer" value="[Footer]
  42. " />
  43. <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
  44. </layout>
  45. <filter type="log4net.Filter.LevelRangeFilter">
  46. <param name="LevelMin" value="ALL" />
  47. <param name="LevelMax" value="OFF" />
  48. </filter>
  49. </appender>
  50.  
  51. <!--输出控制台-->
  52. <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  53. <layout type="log4net.Layout.PatternLayout">
  54. <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
  55. </layout>
  56. </appender>
  57. </log4net>
  58. <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
  59. </configuration>

第三步:在AsseembllyInfo.cs中添加下述代码

  1. [assembly:log4net.Config.XmlConfigurator(ConfigExtension="Config",Watch=true)]

输出样式:

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

第四步:使用LoggerManager记录日志信息,btnLogin是那个登陆按钮,点击按钮后就能在启动目录下的Log文件夹下的日志文件看到一条日志消息。

  1. private void btnLogin_Click(object sender, RoutedEventArgs e)
  2. {
  3. User user = new User("10001", "zxtang");
  4.  
  5. if (txtUserId.Text == user.UserID && txtPassWord.Password == user.Password)
  6. {
  7. LogManager.Instance.Logger.Info(string.Format("User [{0}] login Successd.", txtUserId));
  8. //发送消息
  9. Messenger.Default.Send("", "logIn");
  10. Close();
  11. }
  12. else
  13. {
  14. Messenger.Default.Send("","logOut");
  15. LogManager.Instance.Logger.Info(string.Format("User [{0}] login Falied.", txtUserId));
  16. return;
  17. }
  18. }

WPF之lognet4的基本使用的更多相关文章

  1. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  2. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  3. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  4. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  5. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  6. MVVM模式解析和在WPF中的实现(三)命令绑定

    MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  7. MVVM模式和在WPF中的实现(二)数据绑定

    MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  8. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  9. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

随机推荐

  1. Html飞机大战(一):绘制动态背景

    好家伙,飞机大战终于开始弄了 这会有很多很多复杂的东西,但是我们总要从最简单,和最基础的部分开始,   我们先从背景开始弄吧! 1.绘制静态背景 这里我们会用到canvas <!DOCTYPE ...

  2. Flume 组件安装配置

    下载和解压 Flume 实验环境可能需要回至第四,五,六章(hadoop和hive),否则后面传输数据可能报错(猜测)! 可 以 从 官 网 下 载 Flume 组 件 安 装 包 , 下 载 地 址 ...

  3. KingbaseES 中select distinct on 语句

    用法 SELECT DISTINCT ON ( expression [, ...] ) 把记录根据[, -]的值进行分组,分组之后仅返回每一组的第一行. 需要注意的是,如果不指定ORDER BY子句 ...

  4. Yarn上运行spark-shell和spark-sql命令行

    spark-shell On Yarn spark-shell \ --master yarn-client \ --executor-memory 1G \ --num-executors 10 s ...

  5. 原生JavaScript对【DOM元素】的操作——增、删、改、查

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. C 语言 struct 第一个成员变量的妙用

    一.双重身份 如下定义了一个 School 结构体: typedef struct School { int a; int b; }SCHOOL_S; SCHOOL_S stSch; 下面我们来输出一 ...

  7. [Python]-字典-实践经验总结

    字典是Python中常用的一个数据类型. 与列表有相似的用法,表现在列表的下标和字典的键值可以通过相似的方式读取数据: list_name[0] = value dict_name['key'] = ...

  8. day03-代码实现02

    多用户即时通讯系统03 4.编码实现02 4.2功能实现-拉取在线用户 4.2.1思路分析 客户端想要知道在线用户列表,就要向服务器发送请求(Message),因为只有服务器端保持着所有与客户端相连接 ...

  9. MyCLI :一个支持自动补全和语法高亮的 MySQL/MariaDB 客户端

    MyCLI 是一个易于使用的命令行客户端,可用于受欢迎的数据库管理系统 MySQL.MariaDB 和 Percona,支持自动补全和语法高亮.它是使用 prompt_toolkit 库写的,需要 P ...

  10. 从dva到vuex的使用方法()

    官网文档:https://vuex.vuejs.org/zh/ 辅助理解的博客:https://blog.csdn.net/m0_70477767/article/details/125155540 ...