WPF之lognet4的基本使用
log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文介绍lognet4的基本使用。
第一步:新建一个项目LoginUI,然后在该项目下新建一个日志管理类LogManager,再添加对lognet4.dll的引用

namespace LoginUI
{
public class LogManager
{
private static LogManager _instance; private static log4net.ILog _logger; protected LogManager()
{
InitialiseLogger();
} public static LogManager Instance
{
get
{
if (_instance == null)
_instance = new LogManager();
return _instance;
}
} public log4net.ILog Logger
{
get { return _logger; }
} void InitialiseLogger()
{
//通过系统配置文件配置logger ,GUIClientLogger这个名称和待会配置文件中的名称要一致
_logger = log4net.LogManager.GetLogger("GUIClientLogger");
}
}
}
第二步:在项目的配置文件App.Config中添加下述代码

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0" />
</configSections>
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="LogFileAppender" />
<!--<appender-ref ref="ConsoleAppender" />-->
</root> <logger name="GUIClientLogger">
<level value="ALL" />
</logger> <!--输出到文件-->
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/" />
<param name="AppendToFile" value="true" /> <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
<param name="MaxSizeToRollBackups" value="-1" /> <!-- 每个文件的大小限制 -->
<param name="MaximumFileSize" value="30MB" /> <!-- RollingStyle Composite 综合 Size 按大小 Date 按时间 -->
<param name="RollingStyle" value="Composite" /> <!--设置文件名后缀的格式,那个"起到的作用是转义,就是把.log当作字面义,而不是时间日期的格式定义,如果要改为txt的格式,把log改为txt即可-->
<param name="DatePattern" value='yyyy-MM-dd/"GUIClientLog.log"' />
<!--<param name="DatePattern" value='yyyy-MM-dd/""GUIClientLog_"yyyyMMdd".log""' />-->
<param name="PreserveLogFileNameExtension" value="true" /> <!-- 关掉固定文件名-->
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]
" />
<param name="Footer" value="[Footer]
" />
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ALL" />
<param name="LevelMax" value="OFF" />
</filter>
</appender> <!--输出控制台-->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
</log4net>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
</configuration>
第三步:在AsseembllyInfo.cs中添加下述代码

[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文件夹下的日志文件看到一条日志消息。


private void btnLogin_Click(object sender, RoutedEventArgs e)
{
User user = new User("10001", "zxtang"); if (txtUserId.Text == user.UserID && txtPassWord.Password == user.Password)
{
LogManager.Instance.Logger.Info(string.Format("User [{0}] login Successd.", txtUserId));
//发送消息
Messenger.Default.Send("", "logIn");
Close();
}
else
{
Messenger.Default.Send("","logOut");
LogManager.Instance.Logger.Info(string.Format("User [{0}] login Falied.", txtUserId));
return;
}
}
WPF之lognet4的基本使用的更多相关文章
- 在WPF中使用依赖注入的方式创建视图
		
在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...
 - MVVM框架从WPF移植到UWP遇到的问题和解决方法
		
MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...
 - MVVM模式解析和在WPF中的实现(六)  用依赖注入的方式配置ViewModel并注册消息
		
MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...
 - MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信
		
MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...
 - MVVM设计模式和WPF中的实现(四)事件绑定
		
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
 - MVVM模式解析和在WPF中的实现(三)命令绑定
		
MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
 - MVVM模式和在WPF中的实现(二)数据绑定
		
MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
 - MVVM模式和在WPF中的实现(一)MVVM模式简介
		
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
 - 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
		
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
 
随机推荐
- 简易的DragDropCarousel 拖拽轮播控件
			
上一篇文章有写到 自动轮播的控件 简易的AutoPlayCarousel 轮播控件 - 黄高林 - 博客园 (cnblogs.com) 本章是基于自动轮播的一种衍生,通过拖拽鼠标进切换 直接上代码 ...
 - 第六十篇:Vue的基本使用
			
好家伙,要来了,经典"hello world" 试用一下vue ① 导入 vue.js的 script 脚本文件 ② 在页面中声明一个将要被vue所控制的DOM区域 ③ 创建vm实 ...
 - KingbaseES V8R6 vacuum index_cleanup 选项
			
描述: 由于索引页的复用不像HEAP TABLE的PAGE复用机制那么简单只要有空闲空间就可以插入.索引页的空闲空间被复用,必须是PAGE的边界内的值才允许插入. 因此索引一旦膨胀,很难收缩,常用的方 ...
 - alter role 导致的数据库无法登录问题
			
ALTER ROLE 用于更改一个数据库角色.只要改角色后续开始一个新会话,指定的值将会成为该会话的默认值,并且会覆盖 kingbase.conf中存在的值或者从命令行收到的值. 显性的更改角色的一 ...
 - OpenHarmony3.0如何轻松连接华为云IoT设备接入平台?
			
摘要:本文主要介绍基于OpenHarmony 3.0版本来对接华为云IoT设备接入IoTDA,以小熊派BearPi-HM_Nano开发板为例,使用huaweicloud_iot_link SDK对接华 ...
 - python的环境,你再也不用愁-conda
			
Conda Guide Conda简介 conda是一个包,依赖和环境管理工具,适用于多种语言,如: Python, R, Scala, Java, Javascript, C/ C++, FORTR ...
 - 使用Docker方式部署Gitlab,Gitlab-Runner并使用Gitlab提供的CI/CD功能自动化构建SpringBoot项目
			
1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html 2.Docker安装Gitlab-runner,地址: ...
 - windows下mysql的数据主主同步
			
mysql主主备份: 保证各服务器上的数据库中的数据一致,因此需要开启数据库同步机制.由于是一整套系统,并且系统内含数据库.由于任何一台服务器都有可能被选中,因此要让所有的数据库上的数据都是最新的,任 ...
 - 第三周python作业
			
import datetime mot = ["今天星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择.", "今天星期二:\n含泪播种的人一定会笑着收." ...
 - 用深度强化学习玩FlappyBird
			
摘要:学习玩游戏一直是当今AI研究的热门话题之一.使用博弈论/搜索算法来解决这些问题需要特别地进行周密的特性定义,使得其扩展性不强.使用深度学习算法训练的卷积神经网络模型(CNN)自提出以来在图像处理 ...