9

Using version 1.2.11. Logging works on my dev machine, but won't create the directory or log when deployed.

I tried:

  • giving full directory access to IUSR, Everyone, local users.
  • running the app pool as a local admin account.
  • to use internal debugging as Phil Haack describes here.

Stopped and started the app pool after each change.

Nothing is produced in the output file.

My log4Net config is below. Any thoughts on what to try next?

<?xml version="1.0"?>
<log4net debug="true">
  <appender name="file" type="log4net.Appender.RollingFileAppender">
    <file value="..\Logging\log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyyMMdd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1MB" />
    <threshold value="DEBUG" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
  <appender name="console" type="log4net.Appender.DebugAppender">
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="file" />
    <appender-ref ref="console" />
  </root>
</log4net>
4

5 回答 5

8

如果没有创建目录和文件,那么很可能在运行时没有读取(因此使用)配置。

我总是忘记为连接配置的 Log4net 添加单行代码。此代码通常出现在应用程序的引导类中(例如,用于 ASP.NET 应用程序的 Global.asax)。

XmlConfigurator.Configure(new System.IO.FileInfo(configFile));  // configFile being the path to the file.

您可以将此属性添加到AssemblyInfo.cs文件中,而不是上面的内联:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

无论哪种方式,这都会连接 log4net。更多信息可在log4net 文档的手动配置部分找到。

于 2013-06-17T08:21:04.253 回答
5

如果您使用的是 IIS,请确保正确的组具有对 Logs 文件夹(通常是 IIS_USERS)的修改访问权限。

于 2018-05-03T00:50:57.800 回答
3

对我来说听起来像是权限问题。我几乎总是使用不需要为应用程序启用任何特殊权限来写入日志文件的目录。

这是我通常与 log4net 一起使用的内容:

<file type="log4net.Util.PatternString" value="${ALLUSERSPROFILE}/<Company Name>/Logs/<Program Name>/<Log file name>.txt" />

当然,您需要将上面的公司名称、程序名称和日志文件名称替换为实际值。

这将写入通常不限制访问的 ProgramData 文件夹。您可以通过键入 %ProgramData% 或 %AllUsersProfile% 在文件资源管理器中导航到此文件夹

我喜欢这种方法的另一件事是它几乎适用于每个 Microsoft O/S。XP, 远景, 7, 8

于 2013-06-14T20:02:00.087 回答
2

你可能不知道你在哪里记录:

<file value="..\Logging\log.txt" />

Will 派生自您的运行目录,即 iis 目录。您可以更好地使用完整路径,例如:

<file value="c:\Logging\log.txt" />

然后,您可以授予对日志记录目录的正确访问权限。据我所知,Log4net 不会创建任何目录。所以你必须先创建 c:\logging 目录。

于 2013-06-14T20:25:23.677 回答
1

在我将这些行放入 web.config 应用程序设置之前,没有一个答案对我有用:

<add key="log4net.Config" value="Log.config" />
<add key="log4net.Config.Watch" value="True" />
于 2016-10-13T10:12:22.637 回答