现在项目涉及的是cs客户端,在项目中使用log4net记录本地日志和异常信息,这里项目做完了,想着自己做一个demo,测试记录一下log4Net的配置使用。

第一步、新建一个wpf应用程序,项目右键 -----》点击NuGet程序包 -----》搜索lognet -------》点击安装

第二步:在app.config中添加节点  (当然,如果是Web项目就是 web.config)

配置文件代码如下:

<configuration>
<configSections>
<!--log4net配置-->
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<!--log4net配置-->
<log4net>
<!--定义输出到文件中-->
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<!--file可以指定具体的路径 D://logfile.txt。-->
<file value="D://logfile.txt"/>
<!--如果放在Debug下,当然名字你可以改 -->
<!--<file value="log//logfile.txt"/>-->
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<!--备份log文件的个数最多10个-->
<maxSizeRollBackups value="" />
<!--每个log文件最大是2M,如果超过2M将重新创建一个新的log文件,并将原来的log文件备份。-->
<maximumFileSize value="2MB" />
<datePattern value="yyyyMMdd-HH:mm:ss"/>
<layout type="log4net.Layout.PatternLayout">
<!--输出格式-->
<!--样例:-- ::, [] INFO Log4NetDemo.MainClass [(null)] - info-->
<conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline"/>
</layout>
</appender>
<!--定义日志的输出媒介-->
<root>
<!--指定将此级别及以上的log打印到log文件中-->
<level value="DEBUG"/>
<!--文件形式记录日志-->
<appender-ref ref="LogFileAppender"/>
</root>
</log4net>
</configuration>

把配置加到app.config中,如图所示

第三步:

 在项目中找到Properties文件夹中找到AssemblyInfo.cs 在代码追后 添加 [assembly: log4net.Config.XmlConfigurator(Watch = true)]

第四步:添加操作log4net的后台代码

xaml文件创建按钮

<Button Name="logBtn" Click="LogBtn_Click" Content="创建日志" Width="" Height=""></Button>

xaml.cs 添加执行操作代码

private void LogBtn_Click(object sender, RoutedEventArgs e)
{
string strLog = String.Format("[Thread ID:{0}]{1}", AppDomain.GetCurrentThreadId(), "Log4net写入日志配置处理");
WriteLog(strLog);
} private void WriteLog(string exp = null, string loggerName = "InfoLogger")
{
//新建的一个静态类
LogObject.Log(loggerName).Info(exp);
LogObject.Log(loggerName).Error(exp);
}
public static class LogObject
{ public static ILog Log(string LoggerName)
{
//log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
  return LogManager.GetLogger(LoggerName); } }

第五步:

找到文件路径D://logfile.txt 查看日志!

静态类中获取日志对象的另一种写法:这个是程序自动获取当前程序对象     (上面的我是通过WriteLog方法传入的)

ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
return log;

日志输出:

如果要在程序刚运行和退出的时候写入日志,在App.xaml.cs中加入:

public static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Log.Info("==Startup=====================>>>");
}
protected override void OnExit(ExitEventArgs e)
{
Log.Info("<<<========================End==");
base.OnExit(e);
}

先再运行编译后的exe文件

然后退出程序,看结果

我们可以看到程序在进入和退出的时候也写入了日志。

扩展的知识点

日志记录器(Logger)的级别顺序: 
    分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级 从高到低分别是 ERROR、WARN、INFO、DEBUG。 
    通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来。(比定义低的级别不会被打印出来)

    优先级高的将被打印出来。项目上生产环境时候建议把debug的日志级别重新调为warn或者更高,避免产生大量日志。

最新文章

  1. JS-- 浮点数运算处理
  2. Loadrunner中Throughput(吞吐量)的分析与计算
  3. 全排列算法(字典序法、SJT Algorithm 、Heap&#39;s Algorithm)
  4. access 数据更新password列为空出问题?
  5. ZOJ 1893 A Multiplication Game 【简单博弈】
  6. 斗地主 (NOIP2015 Day1 T3)
  7. java regex possissive relunctant
  8. JQ菜单滑块
  9. bsxfun, arrayfun, cellfun, spfun, structfun
  10. Python+OpenCV图像处理(十五)—— 圆检测
  11. Java各厂对外的优质博客
  12. 自学Zabbix12.5 Zabbix命令-zabbix_proxy
  13. AngularJS 启动执行过程
  14. 【LeetCode OJ】Merge Two Sorted Lists
  15. 兼容当前五大浏览器的渐变颜色背景gradient的写法
  16. Ubuntu16.04配置Android5.0编译环境
  17. 【hdu5306】Gorgeous Sequence 线段树区间最值操作
  18. 实例讲解启动mysql server失败的解决方法
  19. 兔子--android中百度地图的开发
  20. Tool bar

热门文章

  1. Python配置环境变量
  2. [SNOI2019]纸牌
  3. Eclipse 高亮显示(pydev 编辑 python)
  4. 计算电脑所能表示的最大最小值(c++)
  5. 搭建Portainer可视化界面
  6. layui如何隐藏弹出层关闭的按钮
  7. html 获取项目根路径
  8. pdfBox 解析 pdf文件
  9. TICK/TIGK运维栈安装运行 docker-compose【下】
  10. Sparrow-WiFi:一款Linux平台下的图形化WiFi及蓝牙分析工具