为什么 log4net 在 .NET WCF 上一段时间后停止记录,但在普通网站上却没有?
Why does log4net stop logging after a while on .NET WCF but not a usual website?
我搜索了很多网站并尝试了几种不同的意见。但是我还是解决不了。以下是我现在所做的事情:
- 在 Global.asax 中
Application_Startup
我给出文件路径并启动 Log4Net。
- 在我启动 log4net 之后,我写了一条日志,上面写着“应用程序有
盯着'""
- 目前,WCF 应用程序在 IIS 中只有 1 个 worker
IIS 用户有权访问
WRITE
、MODIFY
和 READ
权限
问题:
- 当我直接调用服务方法时(没有执行 2.
下面的步骤),没有写入日志
- 在浏览器上,我编写 te WCF url 并按下 ENTER,Log4Net 创建
文件夹和文件(此时文件为空)。
- 如果我发出请求并调用方法(执行第一步),现在
Log4Net 写入日志。
实际问题:
- 在第 3 步之后,(假设我们没有调用任何
WCF 方法大约 10 分钟或更长时间),调用 DOES NOT CREATE
Log4Net 文本记录更多.
- 有时,如果我重复第二步,它就会开始写入日志
再次。但是没有连贯的结果。
这里是 Config.xml:
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="ProcessInfo_FileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="L:\LOGs\ProcessInfo\ProcessInfo_[%processid].txt" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="200" />
<maximumFileSize value="30MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] - %message%newline" />
</layout>
</appender>
<logger name="ProcessInfo">
<levelMin value="ERROR" />
<levelMax value="INFO" />
<appender-ref ref="ProcessInfo_FileAppender" />
</logger>
<root></root>
</log4net>
我还有其他 WCF 项目,即使有多个 Worker 也没有问题。 (我对它们使用了完全相同的 IIS 和 Log4Net xml 配置)。另外,正如我在标题中提到的,我有一个网站,它具有完全相同的日志记录代码(它们都使用我编写的通用第 3 方 dll)并且完全没有编写 Log4Net 文本日志记录的问题。
请帮忙
谢谢。
问题不在您的日志记录配置中,您应该尝试启用log4net 内部调试。这将告诉您日志记录停止的原因。我想有一些代码可以重新配置您的日志记录以从您的 web.config 加载配置,但不存在。
<configuration>
...
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
我搜索了很多网站并尝试了几种不同的意见。但是我还是解决不了。以下是我现在所做的事情:
- 在 Global.asax 中
Application_Startup
我给出文件路径并启动 Log4Net。 - 在我启动 log4net 之后,我写了一条日志,上面写着“应用程序有 盯着'""
- 目前,WCF 应用程序在 IIS 中只有 1 个 worker
IIS 用户有权访问
WRITE
、MODIFY
和READ
权限
问题:
- 当我直接调用服务方法时(没有执行 2. 下面的步骤),没有写入日志
- 在浏览器上,我编写 te WCF url 并按下 ENTER,Log4Net 创建 文件夹和文件(此时文件为空)。
- 如果我发出请求并调用方法(执行第一步),现在 Log4Net 写入日志。
实际问题:
- 在第 3 步之后,(假设我们没有调用任何 WCF 方法大约 10 分钟或更长时间),调用 DOES NOT CREATE Log4Net 文本记录更多.
- 有时,如果我重复第二步,它就会开始写入日志 再次。但是没有连贯的结果。
这里是 Config.xml:
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="ProcessInfo_FileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="L:\LOGs\ProcessInfo\ProcessInfo_[%processid].txt" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="200" />
<maximumFileSize value="30MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] - %message%newline" />
</layout>
</appender>
<logger name="ProcessInfo">
<levelMin value="ERROR" />
<levelMax value="INFO" />
<appender-ref ref="ProcessInfo_FileAppender" />
</logger>
<root></root>
</log4net>
我还有其他 WCF 项目,即使有多个 Worker 也没有问题。 (我对它们使用了完全相同的 IIS 和 Log4Net xml 配置)。另外,正如我在标题中提到的,我有一个网站,它具有完全相同的日志记录代码(它们都使用我编写的通用第 3 方 dll)并且完全没有编写 Log4Net 文本日志记录的问题。
请帮忙
谢谢。
问题不在您的日志记录配置中,您应该尝试启用log4net 内部调试。这将告诉您日志记录停止的原因。我想有一些代码可以重新配置您的日志记录以从您的 web.config 加载配置,但不存在。
<configuration>
...
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
</configuration>