Log4Netの使い方

ステップ 1: nuget log4net パッケージをインストールする

ここに画像の説明を挿入します

ステップ 2: 新しい log4net.config 構成ファイルを作成し、ログ出力形式を構成する

<?xml version="1.0"?>
<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
	</configSections>
	<appSettings>
		<add key="WebSocketPort" value="45154" />
	</appSettings>
	<log4net>
		<!--指定日记记录方式,以滚动文件的方式(文件记录)-->
		<appender name="logInfoToFile" type="log4net.Appender.RollingFileAppender,log4net">
			<!--日志路径-->
			<file value="logs/log4net/info"/>
			<!--是否是向文件中追加日志-->
			<AppendToFile value="true"/>
			<!--日志根据日期滚动-->
			<RollingStyle value="Date"/>
			<!--日志文件名格式为:info.2021-12-30.txt-->
			<DatePattern value="'.'yyyy-MM-dd'.txt'"/>
			<!--日志文件名是否是固定不变的-->
			<StaticLogFileName value="false"/>
			<!--布局-->
			<layout type="log4net.Layout.PatternLayout,log4net">
				<ConversionPattern value="%d %-5p [%c] %m%n"/>
			</layout>
		</appender>
		<appender name="logErrorToFile" type="log4net.Appender.RollingFileAppender,log4net">
			<file value="logs/log4net/error"/>
			<AppendToFile value="true"/>
			<RollingStyle value="Date"/>
			<!--日志文件名格式为:error.2021-12-30.txt-->
			<DatePattern value="'.'yyyy-MM-dd'.txt'"/>
			<StaticLogFileName value="false"/>
			<layout type="log4net.Layout.PatternLayout,log4net">
				<ConversionPattern value="%d %-5p [%c] %m%n"/>
			</layout>
		</appender>
		<!--()logger -->
		<root>
			<!-- 支持级别:ALL -->
			<level value="ALL" additivity="false"/>
			<!-- ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF-->
			<!-- 支持的appender名称:logInfoToFile -->
			<appender-ref ref="logInfoToFile"/>
		</root>
		<!-- logger名称为ApplicationInfoLog,阻止父logger中的appender -->
		<logger name="ApplicationInfoLog" additivity="false">
			<!-- 支持级别:ALL -->
			<level value="ALL"/>
			<!-- 支持的appender名称:logInfoToFile -->
			<appender-ref ref="logInfoToFile"/>
		</logger>
		<logger name="ApplicationErrorLog" additivity="false">
			<!-- 支持级别:ALL -->
			<level value="ALL"/>
			<!-- 支持的appender名称:logErrorToFile -->
			<appender-ref ref="logErrorToFile"/>
		</logger>
	</log4net>
</configuration>

または、次のコードをプロジェクトの .csproj ファイルに追加します。

<ItemGroup>
    <Content Update="log4net.config">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
</ItemGroup>

