首页 > 其他分享 >日志工具

日志工具

时间:2024-01-24 15:44:26浏览次数:17  
标签:string eventArgs public static var 日志 工具

颜色和类别枚举:

EnumLogMsgColor

public enum EnumLogMsgColor
{
    Red,
    Green,
    Blue,
    Orange,
    Black,
}

EnumLogMsgLevel

public enum EnumLogMsgLevel
{
    /// <summary>
    /// 普通消息
    /// </summary>
    [Description("[普通日志]")] Info,

    /// <summary>
    /// 良好消息
    /// </summary>
    [Description("[良好日志]")] InfoGreen,

    /// <summary>
    /// 警告消息
    /// </summary>
    [Description("[警告日志]")] Warn,

    /// <summary>
    /// 异常消息
    /// </summary>
    [Description("[异常日志]")] Error,

    /// <summary>
    /// 清除消息
    /// </summary>
    [Description("[清除日志]")] Clear,
}

枚举扩展类EnumExtension

/// <summary>
/// 枚举扩展类
/// </summary>
public static class EnumExtension
{
    /// <summary>
    /// 获取描述
    /// </summary>
    /// <param name = "em"> </param>
    /// <returns> </returns>
    public static string GetDescription(this Enum em)
    {
        var type = em.GetType();
        var fd = type.GetField(em.ToString());
        if (fd == null)
        {
            return string.Empty;
        }

        var attrs = fd.GetCustomAttributes(typeof(DescriptionAttribute), false);
        var name = string.Empty;
        foreach (DescriptionAttribute attr in attrs) name = attr.Description;

        return name;
    }
}

LogEventArgs

public class LogEventArgs : EventArgs
{
    /// <summary>
    /// 消息文本
    /// </summary>
    public string Msg { get; set; }

    /// <summary>
    /// 消息等级
    /// </summary>
    public EnumLogMsgLevel Level { get; set; } = EnumLogMsgLevel.Info;

    /// <summary>
    /// 消息颜色
    /// </summary>
    public EnumLogMsgColor Color { get; set; } = EnumLogMsgColor.Black;

    /// <summary>
    /// 获取画刷
    /// </summary>
    /// <returns> </returns>
    public Brush GetBrush()
    {
        Brush brush = null;
        switch (Color)
        {
            case EnumLogMsgColor.Red:
                brush = Brushes.Red;
                break;

            case EnumLogMsgColor.Green:
                brush = Brushes.Green;
                break;

            case EnumLogMsgColor.Blue:
                brush = Brushes.Blue;
                break;

            case EnumLogMsgColor.Orange:
                brush = Brushes.Orange;
                break;

            case EnumLogMsgColor.Black:
                brush = Brushes.Black;
                break;

            default:
                brush = Brushes.Black;
                break;
        }

        return brush;
    }
}

TXTFile

public class TXTFile
{
    /// <summary>
    /// 写入txt文件
    /// </summary>
    /// <param name = "absFilePath"> </param>
    /// <param name = "str"> </param>
    public void WriteTxtFile(string absFilePath, string str)
    {
        var path = new DirectoryInfo(absFilePath);
        if (path.Parent != null && !Directory.Exists(path.Parent.FullName))
        {
            Directory.CreateDirectory(path.Parent.FullName);
        }

        var mode = FileMode.Append;
        if (!File.Exists(absFilePath)) mode = FileMode.Create;

        using (var fs = new FileStream(absFilePath, mode))
        {
            using (var sw = new StreamWriter(fs, Encoding.Default))
            {
                sw.WriteLine(str);
            }
        }
    }
}

LogOperator

/// <summary>
/// 日志
/// </summary>
public class LogOperator
{
    #region 数据定义

    /// <summary>
    /// txt操作类
    /// </summary>
    protected static readonly TXTFile TXTFileOperator = new TXTFile();

    /// <summary>
    /// 异常日志定义
    /// </summary>
    private static readonly string INFO_PATH = Environment.CurrentDirectory + @"\Log\InfoLog\";

    /// <summary>
    /// 异常日志定义
    /// </summary>
    private static readonly string ERROR_PATH = Environment.CurrentDirectory + @"\Log\ErrorLog\";

    /// <summary>
    /// 警告日志定义
    /// </summary>
    private static readonly string WARN_PATH = Environment.CurrentDirectory + @"\Log\WarnLog\";

    #endregion

    #region 事件委托

    /// <summary>
    /// 委托
    /// </summary>
    /// <param name = "sender"> </param>
    /// <param name = "e"> </param>
    public delegate void LogContextChangeEventHandler(object sender, LogEventArgs e);

    /// <summary>
    /// 事件
    /// </summary>
    public static event LogContextChangeEventHandler LogContextChange;

    #endregion

    #region 日志操作

