ファイル値をlogs\log-file.txt
に設定すると、このフォルダーは正確にどこに作成されますか? /bin
ディレクトリにありますか?
私のweb.configは次のようになります。
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="logs\log-file.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
</log4net>
これはログを記録する正しい方法ですか?
ILog logger = LogManager.GetLogger(typeof(CCController));
logger.Error("Some Page", ex); // where ex is the exception instance
ログファイルを実行時に決定される指定された場所に配置する場合は、プロジェクトの出力ディレクトリにすることができます。その場合、.config
ファイルエントリを構成できます。
<file type="log4net.Util.PatternString" value="%property{LogFileName}.txt" />
log4net configure
を呼び出す前のコードで、次のように新しいパスを設定します
log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path
log4net.Config.XmlConfigurator.Configure();
どのくらい簡単ですか? :)
プロジェクト/ソリューションのルートディレクトリにファイルが作成されます。
次のように、アプリのweb.configで選択する場所を指定できます。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:/ServiceLogs/Olympus.Core.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=".yyyyMMdd.log" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />
<maxSizeRollBackups value="-1" />
<countDirection value="1" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level [%thread] %logger - %message%newline%exception" />
</layout>
</appender>
ファイルタグは場所を指定します。
ファイル値は、「c:\ logs\log.txt」のような絶対パス、またはbinディレクトリからの相対パスと考えることができます。
それを実装する限り、私は通常、ログインする予定のクラスの先頭に次を配置します。
private static readonly ILog Log = LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
最後に、次のように使用できます。
Log.Debug("This is a DEBUG level message.");
Log4netはプロジェクトフォルダーに保存しています。何かのようなもの: \SolutionFolder\ProjectFolder\bin\SolutionConfiguration\logs\log-file.txt
。
どこ:
お役に立てれば!
FileAppender appender = repository.GetAppenders().OfType<FileAppender>().FirstOrDefault();
if (appender != null)
logger.DebugFormat("log file located at : {0}", appender.File);
else
logger.Error("Could not locate fileAppender");
ログフォルダとファイルについては、 @ Bens answer を使用します。
ただし、ログの作成部分についてはコメントします。いも正しい方法はありません。ロガーを手動でコーディングするとき、私はあなたがそれをしている方法でそれをします:
ILog logger = LogManager.GetLogger(typeof(CCController));
それは短くて簡潔だからです。
そうは言っても、最近はクラス内にロガーインスタンスを作成しません 。IoCコンテナーにインジェクトさせます 。
サンプルはプロジェクトフォルダーに保存されており、デフォルトのiisまたは.NETがユーザーに作成権限がない限り、ログフォルダーを作成できません。
最初にログフォルダーを作成し、iisユーザーに完全なアクセス許可を与え、ログファイルが作成されているかどうかを確認します。
ログファイルへのパスを動的に選択する場合は、次のリンクに記載されている方法を使用します。 ログファイルのパスを動的に選択する方法 。
必要に応じて、アプリEXEファイルが存在する場所へのパスを次のように設定できます-
var logFileLocation = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetEntryAssembly().Location);
次に、この 'logFileLocation'を次のように上記のリンクで記述されたメソッドに送信します。
Initialize(logFileLocation);
これで準備完了です! :)
Log4net 2.0.8を使用して.NETコア2.1を開発していたところ、XmlConfigurator.Configure()の引数が0個であるというNealWaltersコードのうめき声が見つかりました。 Matt Watsonによる解決策を見つけました こちら
log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path
var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));