posts - 52,comments - 30,views - 13万

.net 5.0 下记录日志以及日志的配置

1.我们先开始准备一个日志的Helper

2.然后在指定目录下添加配置文件 .XML

复制代码
using log4net;
using log4net.Config;
using System;
using System.IO;

namespace AnnualBill.Logger
{
    public class LoggerHelper
    {
        #region Fields
        private static readonly ILog logger;
        #endregion

        #region Constructors
        static LoggerHelper()
        {
            if (logger == null)
            {
                var repository = LogManager.CreateRepository("MixdoRepository");
                //log4net从log4net.config文件中读取配置信息
                var log4netConfig = new FileInfo("App_Data/log4net.config.xml");
                XmlConfigurator.Configure(repository, log4netConfig);
                logger = LogManager.GetLogger(repository.Name, "InfoLogger");
            }
        }
        #endregion

        #region Utilities
        /// <summary>
        /// 普通日志
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        public static void Info(string message, Exception exception = null)
        {
            if (exception == null)
                logger.Info(message);
            else
                logger.Info(message, exception);
        }

        /// <summary>
        /// 告警日志
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        public static void Warn(string message, Exception exception = null)
        {

            if (exception == null)
                logger.Warn(message);
            else
                logger.Warn(message, exception);
        }

        /// <summary>
        /// 错误日志
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        public static void Error(string message, Exception exception = null)
        {

            if (exception == null)
                logger.Error(message);
            else
                logger.Error(message, exception);
        }

        #endregion
    }
}
复制代码
复制代码
<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <!-- Define some output appenders -->
    <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
        <file value="log.txt" />
        <!--追加日志内容-->
        <appendToFile value="true" />

        <!--防止多线程时不能写Log-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

        <!--可以为:Once|Size|Date|Composite-->
        <!--Composite为Size和Date的组合-->
        <rollingStyle value="Composite" />

        <!--当备份文件时,为文件名加的后缀-->
        <datePattern value="yyyyMMdd.TXT" />

        <!--日志最大个数,都是最新的-->
        <!--rollingStyle节点为Size时,只能有value个日志-->
        <!--rollingStyle节点为Composite时,每天有value个日志-->
        <maxSizeRollBackups value="20" />

        <!--可用的单位:KB|MB|GB-->
        <maximumFileSize value="3MB" />

        <!--置为true,当前最新日志文件名永远为file节中的名字-->
        <staticLogFileName value="true" />

        <!--输出级别在INFO和ERROR之间的日志-->
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ALL" />
            <param name="LevelMax" value="FATAL" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
        </layout>
    </appender>
    <root>
        <priority value="ALL"/>
        <level value="ALL"/>
        <appender-ref ref="rollingAppender" />
    </root>
</log4net>
复制代码

 这里再添加一种配置方式

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    </configSections>
    <log4net>
        <appender name="ElkAppender" type="log4net.Appender.SocketAppender, Elk.Appender">
            <!--远程Logstash服务地址-->
            <!--RemoteAddress value="xxx.xxx.xx.xxx" / -->
            <RemotePort value="4569" />
            <!--socket地址族,当前为ipv4-->
            <AddressFamily value="InterNetwork" />
            <SocketType value="Stream" />
            <ProtocolType value="Tcp" />
            <!--连接失败的重试次数-->
            <ConAttemptsCount value="5" />
            <!--连接失败重试的间隔时间-->
            <ConAttemptsWaitingTimeMilliSeconds value="3000" />
            <!--启用线程池发送消息-->
            <UseThreadPoolQueue value="true" />
            <!--格式化为json-->
            <layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json">
                <member value="appname|apos_member_service" />
                <member value="env:env" />
                <member value="level:level" />
                <member value="logger:logger" />
                <member value="message:messageObject" />
                <member value="exception:exception" />
                <member value="traceId:traceId" />
            </layout>
        </appender>

        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
        </appender>

        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
            <param name="Encoding" value="utf-8" />
            <file type="log4net.Util.PatternString" value="App_Data\log\%date{yyyy-MM-dd}.Info.log" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <!--备份log文件的个数最多10个-->
            <maximumFileSize value="10MB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <!--指定log的格式-->
                <conversionPattern value="[%date] Thread:%thread %message%newline" />
            </layout>
        </appender>

        <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
            <param name="Encoding" value="utf-8" />
            <file type="log4net.Util.PatternString" value="App_Data\log\%date{yyyy-MM-dd}.Debug.log" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="10MB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="[%date] Thread:%thread %message%newline" />
            </layout>
        </appender>

        <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
            <param name="Encoding" value="utf-8" />
            <file type="log4net.Util.PatternString" value="App_Data\log\%date{yyyy-MM-dd}.Warn.log" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="10MB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="[%date] Thread:%thread %message%newline" />
            </layout>
        </appender>

        <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
            <param name="Encoding" value="utf-8" />
            <file type="log4net.Util.PatternString" value="App_Data\log\%date{yyyy-MM-dd}.Error.log" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="100" />
            <maximumFileSize value="10MB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="[%date] Thread:%thread %message%newline" />
            </layout>
        </appender>

        <root>
            <level value="ALL" />
            <appender-ref ref="ElkAppender"/>
        </root>

        <logger name="infologger">
            <level value="INFO" />
            <appender-ref ref="InfoAppender" />
        </logger>

        <logger name="debuglogger">
            <level value="DEBUG" />
            <appender-ref ref="DebugAppender" />
        </logger>

        <logger name="warnlogger">
            <level value="WARN" />
            <appender-ref ref="WarnAppender" />
        </logger>

        <logger name="errorlogger">
            <level value="ERROR" />
            <appender-ref ref="ErrorAppender" />
        </logger>
    </log4net>
</configuration>
复制代码

 

posted on   白码一号  阅读(480)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示