    /// <summary>
    /// 普通日志信息,不写入txt
    /// </summary>
    /// <param name = "msg"> </param>
    public static void Info(string msg)
    {
        var eventArgs = new LogEventArgs
        {
            Msg = msg,
            Level = EnumLogMsgLevel.Info,
            Color = EnumLogMsgColor.Black,
        };

        LogInvoke(eventArgs);
    }

    /// <summary>
    /// 普通日志信息-绿色
    /// </summary>
    /// <param name = "msg"> </param>
    public static void InfoGreen(string msg)
    {
        var eventArgs = new LogEventArgs
        {
            Msg = msg,
            Level = EnumLogMsgLevel.InfoGreen,
            Color = EnumLogMsgColor.Green,
        };

        TXTFileOperator.WriteTxtFile(GetInfoLogAbsPath(), DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "  " + eventArgs.Msg);

        LogInvoke(eventArgs);
    }

    /// <summary>
    /// 警告
    /// </summary>
    /// <param name = "msg"> </param>
    public static void Warn(string msg)
    {
        var eventArgs = new LogEventArgs
        {
            Msg = msg,
            Level = EnumLogMsgLevel.Warn,
            Color = EnumLogMsgColor.Orange,
        };

        TXTFileOperator.WriteTxtFile(GetWarnLogAbsPath(), DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "  " + eventArgs.Msg);

        LogInvoke(eventArgs);
    }

    /// <summary>
    /// 异常
    /// </summary>
    /// <param name = "msg"> </param>
    public static void Error(string msg)
    {
        var eventArgs = new LogEventArgs
        {
            Msg = msg,
            Level = EnumLogMsgLevel.Error,
            Color = EnumLogMsgColor.Red,
        };

        LogInvoke(eventArgs);

        TXTFileOperator.WriteTxtFile(GetErrorLogAbsPath(), eventArgs.Msg);
    }

    /// <summary>
    /// 清除所有日志信息
    /// </summary>
    public static void Clear()
    {
        var eventArgs = new LogEventArgs
        {
            Msg = "清除日志窗口",
            Level = EnumLogMsgLevel.Clear,
            Color = EnumLogMsgColor.Green,
        };

        LogContextChange?.Invoke(null, eventArgs);
    }

    /// <summary>
    /// 调用
    /// </summary>
    /// <param name = "eventArgs"> </param>
    protected static void LogInvoke(LogEventArgs eventArgs)
    {
        var msg = eventArgs.Level.GetDescription() + DateTime.Now + ":" + eventArgs.Msg;
        eventArgs.Msg = msg;
        LogContextChange?.Invoke(null, eventArgs);
    }

    /// <summary>
    /// 获取当前普通日志信息-绿色的绝对文件路径
    /// 当前日期命名
    /// </summary>
    /// <returns> </returns>
    protected static string GetInfoLogAbsPath()
    {
        var str = DateTime.Now.ToShortDateString();
        str = INFO_PATH + str.Replace('/', '_') + ".txt";
        return str;
    }

    /// <summary>
    /// 获取当前错误日志的绝对文件路径
    /// 当前日期命名
    /// </summary>
    /// <returns> </returns>
    protected static string GetErrorLogAbsPath()
    {
        var str = DateTime.Now.ToShortDateString();
        str = ERROR_PATH + str.Replace('/', '_') + ".txt";
        return str;
    }

    /// <summary>
    /// 警告日志
    /// </summary>
    /// <returns> </returns>
    protected static string GetWarnLogAbsPath()
    {
        var str = DateTime.Now.ToShortDateString();
        str = WARN_PATH + str.Replace('/', '_') + ".txt";
        return str;
    }

    #endregion
}

在ListBox里写日志,xaml后台代码,m_Log为ListBox名称

/// <summary>
/// 安全的日志信息
/// </summary>
/// <param name = "e"> </param>
protected void SafeAddMsg(LogEventArgs e)
{
    Dispatcher?.Invoke(() =>
    {
        var items = m_Log.Items;
        //清空
        if (e.Level == EnumLogMsgLevel.Clear)
        {
            items.Clear();
            return;
        }

        //增加时间显示
        var item = new TextBlock
        {
            Text = e.Msg,
            Foreground = e.GetBrush(),
        };

        if (items.Count > 50)
        {
            //移除首位
            items.RemoveAt(0);
        }

        items.Add(item);

        //滚动视图到最后一项
        var index = items.Count - 1;
        m_Log.SelectedIndex = index;
        var itemLast = m_Log.Items.GetItemAt(index);
        m_Log.ScrollIntoView(itemLast);
    });
}

