我理解为什么log4net使用app.config文件来设置日志记录 - 这样您就可以轻松更改信息的记录方式,而无需重新编译代码.但在我的情况下,我不想app.config用我的可执行文件打包文件.我不想修改我的日志记录设置.
有没有办法让我设置登录代码而不是使用app.config?
这是我的简单配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\EventLog.txt" />
<appendToFile value="false" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1GB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
</appender>
<root>
<level value="Info" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="MemoryAppender" />
</root>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
编辑:
要完全清楚:我的目标是没有XML文件.甚至不是我变成流的嵌入式资源.我的目标是完全以编程方式定义记录器.只是好奇是否有可能,如果是这样,我可能会找到一个语法示例.
我试图找到比我聪明的人来验证我写的一些语法.我的想法是将RollingFileAppender的文件名配置为程序集的名称,以使其更适用于我的项目.
我已经看过这篇以前的SO文章,但它并不完全能够回答我的问题......
我有一段时间试图理解Log4net的内部组件,这就是我提出的(驻留在Global.asax文件中 - Application_Start方法):
// Bind to the root hierarchy of log4net
log4net.Repository.Hierarchy.Hierarchy root =
log4net.LogManager.GetRepository()
as log4net.Repository.Hierarchy.Hierarchy;
if (root != null)
{
// Bind to the RollingFileAppender
log4net.Appender.RollingFileAppender rfa =
(log4net.Appender.RollingFileAppender)root.Root.GetAppender("RollingLogFileAppender");
if (rfa != null)
{
// Set the file name based on the assembly name
string filePath =
string.Format("~/App_Data/{0}.log", GetType().Assembly.GetName().Name);
// Assign the value to the appender
rfa.File = Server.MapPath(filePath);
// Apply changes to the appender
rfa.ActivateOptions();
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我,"这很可怕",或者"这应该可以正常工作"?另外,如果我动态设置文件,我仍然可以期望log4net行为根据log4net.config文件设置旋转文件吗?
非常感激!
我正在编写一个工具,它将检查整个网络中工作站的运行状况,并根据发现的问题进行修复.我想创建一个日志文件,因为应用程序正在运行每台计算机上的任务/检查.我现在只想让它在一台机器上运行,但是它会一次扫描100多台机器(螺纹外出).
创建日志文件的最佳方法是什么?
我正在考虑使用a List<string>在内存中构建日志文件,然后在完成后将其输出到文件中.
我只是觉得可能有更好的方法吗?
我目前正在使用log4net构建一个ASP.Net-MVC应用程序进行日志记录,但是记录器似乎只是随机停止.它会愉快地记录一段时间,然后停止,然后在一段时间后再次启动.我甚至不确定是什么让它恢复记录.我不是在谈论丢失的一些消息 - 有时它会消失很长一段时间,比如一个小时左右.
为什么会这样停下来开始?我应该如何正确配置它,以便它不会随意停止?
这是我的配置:
<log4net debug="true">
<appender name="RollingLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<file value="..\Logs\\CurrentLog.txt" />
<appendToFile value="true" />
<datePattern value="yyyyMMdd" />
<rollingStyle value="Date" />
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true" />
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern
value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingLogFileAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)
注意:我读了这个问题和答案,它不适用于我想要的东西:Log4Net:以编程方式指定多个记录器(具有多个文件追加器)
我有一个WCF服务,这是一个"问答"式服务.它获得输入并发送输出.它根本不存在.
我需要在单独的文件中记录每个问答环节.
我有一个Appender(目前是RollingAppender).
有没有办法为每次调用我的WCF服务启动一个新的日志文件?
注意:我使用的是XML Layout,其想法是可以解析日志的输出并以图形方式显示(稍后的功能).有点像"查询计划".这是我在一个单独的文件中需要它们的另一个原因.
注意:如果需要其他原因,Log4Net XmlLayoutBase将不会删除xml页脚,直到应用程序关闭.这不是IIS中托管的WCF服务的计划事件.
我正在使用log4net来记录项目.
我想登录3个不同的文件:请求,响应和错误.
<log4net debug="true">
<!--To turn off an appender, simply set it's threshold value to "OFF"-->
<appender type="log4net.Appender.RollingFileAppender" name="RequestAppender">
<file value="requests.txt" />
<threshold value="INFO" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
<appender type="log4net.Appender.RollingFileAppender" name="ResponseAppender">
<file value="responses.txt" />
<threshold value="INFO" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,它登录到log4net,但也使用Nhibernate.我的应用程序同时配置NHibernate的(使用功能NHibernate配置)和log4net的(使用BasicConfigurator)编程.
问题是我的日志充满了Nhibernate日志信息,我不需要99.9%的时间而且应用程序因Nhibernate的完整日志记录而变慢.
如何配置Nihbernate不进行任何日志记录或log4Net以编程方式忽略所有Nhibernate记录器?我知道你可以使用xml配置文件来完成它,但这对我来说不是一个选择.
任何帮助将非常感激.