我有一个 Windows C# 应用程序,它使用 log4net 进行日志记录。这是记录器的配置方式:
<log4net>
<appender name="DebugFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Local\logs\ApplnTrace.log" />
<threshold value="INFO" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%5p] - (%file:%line) %m%n" />
</layout>
</appender>
<appender name="MSGFileAppender" type="log4net.Appender.RollingFileAppender">
<file value=".\local\logs\MsgTrace.log" />
<threshold value="INFO" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %n%m%n" />
</layout>
</appender>
<logger name="ApplnLogger">
<appender-ref ref="DebugFileAppender" />
</logger>
<logger name="MsgLogger">
<appender-ref ref="MSGFileAppender" />
</logger>
</log4net>
Run Code Online (Sandbox Code Playgroud)
文件有时根据日期滚动,有时不滚动,当文件不滚动时,日志记录也会停止。有人能帮我找出原因吗?
我必须使用log4net在我的项目中仅禁用跟踪级别.我用谷歌搜索它,但它没有帮助我.所以任何人都可以帮我解决如何关闭跟踪级别以及所有特定级别关闭log4net中的日志记录?
这是我用过的appender app.config,它会生成像20120501.log.1我预期的文件20120501.1.log.
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="logs\" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMddt'.log.'" />
<countDirection value="1" />
<maxSizeRollBackups value="100" />
<maximumFileSize value="1000kb" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud) 我在log4net中创建自定义过滤器.我发现我可以将配置中的元素映射到过滤器类中的属性,如下所示:
<filter type="ConsoleApplication1.CustomFilter">
<FooKey value="FooValue"/>
</filter>
public class CustomFilter : FilterSkeleton
{
public string FooKey { get; set; }
public override FilterDecision Decide(LoggingEvent loggingEvent)
{
return FilterDecision.Accept;
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是设置这样的项目列表:
<filter type="ConsoleApplication1.CustomFilter">
<FooKey value="FooValue"/>
<FooKey value="BarValue"/>
</filter>
public class CustomFilter : FilterSkeleton
{
public string[] FooKeys { get; set; }
public override FilterDecision Decide(LoggingEvent loggingEvent)
{
return FilterDecision.Accept;
}
}
Run Code Online (Sandbox Code Playgroud)
如果可以的话,我该怎么做?
在动态设置日志文件名时,RollingFileAppender与log4net.Appender.FileAppender+MinimalLock锁定模型一起使用似乎不会将任何内容记录到文件中.但是,在没有此锁定模型的情况下使用appender时,日志记录有效.
在下面的配置文件中,Appender1有效,但Appender2不是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<appender name="Appender2"
type="log4net.Appender.RollingFileAppender" >
<file type="log4net.Util.PatternString" value="%property{LogName}" />
<encoding value="utf-8" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%logger] %message%n" />
</layout>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
<appender name="Appender1"
type="log4net.Appender.RollingFileAppender" >
<file type="log4net.Util.PatternString" value="%property{LogName}" />
<encoding value="utf-8" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10000KB" /> …Run Code Online (Sandbox Code Playgroud) 我需要在新的.NET Core应用程序上使用log4net,该应用程序引用一些刚刚使用log4net编写的程序集。我进行了搜索,但是所有示例都将传递FileInfo给,log4net.Config.XmlConfigurator.Configure 但是使用最新版本要求输入第一个类型的参数ILoggerRepository repository
我应该通过什么?
我的代码是
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var configuration = builder.Build();
ContainerConfig.RegisterDependencies(configuration);
MappingConfig.RegisterMapping();
var fileInfo = new FileInfo(@"\config.log4net");
log4net.Config.XmlConfigurator.Configure(null, fileInfo);
var core = ContainerWrapper.Container.GetInstance<ICore>();
core.StartAsync().Wait();
Console.Write("Press a key to exit");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
但是null崩溃了
有什么建议么?
我在日志输出中使用以下web.config条目获取重复行:
<root>
<priority value="Off"/>
<appender-ref ref="FileAppender"/>
</root>
<logger name="SessionMgr">
<priority value="ALL" />
<appender-ref ref="FileAppender" />
</logger>
Run Code Online (Sandbox Code Playgroud)
如果我拿出元素,我什么也得不到,正如我所料.但是,添加元素会导致重复行.
我不明白的是什么?
log4net中的有损日志记录非常适合获取事件的详细信息,从而导致错误,并且性能损失最小.然而,在错误之后记录一些消息以验证系统是否按计划处理它通常会很有趣.怎么做到呢?
我正在尝试使用common.logging将记录添加到使用Quartz.net构建的Windows Web服务,以使用log4net写入日志文件.
我的App.config看起来像这样:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<quartz>
<add key="quartz.scheduler.instanceName" value="CommerceScheduler" />
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="10" />
<add key="quartz.threadPool.threadPriority" value="Normal" />
</quartz>
<appSettings>
<add key="configpath" value="C:\Projects\SiteScheduler\SiteScheduler\Schedule.xml"/>
</appSettings>
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net">
<arg key="configType" value="INLINE" />
</factoryAdapter>
</logging>
</common>
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="log.txt" />
<param …Run Code Online (Sandbox Code Playgroud) 我正在设置一个dll,用作另一个应用程序的第三方dll.我希望这个dll拥有它自己的日志记录,因此外部应用程序不必处理任何设置(我不相信它们使用与我们相同的日志记录).我读过这可能不是最好的解决方案,但这是我给予的任务.我们想用log4net.我在这里看了几个其他的问题,他们提到它可以通过代码进行配置,但是,我遇到的主要问题是我们的代码中没有明确的切入点来配置log4net.我很好奇我是否应该放弃让dll配置自己并且有一个方法由辅助应用程序调用来配置dll的日志记录,或者是否有更好的方法来解决这个问题.任何输入都将非常感激