/// <summary>
/// 窗口加载
/// </summary>
/// <param name = "sender"> </param>
/// <param name = "e"> </param>
private void MainLogFace_OnLoaded(object sender, RoutedEventArgs e)
{
    //m_Log.ItemsSource = LogOperator.LogSource;

    //注册日志消息变更事件
    LogOperator.LogContextChange -= OnLogContextChange;
    LogOperator.LogContextChange += OnLogContextChange;
}

/// <summary>
/// 日志事件
/// </summary>
/// <param name = "sender"> </param>
/// <param name = "e"> </param>
private void OnLogContextChange(object sender, LogEventArgs e)
{
    SafeAddMsg(e);
}

调用

LogOperator.Info("写到Listbox中,不产生日志");

LogOperator.InfoGreen("写到Listbox中,产生info日志");

LogOperator.Error("写到Listbox中,产生Error日志");

LogOperator.Warn("写到Listbox中,产生Warn日志");

标签:string,eventArgs,public,static,var,日志,工具
From: https://www.cnblogs.com/shieryoufeng/p/17984826

相关文章

  • 内存带宽读写工具 Stream
    一.工具介绍前言stream测试得到的是可持续运行的内存带宽最大值,而并不是一般的硬件厂商提供的理论最大值,具有如下特点:1.主要有四种数组运算,测试的内存带宽的性能分别是:数组的复制(Copy)、数组的尺度变换(Scale)、数组的矢量求和(Add)、数组的复合矢量求和(Triad)2.数组的值......
  • Linux计划任务与日志的管理
    1、什么是计划任务我们可以通过一些设置来让电脑定时提醒我们该做什么事了,或者我们提前设置好,告诉电脑你几点做什么几点做什么,这种我们就叫它定时任务。而遇到一些需要执行的事情或任务。我们也可以通过命令来告诉电脑一会临时把这个工作给做一下在我们LINUX中,我们可以通过cront......
  • 磁盘分区工具和挂载
    一、磁盘分区工具1、fdiskfdisk是一个常用的磁盘分区工具,在Linux系统中用于创建、编辑和删除磁盘分区。它可以帮助您对磁盘进行分区管理。常用命令列出所有磁盘:fdisk-l选择要分区的磁盘:fdisk/dev/sdX其中,/dev/sdX是要分区的磁盘名称(例如,/dev/sda)。查看帮助信......
  • Advanced .Net Debugging 1:你必须知道的调试工具
    一、简介   我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用。他们采取的分析方法通常包括:输出更多的调试信息,或者做一些临时性的代码审查。这里的临时性是指,通过猜测来推断问题可能来之哪个部分的代码。有时候,开发人员会幸运的发......
  • Oracle12c 数据库 警告日志
    目录一:查看警告日志文件的位置二:警告日志内容三:告警日志监控:方案1:方案2:方案3: 正文 回到顶部一:查看警告日志文件的位置        Oracle12c环境下查询,alert日志并不在bdump目录下,看到网上和书上都写着可以通过初始化参数background_dump_dest来查看......
  • 1.27号(本周六)直播:golang开发远程控制工具
    本次的课程的内容为:1、远控编写2、工具代码编写3、工具测试 1月27日晚20:00,我们不见不散~ Ms08067安全实验室专注于网络安全知识的普及和培训,是专业的“图书出版+培训”的网络安全在线教育平台,专注于网络安全领域中高端人才培养。平台已开设Web安全零基础就业,Web高级安全......
  • Java工具类强推:Hutool
    官方文档:https://www.hutool.cn/docs/#/Github地址:https://github.com/dromara/hutoolGitee地址:https://gitee.com/dromara/hutool❓背景灵魂拷问1:还在为新项目工具类搬迁而烦恼?灵魂拷问2:还在为项目中工具类维护而烦恼?......
  • Qt编写linux系统onvif工具(支持预览/云台/预置位/录像等)
    一、功能特点广播搜索设备,支持IPC和NVR,依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址,比如主码流地址、子码流地址。可对每个设备设置Onvif用户信息,用于认证获取详细信息......
  • NPS-比frp还简单易用的内网穿透及端口映射工具
    NPS内网穿透工具是一款轻量级、高性能、功能强大的代理服务器,用于实现内网与外网之间的通信。它可以将外部网络请求转发到内网服务器,使得内网服务器可以被外部访问到。NPS支持TCP和UDP流量转发,并且可以支持任何TCP和UDP上层协议,例如访问内网网站、本地支付接口调试、SSH访问、远......
  • 升级openssh后出现xshell、CRT等工具无法连接问题
    描述:某工程在进行ssh漏洞修复过程中升级openssh后输入用户名密码被拒绝(如下图)通过带外重定向到操作系统发现日志出现PAMunabletodlopen和 PAMaddingfaultymodule的报错经排查发现是ssh rpm包升级后会修改/etc/pam.d/sshd文件(如下图)和其他服务器对比,正常可登录的/etc......