===============================================
2020/2/25段第一編集 ccb_warlock
===============================================
使用log4netのための多忙なビジネス開発プロジェクトが「使用」されています前に、時間のため、具体的な機構パラメータと構成ファイルが存在しない間にデバッグするときだけ、コンソールに結果を見て下に着きます。
プロジェクトのスケジュールは、私はまた、ログ出力、保持の考え方の枠組みの完全な部分に時間持つ「最初に簡単な問題を、」私は最初のログログを書くために、このようなシステムと同様のelasticsearchを達成するために最初に行っていないので、緊張しませんでした今回の出来事開始はローカルファイルに書き込ま実装しています。
テストが見つかった後に漠然とまた、ログファイルが存在するかどうかを検討し、データストリームを介してログファイルへの書き込みにほとんど覚えもともと書かれたWinフォームは、スレッドセーフでこれを行うにはどのようにサイズを超えますlog4netの機能パッケージは本当にとても簡単です。
まず、プロファイルlog4net.configを追加
PS。もちろん、設定ファイルは、私が直接使用log4net.configの便宜のためにここにいる、その名前にはできません
#log4net.configに以下を追加します。
<?xmlのバージョン= " 1.0 "コード= " UTF-8 "?> <log4netの > <アペンダ名 = " ConsoleAppender "タイプ= " log4net.Appender.ConsoleAppender " > <レイアウト入力 = " log4net.Layout.PatternLayout " > < conversionPattern値 = " %日付[%スレッド]%-5level%ロガー- %メッセージ%改行" /> < /レイアウト> < /アペンダ> <アペンダ名 = "DebugRollingFileAppender "タイプ= " log4net.Appender.RollingFileAppender " > <ファイル値 = " の/ var / tmpに/ログ/て、myApp /デバッグ/ " /> <appendToFile値 = " 真" /> <rollingStyle値 = " コンポジット" /> < staticLogFileName値 = " 偽" /> <datePattern値 = " YYYY-MM-dd'.txt」" /> <maxSizeRollBackups値= "10 " /> <maximumFileSize値 = " 1メガバイト" /> <レイアウト入力 = " log4net.Layout.PatternLayout " > <conversionPattern値 = " %日付[%スレッド]%-5level%ロガー[%プロパティ{NDC}] - %メッセージ%改行" /> < /レイアウト> < /アペンダ> <アペンダ名 = " ErrorRollingFileAppender "タイプ= " log4net.Appender.RollingFileAppender " > <ファイル値= "の/ var / tmpに/ログ/て、myApp /エラー/ " /> <appendToFile値 = " 真" /> <rollingStyle値 = " コンポジット" /> <staticLogFileName値 = " 偽" /> <datePattern値 = " YYYY-MM- dd'.txt」" /> <maxSizeRollBackups値 = " 10 " /> <maximumFileSize値 = " 1メガバイト" /> <レイアウトタイプ = "log4net.Layout.PatternLayout " > <conversionPattern値 = " %日付[%スレッド】%-5level%ロガー[%プロパティ{NDC}] - %メッセージ%改行" /> < /レイアウト> < フィルタタイプ= " log4net.Filter .LevelRangeFilter " > < のparamの名前= " LevelMin "値= " ERROR " /> < PARAM NAME = " LevelMax "値= "FATAL " /> < / フィルタ > < /アペンダ> <ルート > <レベル値 = " ALL " /> <アペンダ -REF REF = " ConsoleAppender " /> <アペンダ -REF REF = " DebugRollingFileAppender " /> <アペンダ -REF REF = " ErrorRollingFileAppender " /> < /ルート> < / log4netの>
PS。
あなたが見ることができ、DebugRollingFileAppender ErrorRollingFileAppenderはエントリのパラメータの詳細な説明に続いてコンフィギュレーションを作成したローカルファイルを、達成して記述することです。
パラメーター | 説明 | 値の範囲 |
ファイル | ログファイルへのパスが位置しています | |
appendToFile | 書き込みモード | 真。インクリメンタル書き込み 偽。上書き |
rollingStyle | 名前付き | 日付。日付で名前付き サイズ。ファイルサイズによって名前付き 名前のコンポジット。統合された日付とファイルサイズ |
staticLogFileName | ファイル名は変数です | 。真の不変(静的) 偽。変数 |
datePattern | (スクロールサイクルを制御するために使用される)日付形式。所望であればサフィックスの.txt、コンテンツの背後「の.txt」を添加してもよいです。 | |
maxSizeRollBackups | ローリング期間内のファイルの最大数 | -1数に制限がないことを示し |
maximumFileSize | 各ファイルの最大容量。 ローリング期間内のログファイルの数が少ないファイルの最大数よりも、新しいファイルを作成する場合は、ログファイルには、上限を超えた場合。ファイルの最大数に等しい場合には、ローリングサイクルの最初のファイルから再書き込み再起動します |
|
conversionPattern | 各ログ・フォーマット | |
フィルタ | (ログに応じて、記録の種類を設定するための)フィルタ |
次に説明ログ形式を分離
<conversionPattern値= " %日付[%スレッド】%-5level%ロガー[%プロパティ{NDC}] - %メッセージ%改行" />
パラメータ | 説明 | 表語文字 |
%日付時刻 | ログレコードの時間を生成します | %dの |
%糸 | ログレコードは、スレッドIDを生成しています | %トン |
%-5level | ログレベル | |
%ロガー | ログは(アセンブリを含む)クラスを生成する方法 | |
%プロパティ | プロパティ | |
%メッセージ | 情報ログ | %mを |
%改行 | ラップ | %nを |
%のL | 行番号のログファイルの声明 | |
%F | (ファイル名を含む)、ログファイルのパスステートメント |
レベル:ログの最低レベル、次のようにログ・レコードに対応するレベルに応じ。
すべてのデバッグ情報FATAL OFF ERRORをWARN
•すべて
•DEBUG•DEBUG
•INFO•INFO•INFO
WARN•WARN•WARN•WARN•
•ERROR•ERROR•ERROR•ERROR•ERROR
•FATAL•FATAL•FATAL•FATAL•FATAL•FATALを
• OFF•OFF•OFF•OFF•OFF•OFF•OFF
第二に、プロジェクトにlog4netのを追加
我的项目是基于.net core 2.2创建的asp.net core项目,对于log4net的加入是在program.cs里实现的,具体的代码如下:
using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Logging; namespace Api { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } private static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureLogging((context, logging) => { logging.AddLog4Net(); }) .UseStartup<Startup>(); } }
接着后面的程序只要有log输出就会向指定的文件内写日志,例如我在定时任务中添加的日志输出:
using log4net; using Quartz; namespace Domain.Jobs { public class ServiceToken : IJob { private readonly ILog _log = LogManager.GetLogger(typeof(ServiceToken)); ······ public Task Execute(IJobExecutionContext context) { var now = DateTimeOffset.Now; _log.Debug($"{now:yyyy/MM/dd HH:mm:ss.fff}, 执行维护token的任务."); // todo return Task.CompletedTask; } } }
1.http://logging.apache.org/log4net/release/config-examples.html
2.https://stackoverflow.com/questions/8926409/log4net-hierarchy-and-logging-levels?r=SearchResults