• C#控制台程序中使用log4.net来输出日志


    Apache log4net 库是一个帮助程序员将日志语句输出到各种输出目标的工具。log4net 是优秀的 Apache log4j™ 框架到 Microsoft® .NE​​T 运行时的端口。

    我喜欢他可以自定义输出,区分等级等特点。

    导入库

    我们在工程里添加NuGet的包。输入名称log4net ,导入包。
    在这里插入图片描述

    创建配置文件

    然后我们在项目根创建一个配置文件log4net.config

    
    <log4net>
    	
    	
    	
    	<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
    		
    		<param name="Encoding" value="utf-8" />
    		<file value="Log/"/>
    		<appendToFile value="true" />
    		<rollingStyle value="Date" />
    		
    		<datePattern value=""ErrorLogs_"yyyyMMdd".log"" />
    		
    		<StaticLogFileName value="false"/>
    		
    		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    		
    		<layout type="log4net.Layout.PatternLayout">
    			<conversionPattern value="%date| %-5level %newline%message%newline--------------------------------%newline" />
    		layout>
    		<filter type="log4net.Filter.LevelRangeFilter">
    			<levelMin value="WARN" />
    			<levelMax value="FATAL" />
    		filter>
    	appender>
    	
    
    
    
    	
    	<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
    		
    		<param name="Encoding" value="utf-8" />
    		
    		<file value="Log/"/>
    		<appendToFile value="true" />
    		<rollingStyle value="Date" />
    		
    		<StaticLogFileName value="false"/>
    		
    		<datePattern value=""InfoLogs_"yyyyMMdd".log"" />
    		
    		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    		
    		<layout type="log4net.Layout.PatternLayout">
    			<conversionPattern value="%date| %-5level%c %newline%message%newline--------------------------------%newline" />
    		layout>
    		<filter type="log4net.Filter.LevelRangeFilter">
    			<levelMin value="INFO" />
    			<levelMax value="INFO" />
    		filter>
    	appender>
    	
    
    	
    	<appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
    		
    		<param name="Encoding" value="utf-8" />
    		
    		<file value="Log/"/>
    		<appendToFile value="true" />
    		<rollingStyle value="Date" />
    		
    		<StaticLogFileName value="false"/>
    		
    		<datePattern value=""DebugLogs_"yyyyMMdd".log"" />
    		
    		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    		
    		<layout type="log4net.Layout.PatternLayout">
    			<conversionPattern value="%date| %-5level%c %newline%message%newline--------------------------------%newline" />
    		layout>
    		<filter type="log4net.Filter.LevelRangeFilter">
    			<levelMin value="DEBUG" />
    			<levelMax value="DEBUG" />
    		filter>
    	appender>
    	
    	<root>
    		
    		
    		
    		<level value="ALL" />
    		
    		<appender-ref ref="ErrorLog" />
    		<appender-ref ref="InfoLog" />
    		<appender-ref ref="DebugLog" />
    	root>
    log4net>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90

    使用类

    我们创建一个单独的类来使用他。

    using log4net;
    
    
    namespace MMCEngine
    {
        internal class Loger
        {
    
            readonly static ILog logger = LogManager.GetLogger(" MMCEngine ");
            public Loger() {
                Thread.CurrentThread.Name = "main";//为了让主线程名显示
                string path = @"../../../log4net.config";
                FileInfo file = new FileInfo(path);
    
    
                log4net.Config.XmlConfigurator.Configure(file);
                
                Console.WriteLine("loger");
            }
    
            public static void Debug(string str)
            {
                Console.WriteLine(DateTime.Now.ToString("yyyy-mm-dd HH:MM:ss")+" DEBUG:" + str);
                logger.Debug(str);
            }
            public static void Info(string str)
            {
                Console.WriteLine(DateTime.Now.ToString("yyyy-mm-dd HH:MM:ss") + " INFO:" + str);
                logger.Info(str);
            }
            public static void Warn(string str)
            {
                Console.WriteLine(DateTime.Now.ToString("yyyy-mm-dd HH:MM:ss") + " WARN:" + str);
                logger.Warn(str);
            }
            public static void Error(string str)
            {
                Console.WriteLine(DateTime.Now.ToString("yyyy-mm-dd HH:MM:ss") + " ERROR:" + str);
                logger.Error(str);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    使用

    在Program.cs中

    new Loger();
    // 调用Python脚本的Test函数
    Loger.Info("info1");
    Loger.Info("info2");
    Loger.Debug("Debug3");
    Loger.Warn("Warn4");
    Loger.Error("err5");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    我们可以根据配置文件来生成不同的Log,配置文件里我分为了3个等级。

    通过代码指定文件名

    首先在配置文件中配置file

    <file type="log4net.Util.PatternString" value="Log\%property{LogName}"/>
    
    • 1

    这里添加一个属性LogName

    <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
    	<!--不加utf-8编码格式,中文字符将显示成乱码-->
    	<param name="Encoding" value="utf-8" />
    	<file type="log4net.Util.PatternString" value="Log\%property{LogName}"/>
    	<appendToFile value="true" />
    	<rollingStyle value="Date" />
    	<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
    	<datePattern value=""ErrorLogs_"yyyyMMdd".log"" />
    	<!--日志文件名是否为静态-->
    	<StaticLogFileName value="false"/>
    	<!--多线程时采用最小锁定-->
    	<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    	<!--布局(向用户显示最后经过格式化的输出信息)-->
    	<layout type="log4net.Layout.PatternLayout">
    		<conversionPattern value="%date| %-5level %newline%message%newline--------------------------------%newline" />
    	</layout>
    	<filter type="log4net.Filter.LevelRangeFilter">
    		<levelMin value="ERROR" />
    		<levelMax value="FATAL" />
    	</filter>
    </appender>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    然后在代码中

    static ILog logger;//= LogManager.GetLogger(" MMCEngine ");
    public Loger(string fname = "") {
        Thread.CurrentThread.Name = "main";//为了让主线程名显示
        string path = "log4net.config";
        FileInfo file = new FileInfo(path);
    
        log4net.GlobalContext.Properties["LogName"] = fname+"_";
        logger = log4net.LogManager.GetLogger(" MMCEngine ");
        log4net.Config.XmlConfigurator.Configure(file);
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这里要注意第一行我们就要设置属性LogName,然后再调用GetLogger

    log4net.GlobalContext.Properties["LogName"] = fname+"_";
    
    • 1

    参考

    https://www.cnblogs.com/netcore5/articles/14611567.html

  • 相关阅读:
    2023-09-20 Teaching Note for Class 1
    react的useState源码分析
    Java智慧工地云SaaS源码,AI服务器、智能硬件
    【React】第八部分 react脚手架安装以及react脚手架配置代理
    LeetCode41——First Missing Positive——hashing in place & swap
    leetcode92 反转链表II
    Java的static修饰符
    Linux fdisk实战
    《程序是怎样跑起来的》读书笔记1——对程序员来说CPU是什么
    2022-11-11 C++并发编程( 四十一 )
  • 原文地址:https://blog.csdn.net/thinbug/article/details/132858593