首页 > 其他分享 >WPF 使用Log4Net记录日志和显示日志

WPF 使用Log4Net记录日志和显示日志

时间:2023-12-28 11:34:34浏览次数:46  
标签:Log4Net info string void public Instance static 日志 WPF

一、添加引用

 二、添加Log4Net配置文件,设置文件属性 如果较新则复制或者始终复制

 

<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <!-- 将日志以回滚文件的形式写到文件中 -->
    <!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
    <appender name="Log4Name" type="log4net.Appender.RollingFileAppender">
        <!--不加utf-8编码格式,中文字符将显示成乱码-->
        <param name="Encoding" value="utf-8" />
        <file value="Log/"/>
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
        <datePattern value="yyyy-MM-dd'.txt'"/>
        <!--日志文件名是否为静态-->
        <StaticLogFileName value="false"/>
        <!--多线程时采用最小锁定-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <!--布局(向用户显示最后经过格式化的输出信息)-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%-5level %date{HH:mm:ss} %message%n"/>
        </layout>
    </appender>
    <root>
        <!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
        <!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
        <!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
        <level value="ALL" />
        <!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
        <appender-ref ref="Log4Name"/>
    </root>
</log4net>

三、加载log4net配置

方法一:在AssemblyInfo类中指定log4net的配置文件

 方法二:在代码中添加

 四、使用方法

/// <summary>
    /// log4net日志专用
    /// </summary>
    public class LogHelper
    {
        private static readonly ILog Instance = LogManager.GetLogger("LogHelper");

        public static void SetConfig()
        {
            XmlConfigurator.Configure();
        }

        public static void SetConfig(string filePath)
        {
            FileInfo configFile = new FileInfo(filePath);
            XmlConfigurator.Configure(configFile);
        }

        public static void SetConfig(FileInfo configFile)
        {
            XmlConfigurator.Configure(configFile);
        }

        /// <summary>
        /// 记录普通文件记录
        /// </summary>
        /// <param name="info"></param>
        public static void Info(string info)
        {
            if (Instance.IsInfoEnabled)
            {
                Instance.Info(info);
            }
        }

        /// <summary>
        ///记录调试信息
        /// </summary>
        /// <param name="info"></param>
        public static void Debug(string info)
        {
            if (Instance.IsErrorEnabled)
            {
                Instance.Debug(info);
            }
        }

        /// <summary>
        ///记录警告信息
        /// </summary>
        /// <param name="info"></param>
        public static void Warn(string info)
        {
            if (Instance.IsWarnEnabled)
            {
                Instance.Warn(info);
            }
        }

        /// <summary>
        /// 记录错误日志
        /// </summary>
        /// <param name="info"></param>
        /// <param name="se"></param>
        public static void Error(string info, Exception se)
        {
            if (Instance.IsErrorEnabled)
            {
                Instance.Error(info, se);
            }
        }

        /// <summary>
        /// 记录严重错误
        /// </summary>
        /// <param name="info"></param>
        /// <param name="se"></param>
        public static void Fatal(string info, Exception se)
        {
            if (Instance.IsFatalEnabled)
            {
                Instance.Fatal(info, se);
            }
        }
    }

五、显示日志到界面

1、新建 LogAppender 类继承AppenderSkeleton

 

public class LogAppender : AppenderSkeleton
    {
        public event Action<object> LogAppendEvent;
        protected override void Append(LoggingEvent loggingEvent)
        {
            string log;
            if (this.Layout != null)
            {
                PatternLayout patternLayout = this.Layout as PatternLayout;
                log = patternLayout.Format(loggingEvent);

                if (loggingEvent.ExceptionObject != null)
                {
                    log += loggingEvent.ExceptionObject.ToString();
                }
            }
            else
            {
                log = loggingEvent.RenderedMessage;
            }
            LogAppendEvent?.Invoke(log);

        }
    }

2、使用LogAppender 类

 

public Dispatcher Dispatcher { get; set; } = Dispatcher.CurrentDispatcher;
        public ObservableCollection<string> LogMsgs { get; set; } = new ObservableCollection<string>();//日志框的日志集合
