【学习笔记】C#日志类的编写

本文介绍了如何在C#中使用自定义日志类以及Log4Net、NLog和Serilog这三个流行的日志库,包括它们的引入、配置和基本用法示例,帮助开发者更好地管理应用程序日志输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#日志类的使用

提示:日志写法与引用的使用

文章目录

  • 日志
  • 一、日志
  • 二、NLOG的基本使用
    • 1.引入库
    • 2.Nlog代码编写
    • 3.log4net使用
    • 4.Serilog
      • 1.引入


日志

你可以创建自定义的日志记录类来管理应用程序的日志输出。这种日志类通常会封装了底层的日志记录库,提供了一组简洁的方法来记录不同级别的日志消息。
Log4Net:

Log4Net 是 Apache 软件基金会的一个开源项目,提供了强大的、高度可配置的日志记录功能。它可以用于记录到不同的输出目标,如文件、控制台、数据库等。
NLog:

NLog 是一个灵活且强大的日志记录库,允许通过配置文件轻松地更改日志记录策略。它支持多种目标,包括文件、数据库、控制台等。
Serilog:

Serilog 是一个简单且极具扩展性的日志库。它支持结构化日志记录,允许使用自定义的输出格式和目标。Serilog 也能够轻松地与其他库和框架集成。


提示:以下是本篇文章正文内容,下面案例可供参考

一、日志

using System;
using System.IO;
public class Logger
{
    //路径
    private string files = AppDomain.CurrentDomain.BaseDirectory + "\\log\\" + DateTime.Now.ToString("MMddHHmmssfff") + ".log";
    private StreamWriter write;
    public  Logger()
    {
        write = new StreamWriter(files,true);        
    }
    public void Log(LogLevel level, string message)
    {
        // 根据日志级别选择不同的输出方式
        switch (level)
        {
            case LogLevel.Info:
                Console.ForegroundColor = ConsoleColor.White;           
                break;
            case LogLevel.Warning:
                Console.ForegroundColor = ConsoleColor.Yellow;
                break;
            case LogLevel.Error:
                Console.ForegroundColor = ConsoleColor.Red;
                break;
            default:
                break;
        }
        //文件写入
        string msg = $"{DateTime.Now} [{level.ToString()}]: {message}";
        write.WriteLine(msg);
        write.Flush();
        // 输出日志消息
        //Console.WriteLine($"{DateTime.Now} [{level.ToString()}]: {message}");        
        // 恢复控制台默认颜色
        Console.ResetColor();
    }
}
public enum LogLevel
{
    Info,
    Warning,
    Error
}

class Program
{

    static void Main(string[] args)
    {  
        Logger logger = new Logger();       
        // 记录不同级别的日志消息
        logger.Log(LogLevel.Info, "This is an info message.");
        // 记录不同级别的日志消息
        logger.Log(LogLevel.Warning, "This is a warning message.");
        logger.Log(LogLevel.Error, "This is an error message.");

        Console.ReadLine();
    }
}

二、NLOG的基本使用

1.引入库

引用nLog。

日志级别严厉典型用途
跟踪最冗长的级别。用于开发,很少在生产中启用。例如,请求有效负载、响应有效负载、开始方法 X 或结束方法 X
调试从感兴趣的内部事件调试应用程序行为。例如,已执行查询、用户已通过身份验证、会话已过期
信息突出显示进度或应用程序生存期事件的信息。
警告有关可恢复的验证问题或临时故障的警告。
错误功能失败或捕获异常的错误。
致命最关键的级别。应用程序即将中止。

2.Nlog代码编写

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <targets>
        <target name="file" xsi:type="File" fileName="logs/${date}.txt" />
    </targets>

    <rules>
        <logger name="*" minlevel="Debug" writeTo="file" />
    </rules>
</nlog>

static class NLOGHelper
{
    //创建实例对象
    private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
    //创建实例对象,手动命名
    //private static readonly NLog.Logger logger1 = NLog.LogManager.GetLogger("MyLogger");

    public static void Log(string msg)
    {

        try
        {
            // 检查是否启用调试级别日志
            if (logger.IsDebugEnabled)
            {
                logger.Info(msg);
            }
        }
        catch (Exception)
        {

            throw;
        }
        
    }
    
}

需要配置可以使用配置文件

		//创建一个配置文件对象
         var config = new NLog.Config.LoggingConfiguration();
         //创建日志写入目的地
         var logfile = new NLog.Targets.FileTarget("logfile") { FileName = $"logs/{DateTime.Now.ToString("yyyy-MM-dd")}.log" };
         //添加日志路由规则
         config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
         //配置文件生效
         LogManager.Configuration = config;

3.log4net使用

a<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <!-- 控制台日志配置 -->
    <appender name="Console" type="log4net.Appender.ConsoleAppender">
        <!-- 日志输出格式 -->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
        </layout>
    </appender>

    <!-- 文件存储日志配置 -->
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
        <!-- 保存文件的名称 -->
        <file value="logs\log.log" />
        <appendToFile value="true" />
        <!-- 文件的编码方式 -->
        <param name="Encoding" value="UTF-8"/>
        <!-- 每个文件的大小 -->
        <maximumFileSize value="100KB" />
        <!-- 保存文件数量 -->
        <maxSizeRollBackups value="2" />
        <!-- 日志输出格式 -->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level %thread %logger - %message%newline" />
        </layout>
    </appender>

    <root>
        <level value="ALL" />
        <appender-ref ref="Console" />
        <appender-ref ref="RollingFile" />
    </root>
</log4net>
在这里插入代码片 
class Program
{
    private static readonly ILog log = LogManager.GetLogger(typeof(Program));
    static void Main(string[] args)
    {

        log.Debug("Debug 测试.");
        Console.ReadLine();
    }
}

4.Serilog

1.引入

  1. 引入Serlog和Serilog.Sinks.Console、Serilog.Sinks.File
    LoggerConfiguration 类提供一个流式接口用于构建一个日志记录管道
    WriteTo.Console() 将控制台接收器添加到上述管道中
    CreateLogger() 组装并返回一个实现ILogger接口的Logger对象
class Program
{
    static void Main(string[] args)
    {
        //配置
        Log.Logger = new LoggerConfiguration()
            //打印到控制器
            .WriteTo.Console()
            //生成文件
            .WriteTo.File("log.log", rollingInterval: RollingInterval.Day)
            //按日期生成日志路径,需要安装nuget: Serilog.Sinks.Map
            //.WriteTo.Map(
            //i => i.Timestamp.Date,
            //(d, b) => { b.File($"logs/{d:yyyyMMdd}/log.txt"); }
            //)
            .CreateLogger();

        // 运行你的应用程序
        Log.Information("Serilog demo!");

        // 关闭 Serilog 日志记录器
        Log.CloseAndFlush();
        Console.ReadKey();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值