ASP.NET 8 日志处理之Log4net(全局注册)-实例

  1. 安装log4net包
  2. 在项目创建Configs文件夹,创建log4netsettings.json文件(自定义)
  3. {
      "Log4Net": {
        "Dir": "G:/Log/JWProject.WorkerService/LogFile/Log4Net/api/", //日誌文件存放路徑
        "Cfg": "/Configs/log4net.xml" //配置文件路径
      }
    }
    

  4. 再到Configs文件夹创建log4net.xml文件

  5. <?xml version="1.0" encoding="utf-8" ?>
    <!--
    創建時間:2014/08/15
    創建人:glz
    文件名:log4net.xml
    文件路徑:/log4net/log4net.xml
    文件說明:本文件是log4net的配置文件,用於生成記錄 系統 FATAL | ERROR | WARN | INFO | DEBUG 等信息的文件
              日誌記錄:
              (1)日誌記錄分兩種日誌文件:
              一種(Error日誌): FATAL | ERROR | WARN 為一類;
              另一種(INFO日誌):INFO > DEBUG 為一類。
              (2)日誌文件存放位置,格式,大小:
              存放位置:統一存放在根目錄的log4net文件夾下的LogFile文件夾下(log4net/LogFile/)
                       Error日誌:存放于LogError文件夾;
                       INFO日誌:存放于LogInfo文件夾。
              日誌格式:日期/日期.log.0...;例如:2014-08-15/2014-08-15.log.0
              每個日誌文件的大小:50KB
              文件編碼:UTF-8
              (3)日誌文件記錄信息格式:(一般格式)
              Error日誌:
              例如:Recording Time:2014-08-15 15:48:21,502 
                    Thread ID:[18] 
                    Log level:ERROR 
                    Error Class:logError property:[(null)] 
                    Error Description: error test info - LogHelper.GetLogError.Error
                    hostName|userName: IIS APPPOOL\newvipg20140725
                    Location: ASP.global_asax.Application_BeginRequest(d:\POSCODE\glz\Global.asax:266)
                    UserIP - 58.177.234.52
                    Error Path - http://localhost:6060/admin/MaDelData.aspx
             INFO日誌:
             例如: Recording Time:2014-08-14 17:58:08,276 
                    Thread ID:[19] 
                    Log level:INFO  
                    Description: route i am coming
                    UserName - glz
                    UserIP - 58.177.234.52
                    Error Path - http://localhost:6060/admin/MaDelData.aspx
    參考文件:ZData/log4Net技术大全.doc
    
    -->
    
    <configuration>
    	<configSections>
    		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    	</configSections>
    	<log4net>
    
    		<!--1、所有Logger的父节点,root的设置在所有的logger中都起作用-->
    		<!--2、如果root和logger中设置了相同的appender,日志会被记录两次-->
    		<root>
    			<level value="All"/>
    			<appender-ref ref="ErrorAppender"/>
    			<appender-ref ref="WarnAppender"/>
    			<appender-ref ref="InfoAppender"/>
    			<!--<appender-ref ref="RedisAppender" />-->
    		</root>
    		<!--<logger name ="logError">
          <level value="ERROR"/>
          <appender-ref ref="ErrorAppender"/>
        </logger>
    
        <logger name ="logInfo">
          <level value="INFO"/>
          <appender-ref ref="InfoAppender"/>
        </logger>-->
    		<!--1.一個appender 可以被多個logger共用-->
    		<!--2.logger可以同時引用多個appender-->
    
    		<!--Logger是通过类似命名空间的层次结构命名和管理的,每一个应用中的
            Logger都有一个Root Logger,也就是默认Logger,<root>项就是用于定义
            Root Logger的。但是,<root>项并不是必须的,因为<root>项只有在配置
            文件中没有配置任何Logger的时候才起作用,此时,log4net将使用<root>
            项的配置作为创建一个Logger时的默认配置。所以,在这个例子里,因为上面已经配置了
            <logger>,所以<root>并不起作用,放在这里只是为了做一个完整的配置说明。
            但是,需要注意的是,<root>并非完全不起作用。如果我们在代码中使用了
            LogManager.GetLog(...),其中的参数指定了一个不在配置文件中的Logger的
            @name时,那么log4net将会把<root>作为默认Logger,并依据<root>的配置创建一个Logger。  -->
    
    		<!--..................................ERROR........................................-->
    		<!--FATAL > ERROR -->
    		<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    			<param  name="File"  value="/LogError/"/>
    			<param  name="AppendToFile" value="true"/>
    			<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
    			<param  name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
    			<!--输出日志文件的编码格式-->
    			<param  name="Encoding" value="utf-8" />
    			<!--切割最多文件数 -1表示不限制产生日志文件数-->
    			<param  name="MaxSizeRollBackups" value="-1"/>
    			<!-- 每个文件的大小限制  -->
    			<param  name="MaximumFileSize" value="50MB"/>
    			<!--是否只寫到一個文件中-->
    			<param  name="StaticLogFileName" value="false"/>
    			<!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
    			<param  name="RollingStyle" value="Composite"/>
    			<!--文件名-->
    			<param  name="DatePattern" value="yyyy-MM-dd/&quot;Erp.&quot;yyyy-MM-dd&quot;.Elog&quot;"/>
    			<!--计数类型为1,2,3…-->
    			<param  name="CountDirection" value="1"/>
    			<layout type="GLProject.CtmLog.Layout.CtmPatternLayout">
    				<param name="Header" value="&#xD;&#xA; ---------------------application startup--------------------- &#xD;&#xA;" />
    				<conversionPattern value="%newlineTimestamp: %date %newlineThread: [%thread] %newlineLevel: %level %newlineLoggerName: %logger%newlineHost: %username %newlinePath: %file:%line %newlineClass.Method: %class.%method %newlineDescription: %message %newline"/>
    				<param name="Footer" value="&#xD;&#xA; ---------------------application shutdown--------------------- &#xD;&#xA;" />
    			</layout>
    			<filter type="log4net.Filter.LevelRangeFilter">
    				<param name="LevelMin" value="ERROR"></param>
    				<param name="LevelMax" value="OFF"></param>
    			</filter>
    		</appender>
    
    		<!--..................................WARN........................................-->
    		<!--WARN 日誌 存放SQL語句-->
    		<appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
    			<param name="File" value="/LogWarn/"/>
    			<param name="AppendToFile" value="true"/>
    			<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
    			<param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
    			<!--输出日志文件的编码格式-->
    			<param name="Encoding" value="utf-8" />
    			<!--切割最多文件数 -1表示不限制产生日志文件数-->
    			<param name="MaxSizeRollBackups" value="-1"/>
    			<!-- 每个文件的大小限制  -->
    			<param name="MaximumFileSize" value="50MB"/>
    			<!--是否只寫到一個文件中-->
    			<param name="StaticLogFileName" value="false"/>
    			<!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
    			<param name="RollingStyle" value="Composite"/>
    			<!--文件名-->
    			<param name="DatePattern" value="yyyy-MM-dd/&quot;Erp.&quot;yyyy-MM-dd&quot;.Wlog&quot;"/>
    			<!--计数类型为1,2,3…-->
    			<param name="CountDirection" value="1"/>
    			<layout type="GLProject.CtmLog.Layout.CtmPatternLayout">
    				<param name="Header" value="&#xD;&#xA; ---------------------application startup--------------------- &#xD;&#xA;" />
    				<conversionPattern value="%newlineTimestamp: %date %newlineThread: [%thread] %newlineLevel: %level %newlineLoggerName: %logger%newlineHost: %username %newlinePath: %file:%line %newlineClass.Method: %class.%method %newlineDescription: %message %newline"/>
    				<param name="Footer" value="&#xD;&#xA; ---------------------application shutdown--------------------- &#xD;&#xA;" />
    			</layout>
    			<filter type="log4net.Filter.LevelRangeFilter">
    				<param name="LevelMin" value="WARN"></param>
    				<param name="LevelMax" value="WARN"></param>
    			</filter>
    		</appender>
    
    		<!--....................................INFO......................................-->
    		<!--INFO-->
    		<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
    			<param  name="File" value="/LogInfo/"/>
    			<!--是否追加到文件-->
    			<param  name="AppendToFile" value="true"/>
    			<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
    			<param  name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
    			<!--输出日志文件的编码格式-->
    			<param  name="Encoding" value="utf-8" />
    			<!--切割最多文件数 -1表示不限制产生日志文件数-->
    			<param  name="MaxSizeRollBackups" value="-1"/>
    			<!-- 每个文件的大小限制  -->
    			<param  name="MaximumFileSize" value="50MB"/>
    			<!--是否只寫到一個文件中-->
    			<param  name="StaticLogFileName" value="false"/>
    			<!-- -按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])
               【RollingStyle: Composite 综合  Size 按大小  Date 按时间】 -->
    			<param  name="RollingStyle" value="Composite"/>
    			<!--文件名-->
    			<param  name="DatePattern" value="yyyy-MM-dd/&quot;Erp.&quot;yyyy-MM-dd&quot;.Ilog&quot;"/>
    			<!--计数类型为1,2,3…-->
    			<param  name="CountDirection" value="1"/>
    			<layout type="GLProject.CtmLog.Layout.CtmPatternLayout">
    				<param name="Header" value="&#xD;&#xA; ---------------------application startup--------------------- &#xD;&#xA;" />
    				<conversionPattern value="%newlineTimestamp: %date %newlineThread: [%thread] %newlineLevel: %level %newlineLoggerName: %logger%newlineHost: %username %newlinePath: %file:%line %newlineClass.Method: %class.%method %newlineDescription: %message %newline"/>
    				<param name="Footer" value="&#xD;&#xA; ---------------------application shutdown--------------------- &#xD;&#xA;" />
    			</layout>
    			<filter type="log4net.Filter.LevelRangeFilter">
    				<param name="LevelMin" value="INFO"></param>
    				<param name="LevelMax" value="INFO"></param>
    			</filter>
    		</appender>
    
    		<!--日志的等级,它们由高到底分别为:
            OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL
        高于等级设定值方法(如何设置参见"配置文件详解")都能写入日志,
        Off所有的写入方法都不写到日志里,ALL则相反。例如当我们设成Info时,
        logger.Debug就会被忽略而不写入文件,
        但是FATAL, ERROR,WARN,INFO会被写入,因为他们等级高于INFO
        -->
    
    		<!--redis單服務器版-->
    		<!--<appender name="RedisAppender" type="GLProject.RedisLog4NetCore.Appender.RedisAppender, GLProject.RedisLog4NetCore">
    			<remoteAddress value="192.168.88.91" />
    			<remotePort value="6379" />
    			<remotePassword value="123456" />
    			<remoteDbId value="8" />
    			<listName value="jcerp-log" />
    			<layout type="GLProject.RedisLog4NetCore.Layout.LogMessageLayout,GLProject.RedisLog4NetCore">
    				<param name="IncludeLocationInformation" value="true" />
    				<param name="AdditionalFields" value="type:JCErp,Environment:online,Level:%level,thread:%thread" />
    			</layout>
    			<filter type="log4net.Filter.LevelRangeFilter">
    				<param name="LevelMin" value="INFO"></param>
    				<param name="LevelMax" value="OFF"></param>
    			</filter>
    		</appender>-->
    
    		<!--redis集群服務器版-->
    		<!--<appender name="RedisAppender" type="VIPStation.RedisLog4NetCore.Appender.RedisClusterAppender, VIPStation.RedisLog4NetCore">
    			<redisServer value="192.168.88.91:6380,password=123456,192.168.88.91:6381,password=123456,192.168.88.91:6382,password=123456,192.168.88.91:6383,password=123456,192.168.88.91:6384,password=123456,192.168.88.91:6385,password=123456" />
    			<listName value="newwebvip-log" />
    			<layout type="VIPStation.RedisLog4NetCore.Layout.LogMessageLayout,VIPStation.RedisLog4NetCore">
    				<param name="IncludeLocationInformation" value="true" />
    				<param name="AdditionalFields" value="type:NewWebVip,Environment:online,Level:%level,thread:%thread" />
    			</layout>
    		</appender>-->
    
    	</log4net>
    </configuration>
    

    还要在项目的F:\项目路径\bin\Debug\net8.0\Configs位置复制刚刚创建了两个配置文件,    否则会提示找不到文件

  6. 接下来就是全局注册了,位置启动项Program.cs

  7. var configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .Build();
    var builder = WebApplication.CreateBuilder(args);
    
    var app = builder.Build();
    
    
    
    IHost host = Host.CreateDefaultBuilder(args)
        .UseWindowsService(options =>
        {
            options.ServiceName = "JWProject Worker Service";
        })
        .ConfigureServices((context,services) =>
        {
            
            services.AddCtmLog4Net(configuration);//注册的log4
       
        })
        .Build();
    
    
    await host.RunAsync()

 在业务层依赖注入使用

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫.net

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值