9

みなさんおはようございます、

ローカルマシンで開発しているときに存在しなかったlog4netの問題がありますが、アプリケーションをサーバーにデプロイすると、log4netが機能しなくなりました。

これはサーバー構成です:-Windows XP SP3 -IIS 7 -framework .Net v4

これは、Webサイトのweb.configのlog4net構成です。

<configuration>
      <log4net>
        <root>
          <level value="DEBUG" />
          <appender-ref ref="LogFileAppender" />
        </root>
        <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="log.txt" />
          <param name="AppendToFile" value="true" />
          <rollingStyle value="Size" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="30MB" />
          <staticLogFileName value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
          </layout>
        </appender>
      </log4net>
    </configuration>

クラスライブラリもあります。これはApp.configファイルです。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <log4net>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="LogFileAppender" />
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
      <param name="File" value="log.txt" />
      <param name="AppendToFile" value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="30MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
      </layout>
    </appender>
  </log4net>
</configuration>

これは、すべてのクラスでlog関数を呼び出す方法です。

private static readonly ILog log = LogManager.GetLogger(typeof(AppDomain));

...そしてこれは私がそれを呼ぶ方法です:

log.Error("\n\t=>" + ex.GetBaseException().Message + "\n\r" + " @ " + Environment.StackTrace);
4

5 に答える 5

15

ファイル'log.txt'に書き込む権限がない可能性があります。

現在のディレクトリがどうなるかはわかりませんが、IISが書き込める場所になる可能性は低いです。

どこかにフォルダを作成し、IISがそのフォルダに書き込むためのアクセスを許可する必要があります。IIS_IUSRSグループへのアクセスを許可してから、そのファイルへの絶対パスを指定する必要があることを理解しています。例えば

<param name="File" value="D:\Logs\log.txt" />

..ご希望の場所へのパスを使用します。

于 2013-01-31T10:24:17.207 に答える
10

ログファイルの書き込みに関しては、セキュリティの問題との以前の戦いのために、プログラムファイルディレクトリのどこにも、または仮想ディレクトリのどこにもログファイルを書き込もうとしない傾向があります。現在、すべてのlog4netログファイルに次のようなものを使用しています。

<file type="log4net.Util.PatternString" value="${ALLUSERSPROFILE}/<Product Name>/Logs/<Program Name>/<Program Name>.log" />

${ALLUSERSPROFILE}上記のキーです。このディレクトリには通常、仮想ディレクトリやプログラムファイルディレクトリのようなセキュリティ制限はありません。このパスを使用して以来、問題は発生していないことがわかりました。

ProgramDataこの環境変数を使用すると、Windows Vista、7、8、Server 2008などのディレクトリに移動できます。XPを使用すると、別の場所に移動できますが、アクセス許可が緩和されたディレクトリに移動します。

補足として、上記のログステートメントに注意してください。

log.Error("\n\t=>" + ex.GetBaseException().Message + "\n\r" + " @ " + Environment.StackTrace);

次のように短縮できますlog.Error(ex);。フォーマットが必須でない限り。しかし、そのように記述し、pdbを使用してバイナリをデプロイすると、ログに記録される例外には、完全なスタックトレースとエラーが発生した行番号が含まれます。

編集:

log4netの構成が無効な場合も、ログファイルの作成に失敗します。log4net構成で指定されたフォルダーへの書き込みアクセス権があることが確実な場合は、最初にlog4net構成debug="true"セクションで設定してlog4netデバッグを有効にすることをお勧めします。

<log4net debug="true">
    ...
</log4net>

上記のデバッグフラグを設定すると、log4netは、Windowsトレースリスナーを介してすべてのログを出力するようになります。このトレースリスナーの出力をキャプチャするには、app.configに次のようなセクションを追加する必要があります。

<system.diagnostics>
  <trace autoflush="true">
    <listeners>
      <add 
        name="textWriterTraceListener" 
        type="System.Diagnostics.TextWriterTraceListener" 
        initializeData="C:\tmp\log4net.txt" />
    </listeners>
  </trace>
</system.diagnostics>

上記のapp.configのトレースリスナー構成で指定されたパスが存在し、フォルダーへの書き込みアクセス権があることを確認してください。

于 2013-01-31T13:08:01.387 に答える
0

私自身も同じ問題を抱えていましたが、構成ファイルの「ビルドアクション」を設定するのを忘れていたことがわかりました。したがって、log4net.configファイルはデプロイされませんでした。もちろん、これはアプリケーションにログファイルを書き込ませるために必要です。

于 2013-10-24T11:18:28.930 に答える
0

ログフォルダディレクトリには、IISを実行するためのアクセス許可を付与する必要があります。たとえば、IISがネットワークサービスとして実行されている場合は、ネットワークサービスアカウントをディレクトリに追加し、完全なアクセス許可を付与します。

于 2015-04-22T12:05:35.790 に答える
0

web.configの以下の設定を参照して確認してください。すべて問題がなければ、アプリケーションプールの所有者を使用してinetpubサブフォルダーの書き込み権限を確認してください。完全な許可を与えない場合。

それがあなたの問題を解決することを願っています

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,     log4net" />
  </configSections>

  <log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="logs\log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n %newline--%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>

于 2017-08-15T06:28:30.817 に答える