Исключение происходит в приложении ASP.Net MVC с Log4net на Shared Hosting - PullRequest
0 голосов
/ 14 сентября 2010

У меня есть веб-сайт, который был разработан с использованием ASP.Net MVC и использует Log4net для регистрации исключений.Сайт работал нормально, около 4 часов назад.Мы не вносили никаких изменений в веб-сайт за последние 2 недели.Сайт работает нормально с тех пор, как мы разместили его около 1 месяца назад.Веб-сайт размещен у нашего интернет-провайдера на учетной записи общего хостинга.

Это исключение, которое мы получаем:

[FormatException: String was not recognized as a valid Boolean.]
   log4net.Core.LoggerManager.RegisterAppDomainEvents() +0
   log4net.Core.LoggerManager..cctor() +33

[TypeInitializationException: The type initializer for 'log4net.Core.LoggerManager' threw an exception.]
   log4net.Core.LoggerManager.GetLogger(Assembly repositoryAssembly, String name) +0
   log4net.LogManager.GetLogger(Assembly repositoryAssembly, String name) +8
   log4net.LogManager.GetLogger(String name) +20
   i3t.LcaWeb.View.MvcApplication..cctor() in Global.asax.cs:17

[TypeInitializationException: The type initializer for 'i3t.LcaWeb.View.MvcApplication' threw an exception.]
   i3t.LcaWeb.View.MvcApplication..ctor() +0
   ASP.global_asax..ctor() in App_global.asax.fqjmwqjv.0.cs:0

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
   System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) +0
   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) +86
   System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) +230
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +67
   System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +1051
   System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +111
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +215
   System.Web.HttpApplicationFactory.FireApplicationOnStart(HttpContext context) +8878568
   System.Web.HttpApplicationFactory.EnsureAppStartCalled(HttpContext context) +136
   System.Web.HttpApplicationFactory.GetApplicationInstance(HttpContext context) +92
   System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +289

Исключение выдается в Global.asax, где экземпляриз log4net.ILog создается:

public class MvcApplication : System.Web.HttpApplication
{
    private static log4net.ILog log = log4net.LogManager.GetLogger("global.asax");

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Home.aspx",
            "",
            new { action = "Index", controller = "Home" }
        );

Проблема не возникает при тестировании - мы не можем ее воспроизвести.Я удалил все файлы на веб-сайте и заново загрузил их, на случай, если что-то могло быть повреждено, но это не решило проблему.

Я считаю, что что-то могло измениться наСторона провайдера, которая что-то сломала.

Есть какие-нибудь подсказки, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 06 июня 2014

У меня была похожая проблема. В моей ситуации оказалось, что я случайно заполнил логическое поле в Web.config как нечто, не являющееся логическим.

Например, у меня было это в моем Web.config:

<appender name="XYLogger" type="log4net.Appender.RollingFileAppender">
    <file value="App_Data\logging\xymaps.log" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <appendToFile value="some-file-name"/>
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="2" />
    <maximumFileSize value="2MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-tp %c %m%n" />
    </layout>
</appender>

Я ошибочно принял <appendToFile> как тег для указания имени файла, к которому должен добавляться регистратор. Вместо этого он должен был прочитать <appendToFile value="true" />. Поэтому, если кто-то еще сталкивается с этой проблемой, я бы посоветовал им дважды проверить свой Web.config на наличие логических полей с неправильными значениями.

0 голосов
/ 22 февраля 2011

LogManager.GetLogger () ожидает имя класса, в котором он будет использоваться для регистрации, а не Global.asax, который является именем файла. Пожалуйста, используйте только «Global» в качестве параметра LogManager.GetLogger ().

...