3 番目のステップのコントローラー コードの内容

   [ApiController]
    [Route("[controller]/[action]")]
    public class HomeController : Controller
    {
    
    
        private readonly ILogger<HomeController> _logger;
        public HomeController(ILogger  <HomeController> logger) 
        {
    
    
            _logger = logger;
        }

        [HttpGet]
        /// <summary>
        /// 获取日志输出 
        /// </summary>
        /// <returns></returns>
        public void GetLogOnUniversalHost() 
        {
    
    
            ILoggerRepository repository = LogManager.CreateRepository(".NET Core RepositoryRepository");
            XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
            ILog log = LogManager.GetLogger(repository.Name, ".NET Core Log4net");
            log.Info(".NET Core Log4net log1");
            log.Info("test log1");
            log.Error("error1");
            log.Info("linezero1");
            
        }

ステップ 4: スタートアップ項目にログ構成を追加してデフォルトのログプロバイダーを置き換え、コントローラーに特定の出力コンテンツを書き込みます

public static IHostBuilder CreateHostBuilder(string[] args) => 
    Host.CreateDefaultBuilder(args).ConfigureLogging(logging => // 添加提供程序(通用主机)
    {
    
    
        logging.ClearProviders(); // 去掉默认添加的日志提供程序
        logging.AddConsole();
        logging.AddDebug();
        logging.AddEventSourceLogger();
        logging.AddEventLog();
    }).ConfigureWebHostDefaults(webBuilder =>
    {
    
    
    webBuilder.UseStartup < Startup > ();
    });

走った後

ここに画像の説明を挿入します

ステップ 5: ロガーノード構成の詳細な説明

1: Log4Net 構造

Log4net は主に、Logger、Appender、Filter、Layout、Object Render の 5 つのコア コンポーネントに分かれています。

2: ロガーの概要

Logger はログを担当するレコーダーです。通常の実行時ログと例外発生時のエラー ログを記録する必要があると仮定すると、構成ファイルに 2 つの Logger を追加することでこれを実現できます。Logger は主にログを分類し、ログ レベルを制御するために使用されます。さまざまな形式でログ情報を出力でき、ログの出力レベルも制御できます。

log4net は継承システムを使用します。つまり、ロガーが 2 つある場合、それらの名前は abc と ab になります。すると、ab は abc の祖先になります。各ロガーは、その祖先のプロパティを継承します。

3: アペンダーの概要

Appender は記録メディアを提供しており、コンソール、テキスト ファイル、データベースを含む Windows ログ イベント ビューア、電子メールなどにログを出力することができます。
これは、Appender 構成を通じて実現できます。Log4Net は、デフォルトで一般的に使用される Appender をいくつか提供しています。いくつかの構成ファイルを変更するだけで、データベースとファイルに同時に書き込む機能を実現できます。

4: フィルターの紹介

Filter はフィルタで、Appender が出力した内容の一部をフィルタリングして、必要なログのみを出力することができます。

5:レイアウトの紹介

レイアウトは、アペンダーの出力形式 (線形または XML) を制御するために使用されます。アペンダーはレイアウト構成を 1 つだけ持つことができます。

6: オブジェクト レンダーの概要

Object Render は、オブジェクトを文字列に変換してログに記録する方法をロガーに指示します。ILog で定義されたログ メソッドによって受け取られるパラメータは、文字列ではなくオブジェクトです。
たとえば、Orange オブジェクトをログに記録したいとします。ただし、この時点では、ロガーは Orange のデフォルトの ToString メソッドのみを呼び出します。したがって、log4net.ObjectRender.IObjectRender インターフェイスを実装する OrangeRender クラスを定義し、登録します。この時点で、ロガーは Orange をログに記録する方法を認識します。

7: ロガーノードの構成

name は必須です。コード内で ILog オブジェクトを取得するときに使用されるロガーの名前です。
additivity はオプションで、値は true または false で、デフォルト値は true です。false に設定すると、親ロガーのアペンダーがブロックされます。
ロガーによってサポートされるサブ要素: level、appender-ref、param。
レベルは最大でも 1 です。このレベル以上のもののみが記録されます。OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
appender-ref 0 以上、引用符で囲まれるアペンダーの名前。
param 0以上の場合は、いくつかのパラメータを設定します。

8: ログレベルレベル

 高到底分别为:OFF > FATAL > ERROR > WARN > INFO > DEBUG  > ALL

9: ILog オブジェクトの説明

ILog は Logger を実装するインターフェイスであり、さまざまなログ レベルでログを記録するための 5 つのメソッド (Debug、Inof、Warn、Error、Fatal) が定義されています。これら 5 つのメソッドにはそれぞれ 1 つのオーバーロードがあります。例として Debug を取り上げます。他のメソッドも同様です。

ILog の Debug メソッドの定義は次のとおりです。
void Debug(object message);

    void Debug(object message, Exception exception);

ブール値プロパティもあります:
bool IsDebugEnabled { get; }

Debug(オブジェクト メッセージ、例外例外) を使用すると、レイアウトの構成に関係なく、例外メッセージやトレースを含む例外情報がログに出力されます。Debug(オブジェクトメッセージ)を使用すると、レイアウトがどのように設定されても例外メッセージは出力されません。

コードでは、LogManager クラスを使用して、Logger 構成で対応する ILog オブジェクトを取得できます。LogManager クラスは、適切な Logger を管理するために使用されます。その GetLogger 静的メソッドは、構成ファイル内の対応する Logger を取得できます。コードは次のとおりです。以下に続きます:

ILog ログ = LogManager.GetLogger(“ロガー名”)

10: アペンダーノード構成の詳細説明

1: アペンダーノードの構成

サポートされる属性: name、type (name 属性は一意である必要があり、type 属性は指定する必要があります)。
name 必須、アペンダー オブジェクトの名前
type 必須、アペンダー オブジェクトの出力タイプ
よく使用されるサブ要素: appender-ref、filter、layout、param

0 個以上の appender-ref により、このアペンダーが他のアペンダーを参照できるようになります。すべてのアペンダー タイプがサポートしているわけではありません。
filter 0 以上。このアペンダーで使用されるフィルターを定義します。
ayout は最大でも 1 つです。アペンダーによって使用される出力形式を定義します。
Param 0以上の場合、Appenderクラスの対応する属性の値を設定します。

2:Appenderの出力方法(type属性)

AdoNetAppender              将日志记录到数据库中。可以采用SQL和存储过程两种方式。

AnsiColorTerminalAppender   将日志高亮输出到ANSI终端。

AspNetTraceAppender         能用asp.net中Trace的方式查看记录的日志。

BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。

ConsoleAppender             将日志输出到应用程序控制台。

EventLogAppender            将日志写到Windows Event Log。

FileAppender                将日志输出到文件。

ForwardingAppender          发送日志事件到子Appenders。

LocalSyslogAppender         将日志写到local syslog service (仅用于UNIX环境下)。

MemoryAppender              将日志存到内存缓冲区。

NetSendAppender             将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

OutputDebugStringAppender   将日志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可用,将忽略消息。

RemoteSyslogAppender        通过UDP网络协议将日志写到Remote syslog service。

RemotingAppender            通过.NET Remoting将日志写到远程接收端。

RollingFileAppender         将日志以回滚文件的形式写到文件中。

SmtpAppender                将日志写到邮件中。

SmtpPickupDirAppender       将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。

TelnetAppender              客户端通过Telnet来接受日志事件。

TraceAppender               将日志写到.NET trace 系统。

UdpAppender                 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。

11: フィルターノード構成

filter は子要素としてのみ使用でき、type 属性はフィルターのタイプを示します。共通のサブ要素の数は 0 以上であり、その機能はいくつかのパラメータを設定することです。

1: フィルター タイプの説明 DenyAllFilter は、すべてのログ イベントの記録を防止します。

LevelMatchFilter    只有指定等级的日志事件才被记录

LevelRangeFilter    日志等级在指定范围内的事件才被记录

LoggerMatchFilter   Logger名称匹配,才记录

PropertyFilter      消息匹配指定的属性值时才被记录

StringMathFilter    消息匹配指定的字符串才被记录

MdcFilter

NdcFilter

12: レイアウトノード構成の詳細説明

1: レイアウトノードの構成

レイアウト ノードは子要素としてのみ使用できます。type 属性は、レイアウトのタイプを示します。共通のサブ要素の数は 0 以上であり、その機能はいくつかのパラメータを設定することです。

Layout用于控制Appender的输出格式,可以使线性的也可以使XML。最常用的Layout应该是用户自定义格式的PatternLayout,其次是SimpleLayout和ExceptionLayout。然后还有4个Layout,其中有两个是输出Xml的Layout,但是中文会有问题。ExceptionLayout需要给Logger的方法传入Exception对象作为参数才起作用,否则就什么也不输出。输出的时候会包含Message和Trace。

2: レイアウトノードの type 属性の値

ExceptionLayout は、ログ イベント内の例外のテキスト情報のみをレンダリングします。

PatternLayout           可以通过类型字符串来配置的布局

RawPropertyLayout       从日志事件中提取属性值

RawTimeStampLayout      从日志事件中提取日期

RawUtcTimeStampLayout   从日志事件中提取UTC日期

SimpleLayout            很简单的布局

XmlLayout               把日志事件格式化为XML元素的布局

3: PatterLayoutのフォーマット文字列

%m、%message によって出力されたログ メッセージ

%d、%datetime        输出当前语句运行的时刻,格式%date{yyyy-MM-dd HH:mm:ss,fff}

%r、%timestamp       输出程序从运行到执行到当前语句时消耗的毫秒数

%p、%level           日志的当前优先级别

%c、%logger          当前日志对象的名称

%L、%line            输出语句所在的行号

%F、%file            输出语句所在的文件名,警告:只在调试的时候有效,调用本地信息会影响性能

%a、%appdomain       引发日志事件的应用程序域的名称。

%C、%class、%type    引发日志请求的类的全名,警告:会影响性能

%exception           异常信息

%u、%identity        当前活动用户的名字,我测试的时候%identity返回都是空的。警告:会影响性能

%l、%location        引发日志事件的名空间、类名、方法、行号。警告:会影响性能,依赖pdb文件

%M、%method          发生日志请求的方法名,警告:会影响性能

%n、%newline         换行符

%x、%ndc             NDC(nested diagnostic context)

%X、%mdc、%P、%properties  等介于 %property

%property           输出{log4net:Identity=, log4net:UserName=, log4net:HostName=} 

%t、%thread         引发日志事件的线程,如果没有线程名就使用线程号。

%w、%username       当前用户的WindowsIdentity,类似:HostName/Username。警告:会影响性能

%utcdate            发生日志事件的UTC时间。例如:%utcdate{HH:mm:ss,fff}

%%                  输出一个百分号

4: PatterLayout フォーマット修飾子

フォーマット修飾子の配置 最小幅 最大幅 説明

%20logger       右对齐     20        无     如果logger名不足20个字符,就在左边补空格

%-20logger      左对齐     20        无     如果logger名不足20个字符,就在右边补空格

%.30logger      左对齐     无        30     超过30个字符将截断

%20.30logger    右对齐     20        30     logger名要在20到30之间,少了在左边补空格,多了截断

%-20.30logger   左对齐     20        30     logger名要在20到30之间,少了在右边补空格,多了截断

13: その他のノードの説明と構成

1: パラメータノード

要素は、名前、値、タイプなどの属性を含む、任意の要素の子要素にすることができます。name: 必須、値は親オブジェクトのパラメータ名です。value: オプション。value はパラメータ値に変換できる文字列です。type: オプション value と type のうち、1 つの属性を指定する必要があります。type は型名です。log4net アセンブリで type が定義されていない場合は、完全名を使用する必要があります。

2: ルートノード

ルート ノードの役割は、他のすべてのロガーがデフォルトでそれを継承することです。ルート要素には属性がありません。ルート ノードの子要素には、ロガーと同じ appender-ref、level、および param があります。

3: log4net ノード

Log4net ノードはログ構成全体のルート ノードであり、デバッグ、更新、およびしきい値の属性が含まれています。debug: オプション、値は true または false、デフォルトは false です。log4net の内部デバッグを有効にするには、true に設定します。update: オプション、値は Merge (マージ) または Overwrite (上書き)、デフォルト値は Merge です。[上書き] に設定すると、構成を送信するときに構成されたライブラリがリセットされます。しきい値: オプション。値はリポジトリ (ライブラリ) に登録されているレベルです。デフォルト値は ALL です。

Log4net节点支持的子元素:appender(0或多个)、logger (0或多个)、renderer (0或多个)、root(最多一个)、param(0或多个)。

4: 関連する設定ファイル

デフォルトでは、log4net はアプリケーションの構成ファイル App.config または Web.config に関連付けられており、これらはアセンブリのカスタム プロパティを使用して設定できます。このカスタム属性 log4net.Config.XmlConifguratorAttribute を導入しましょう。

XmlConfiguratorAttribute有3个属性:ConfigFile、ConfigFileExtension、Watch。

ConfigFile:配置文件的名字,文件路径相对于应用程序目录。ConfigFileExtension:配置文件的扩展名,文件路径相对于应用程序的目录,不能和ConfigFile属性一起使用。Watch:如果将Watch属性设置为true,就会监视配置文件,当配置文件发生变化的时候,就会重新加载。例如:

// デフォルトの構成ファイル App.exe.config を監視します

[アセンブリ: log4net.Config.XmlConfigurator(Watch = true)]

    //配置文件:App.exe.log4net

    [assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "log4net")]


    //配置文件:log4net.config

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

   也可以在Global.asax的Application_Start里或者是Program.cs中的Main方法中添加,注意这里一定是绝对路径,如下所示:
    log4net.Config.XmlConfigurator.Configure(new FileInfo(@"F:/log4net.config"));

終わり

おすすめ

転載: blog.csdn.net/weixin_49543015/article/details/125720912