log4net под sharepoint, не хватает магии - PullRequest
1 голос
/ 19 января 2012

Я провел все утро, разбираясь с целым набором возможностей того, почему log4net не записывает в файл при установке под SharePoint 2010.

Я пробовал отдельный маршрут файла log4net, но в настоящее время пробую его, настроив его в файле web.config.

Я обновил доверие к среде в web.config, и dll log4net также находится в GAC. Когда я устанавливаю точку останова, мой регистратор выглядит хорошо со всеми включенными журналами, однако .Info () проходит без ошибок, но файл журнала не создается.

К счастью, я предоставил всем и пользователю пула приложений asp.net полный контроль над корневой папкой журнала. Вот фрагмент конфигурации и код App_Start:

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
    ...

    <log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="c:\temp\log.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>
  </log4net>




    private static ILog logger; 

    protected void Application_Start(object sender, EventArgs e)
    {
      ////This tells log4net where to go and look for its configuration file and also to watch it for any changes
      //log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(@"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Config\Moogle\Log4Net.config"));

      SPSecurity.RunWithElevatedPrivileges(delegate
        {
          log4net.Config.XmlConfigurator.Configure();

          logger = LogManager.GetLogger("Moogle.Web");
          logger.Info("Application_Start Fired");
        });
    }

Редактировать После обновления моей конфигурации выше (см. Мой ответ), я все еще получаю сообщение log4net:

log4net: XmlHierarchyConfigurator: Hierarchy Threshold []
log4net: Logger: No appenders could be found for logger [Moogle.Web] repository [log4net-default-repository]
log4net: Logger: Please initialize the log4net system properly.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 20 января 2012

Сделав некоторое копание, я обнаружил полезную функцию log4net, чтобы попросить ее выполнить собственную диагностику.

Вы добавили следующие настройки приложения:

<add key="log4net.Internal.Debug" value="true"/>

иследующий раздел:

<configuration>
    ...

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

    ...
</configuration>

Теперь я могу видеть, что это, по-видимому, неправильная конфигурация, так как она сообщает:

log4net: XmlConfigurator: configuring repository [log4net-default-repository] using .config file section
log4net: XmlConfigurator: Application config file is [C:\inetpub\wwwroot\wss\VirtualDirectories\MOOGLEDEV0180\web.config]
log4net: XmlConfigurator: Configuring Repository [log4net-default-repository]
log4net: XmlHierarchyConfigurator: Configuration update mode [Merge].
log4net: XmlHierarchyConfigurator: Logger [root] Level string is [ALL].
log4net: XmlHierarchyConfigurator: Logger [root] level set to [name="ALL",value=-2147483648].
log4net: XmlHierarchyConfigurator: Hierarchy Threshold []
log4net: Logger: No appenders could be found for logger [Moogle.Web] repository [log4net-default-repository]
log4net: Logger: Please initialize the log4net system properly.

И все время я думал, что это былоразрешения ... так что с этим конфигом?

Редактировать - рабочий конфиг

Вот автономный log4net.config, который работает (осторожно, когда вы вырезаете и вставляетес!)

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"/>
  </configSections>
  <log4net>
    <appender name="RollToFile" type="log4net.Appender.RollingFileAppender">
      <file value="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Logs\Moogle\Moogle.Web.Log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="5MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <!-- Value of priority may be ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->
      <priority value="ALL"/>
      <appender-ref ref="RollToFile"/>
    </root>
  </log4net>
</configuration>
1 голос
/ 20 января 2012

Я знаю, что log4net великолепен и намного быстрее, но в контексте SP2010, я настоятельно рекомендую записывать пользовательские сообщения об ошибках в ULS (теперь опция DB также есть в SP2010).

Хороший образец http://sharepointnadeem.blogspot.com/search/label/SharePoint%20Diagnostic%20Service

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...