2017-09-14 63 views
2

我正在使用VS 2013和Log4Net为.Net应用程序记录数据。我可以创建日志。但是,当我尝试删除或移动日志文件,它说即使浏览器网站已关闭,Log4net文件也会被锁定

The file is open in another process... 

这个消息我得到即使在浏览器关闭。我只能编辑/剪切/重命名..当我关闭Visual Studio IDE工具的日志文件。我怎么解决这个问题。我希望能够随时删除/编辑文件。 下面是在web.config中

<configSections> 
<section name="log4net" 
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
</configSections> 

<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="c:\logs\jwhXMLDev.log" /> 
    <appendToFile value="true" /> 
    <!-- <layout type="log4net.Layout.XmlLayout"/>--> 
    <layout type="log4net.Layout.XmlLayout" /> 
    </appender> 
    <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender"> 
    <onlyFixPartialEventData value="true" /> 
    </appender> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="RollingFile" /> 
</root> 
</log4net> 

回答

4

使用关于你提到的关于关闭浏览器

这不是打开的浏览器评论为log4net的代码/锁/操纵文件,但Web服务器。

浏览器向Web服务器发送请求,该请求回复响应,但与此同时,这些请求/响应交换之外的两个之间没有链接。如果在收到响应后关闭浏览器,则服务器不知道它。它只是等待浏览器提出更多可能的请求,它不知道它已经关闭。

您的Web服务器可能是IIS Express或本地IIS。这是这个Web服务器,它是锁定文件的进程。

如何释放文件现在

如果您使用的是IIS Express中,它开始/当你开始在Visual Studio中的应用程序关闭。当你停止调试时,它应该释放文件。

如果您使用的是本地或远程IIS,并且无法释放文件,那么回收应用程序池或重新启动IIS将会有所裨益。

防止这种情况的发生

log4net的保持锁定的文件,但你可以改变它的行为通过添加以下行到你的<appender元素:与再次

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

这里是你的配置添加的行:

<configSections> 
<section name="log4net" 
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
</configSections> 

<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="c:\logs\jwhXMLDev.log" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <!-- <layout type="log4net.Layout.XmlLayout"/>--> 
    <layout type="log4net.Layout.XmlLayout" /> 
    </appender> 
    <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender"> 
    <onlyFixPartialEventData value="true" /> 
    </appender> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="RollingFile" /> 
</root> 
</log4net> 
+0

是这样吗?对生产部署表示赞赏。它不会有副作用? – SunilA

+0

@SunilA根据文档:https://logging.apache.org/log4net/release/faq.html#single-file,它对性能有负面影响,所以这是您可能要考虑的生产环境。所以它基本上是在较少锁定文件或为日志记录引擎提供更好性能之间进行权衡。 – Gilles