私たちはプロジェクトを展開しようとしていますが、elmahにwwwrootの外部にxmlログを作成させることはできません。それは現在、inetpub {site} \ wwwroot \ App_Dataにログを記録しています。これは、これが動作している唯一のパスだからです。私たちはinetpub {site} \ logsフォルダにログを記録します。これを稼働させるためのアイデアはありますか?私たちはすでにフォルダへの\と../パスを試しましたが、うまく動作していないようです。Elmah logPath outside wwwroot
3
A
答えて
2
これを動作させるためのアイデアはありますか?
ログファイルの絶対パスを指定できますが、IISでWebアプリケーションを実行するように構成されているアカウントには、このフォルダへの書き込み権限があるため、内部でファイルを作成および変更できるようにする必要があります。
1
Darinが述べたように、Webアプリケーションが実行されているユーザーアカウントでログフォルダにアクセスできるようにしましたか。私は相対的なパスがうまくいくはずだと思いますか?また、フォルダが存在することを確認しますか?
3
ELMAH logPathはWeb.configでのみ設定でき、仮想パス( "〜/"で始まる場合)または絶対ファイルシステムパスのいずれかになります。
<elmah>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/Elmah.Errors" />
しかし、プログラムELMAH LOGPATHを設定するには、どのように回避策があります:Web.configファイルでELMAH LOGPATHのデフォルトの設定ではある
public class MvcApplication : HttpApplication
{
private static string _elmahDirectory;
private static readonly FieldInfo ElmahLogPathField = typeof(XmlFileErrorLog).GetField("_logPath", BindingFlags.NonPublic | BindingFlags.Instance);
protected void Application_Start()
{
// Assign your path here
_elmahDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
...
}
protected void Application_BeginRequest()
{
var xmlFileErrorLog = (XmlFileErrorLog)Elmah.ErrorLog.GetDefault(HttpContext.Current);
ElmahLogPathField.SetValue(xmlFileErrorLog, _elmahDirectory);
}
}
0
あなたがコードから代わりのでLOGPATHを設定する必要がある場合設定ファイルに設定するには、以下のようにします。
デフォルトでは、ELMAHはweb.configファイルを読み取り、作成するErrorLog
の実装を見つけます。ただし、このメカニズムをオーバーライドして、独自のIServiceProvider
実装を実装し、ServiceCenter.Current
プロパティを使用してインスタンスを返すデリゲートを登録できます。
internal sealed class ElmahServiceProvider : IServiceProvider
{
private readonly ErrorLog defaultErrorLog;
private ElmahServiceProvider(ErrorLog defaultErrorLog)
{
Requires.IsNotNull(defaultErrorLog, "defaultErrorLog");
this.defaultErrorLog = defaultErrorLog;
}
public object GetService(Type serviceType)
{
return serviceType == typeof(ErrorLog) ? this.defaultErrorLog : null;
}
}
とアプリケーションの開始時に、あなたは以下の操作を行うことができます:
このようなIServiceProvider
実装はこのようになります
// Option 1: using a virtual path
var logger = new XmlFileErrorLog(new Dictionary<string, string>
{
{ "logPath", "~/myCustomPath" }
});
// Option 2: using a fixed path
var logger = new XmlFileErrorLog("c:\\logFiles");
// Creating the provider and registering it in the ServiceCenter.
var provider = new ElmahServiceProvider(logger);
ServiceCenter.Current = c => provider;
これは反射に戻す必要がなくなりことができます。
関連する問題
- 1. エラータイプに基づいてelmahの異なるLogPathを持つ方法
- 2. jQuery。outside outside tag
- 3. java outside maven project outside IDE
- 4. 閉じる閉じるHighslide on outside outside
- 5. ポップアップボックスoutside
- 6. ELMAH
- 7. Xcode console outside Xcode
- 8. JQuery .hover()functions outside
- 9. package.json usage outside npm
- 10. Jquery、$(this)outside function
- 11. $ expand outside IQueryable
- 12. UIAlertView outside app
- 13. Button outside UICollectionViewCell
- 14. facebook fbDidLogin outside appdelegate
- 15. RUN excel outside excel
- 16. Webpack wwwroot with CI
- 17. Rider EAP wwwroot hidden
- 18. Elmah errorfilter
- 19. ELMAH SMTP
- 20. スネークゲームの 'break' outsideループ
- 21. $ this outside foreach loop Jquery
- 22. Swiftプロパティnil outside unwindToViewController
- 23. Django upload_to outside of MEDIA_ROOT
- 24. <Provider /> outsideまたは<Router /> outside>?通常
- 25. ElmahはErrorFilterを無視します
- 26. マニュアルElmahロギング
- 27. ELMAH MS SQLログビューア
- 28. MVC質問Elmah
- 29. DbConnectionProvider for ELMAH
- 30. ELMAH for asp.net core
良いアイデアですが、サンプルコードに問題があります。 「Requires」はここでヌルチェックを行うカスタムクラスです。また、Dictionaryオブジェクトには構文の問題があります。 – user3885927