web-dev-qa-db-ja.com

log4netはこのログファイルをどこで作成しますか?

ファイル値を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
68
Blankman

ログファイルを実行時に決定される指定された場所に配置する場合は、プロジェクトの出力ディレクトリにすることができます。その場合、.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();

どのくらい簡単ですか? :)

61

プロジェクト/ソリューションのルートディレクトリにファイルが作成されます。

次のように、アプリの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>

ファイルタグは場所を指定します。

44
Oladipo Olasemo

ファイル値は、「c:\ logs\log.txt」のような絶対パス、またはbinディレクトリからの相対パスと考えることができます。

それを実装する限り、私は通常、ログインする予定のクラスの先頭に次を配置します。

private static readonly ILog Log = LogManager.GetLogger( 
MethodBase.GetCurrentMethod().DeclaringType);

最後に、次のように使用できます。

Log.Debug("This is a DEBUG level message.");
19
Ben.Vineyard

Log4netはプロジェクトフォルダーに保存しています。何かのようなもの: \SolutionFolder\ProjectFolder\bin\SolutionConfiguration\logs\log-file.txt

どこ:

  • SolutionFolderはソリューションを保存する場所です
  • ProjectFolderは、プロジェクトがソリューション内に存在するフォルダーであり、
  • SolutionConfigurationは、プロジェクトのすべてのバイナリを含むフォルダーです(デフォルトはDebugまたはReleaseです)

お役に立てれば!

10
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");
6

ログフォルダとファイルについては、 @ Bens answer を使用します。

ただし、ログの作成部分についてはコメントします。いも正しい方法はありません。ロガーを手動でコーディングするとき、私はあなたがそれをしている方法でそれをします:

ILog logger = LogManager.GetLogger(typeof(CCController));

それは短くて簡潔だからです。

そうは言っても、最近はクラス内にロガーインスタンスを作成しません 。IoCコンテナーにインジェクトさせます

4
Peter Lillevold

サンプルはプロジェクトフォルダーに保存されており、デフォルトのiisまたは.NETがユーザーに作成権限がない限り、ログフォルダーを作成できません。

最初にログフォルダーを作成し、iisユーザーに完全なアクセス許可を与え、ログファイルが作成されているかどうかを確認します。

0
griegs

ログファイルへのパスを動的に選択する場合は、次のリンクに記載されている方法を使用します。 ログファイルのパスを動的に選択する方法

必要に応じて、アプリEXEファイルが存在する場所へのパスを次のように設定できます-

var logFileLocation = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetEntryAssembly().Location);

次に、この 'logFileLocation'を次のように上記のリンクで記述されたメソッドに送信します。

Initialize(logFileLocation);

これで準備完了です! :)

0
Ben.S

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"));
0
andrew pate