private void InitLog()
        {
            //加载日志配置文件,只需要在程序启动时加载一次
            //string filePath = AppDomain.CurrentDomain.BaseDirectory + "Log4net.config";
            //LogHelper.SetConfig(filePath);
            string logPattern = "%-5p %d{HH:mm:ss} %m";
            LogAppender logAppender = new LogAppender() { Layout = new PatternLayout(logPattern) };
            //logAppender.Name = "LogAppenderUI";
            logAppender.LogAppendEvent += ShowLog;
            //IAppender[] appenders = new IAppender[]
            //{
            //    logAppender
            //};
            BasicConfigurator.Configure(logAppender);
        }

        private void ShowLog(object log)
        {
            try
            {
                if (LogMsgs.Count > 1500)
                {
                    LogMsgs.Clear();
                }
                Dispatcher.Invoke(() =>
                {
                    LogMsgs.Insert(0, log.ToString());
                });
            }
            catch (Exception e)
            {
                LogHelper.Debug(e.Message);
            }
            string message = log.ToString();
        }

xaml代码

 

标签:Log4Net,info,string,void,public,Instance,static,日志,WPF
From: https://www.cnblogs.com/othersheartBlog/p/17932335.html

相关文章

  • 日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队
    前言随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影响,但没有日志的应用程序是不完整的,甚至可以说是有缺陷的......
  • 浅谈WPF之ToolTip工具提示
    在日常应用中,当鼠标放置在某些控件上时,都会有相应的信息提示,从软件易用性上来说,这是一个非常友好的功能设计。那在WPF中,如何进行控件信息提示呢?这就是本文需要介绍的ToolTip【工具提示】内容,本文以一些简单的小例子,简述如何在WPF开发中,应用工具提示,仅供学习分享使用,如有不足之处,还......
  • ETCD 下线Member未剔除引发的日志报错
    背景介绍容器化的etcd集群原来具有三个节点分别为etcd-0,etcd-1,etcd-2,在节点etcd-2下线后剩两个节点etcd-0,etcd-1#kubectlgetpod-napisixNAMEREADYSTATUSRESTARTSAGEetcd-0......
  • MySQL 事务日志
    MySQL事务日志事务有4种特性:原子性,一致性,隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢(是通过什么来控制的呢)?事务的"隔离性"由锁机制实现(通过加锁来实现隔离)。而事务的"原子性","一致性"和"持久性"由事务的redo日志和undo 日志来保证redolog称......
  • C# 如何设计一个好用的日志库?【架构篇】
    C#如何设计一个好用的日志库?【架构篇】 阅读目录〇、前言一、日志的简单记录二、通过开源库HslCommunication记录不同级别的日志三、通过开源库NLog实现通过配置文件配置日志选项1.配置文件2.测试代码3.日志记录类四、日志查看器TextAnalysisTool.NET......
  • nginx切割日志部署脚本编写
    #!/bin/bash#utf-8#description:部署nginx_lograte.sh脚本#---------------------------------------------------------------------script_name="logrotate_new.sh"script_download_directory="http://172.20.147.61/CentOS/app/script/hby"#......
  • 12-Mysql的日志管理
    一、mysql常见日志二、错误日志配置方法:[mysqld]log-error=/data/mysql/mysql.log查看配置方式:mysql>showvariableslike'%log%error%';作用:记录mysql数据库的一般状态信息及报错信息,是我们对于数据库常规报错处理的常用日志,默认在data目录下三、一般查询......
  • WPF中实现页面跳转
    `WPF中实现页面跳转WPF是WindowsPresentationFoundation的缩写,是微软推出的一种用于创建桌面应用程序的技术。WPF中有一个重要的概念就是页面(Page),它可以让我们在一个窗口(Window)中显示不同的内容,实现类似于网页浏览器的效果。页面跳转就是指从一个页面切换到另一个页面的过程。......
  • WPF学习路线
    WPF是WindowsPresentationFoundation的缩写,是微软推出的一种用于创建桌面应用程序的技术。WPF基于.NETFramework,使用XAML作为界面描述语言,支持数据绑定、动画、样式、模板等功能。WPF可以创建出丰富而美观的用户界面,提高用户体验和开发效率。如果你想学习WPF,那么你需要掌握以下......
  • 事件时间日志,精准工作之道
    你好,我是刚哥。事件时间日志,是在李笑来《把时间当做朋友》中看到的,来源于柳比歇夫的日志,Event-timeLog。事件日志只记录事件的名称,而事件时间日志还记录了时间,比如:给斯拉瓦写信——二小时四十五分。李笑来在书中谈到了事件时间日志的好处:“它会使你对时间的感觉越来越精确。可......