我使用log4net进行日志记录,我有两个appender一个文件和其他eventlog appender.我已在注册表编辑器中注册应用程序,问题是现在两个记录器都在事件查看器中编写.我需要fileAppender写入文件并eventLogAppender在事件查看器中显示.
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="file.log"/>
<appendToFile value="false"/>
<layout type="log4net.Layout.PatternLayout">
<header value="Logging Start 
"/>
<footer value="Logging End 
"/>
<conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<param name="ApplicationName" value="eventlog" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="LogFileAppender"/>
<appender-ref ref="EventLogAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
然后在代码中
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// private static readonly ILog log = LogManager.GetLogger("LogFileAppender");
private static readonly …Run Code Online (Sandbox Code Playgroud) 是否可以在应用程序运行时更改fileappender的日志文件名称?它将每天完成几次.
我将尝试更多地阐述自己:我的应用程序在设备上写入固件.用户已经处理过的所有设备都在网格中.用户可以启动新的写入向导,也可以在已启动的设备上恢复或重新启动操作.我想要做的是记录用户为某个设备执行的所有步骤.
例如:当用户在设备AB0124上工作时,我想写一个名为AB0124.log的日志文件.当他结束在该设备上工作并在设备XY5618上启动时,我想在XY5618.log中记录这些操作
我已经读过可以使用context-property(这里和这里以及很多其他帖子),但你必须在创建记录器之前设置属性.因此,我不是在类中创建一个记录器,而是在设置属性后在我的方法中创建一个.但到目前为止,没有任何记录.
当我在配置中设置硬编码的文件名时,它正在工作.我在这里错过了吗?
Log4Net.config:
<appender name="StepsLogAppender" type="log4net.Appender.FileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<file type="log4net.Util.PatternString" value="%property{LogPathModifier}" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd/MM/yyyy - HH:mm:ss} - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="StepsLogAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)
C#:
public void WriteStepInfo(string device, int step)
{
log4net.ThreadContext.Properties["LogPathModifier"] = string.Format("D:\\StepsDevice_{0}.txt", device);
var log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
log.Info(string.Format("Device {0} - step {1}.", device, step));
}
Run Code Online (Sandbox Code Playgroud)
在AssemblyInfo.cs中:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud) 我正在运行一些单元测试,我希望 log4net 将所有内容都记录到控制台(仅供检查)。按照手册,我使用了:
BasicConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)
但是,这会将日志记录模式设置为%-4timestamp [%thread] %-5level %logger %ndc - %message%newline。如何更改它,以便获得通常的日期和时间(最多毫秒)而不是时间戳?
我有一个运行 IIS 10 的 ASMX Web 服务,并使用以下配置将 log4net 添加到项目中:
<appender name="AsmxDebugLogFile" type="log4net.Appender.RollingFileAppender">
<file value="App_Data/ASMX.DEBUG_" type="log4net.Util.PatternString" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value="yyyy-MM-dd'.log'" />
<maximumFileSize value="5GB" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<logger name="AsmxDebugLogFile">
<level value="DEBUG" />
<appender-ref ref="AsmxDebugLogFile" />
</logger>
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,我每天都会收到两个日志文件,格式yyyy-MM-dd.log.yyyy-MM-dd.log如下图所示,似乎也是随机的,日志文件将切换到新创建的日志文件,然后再次开始记录日志文件中的 at 是在相关日期的午夜创建的。所有日志文件也远低于 5GB 最大文件大小。
以下是更新的日志文件列表
似乎最初,log4net 记录到文件 yyyy-MM-dd.log,然后在随机的时间后创建一个新的日志文件yyyy-MM-dd.log.yyyy-MM-dd.log开始写入该日志文件,然后返回并记录到yyyy-MM-dd.log开始时创建的日志文件当日。
这些是 IIS 回收设置
我每天需要 1 个格式为 ASMX.DEBUG_yyyy-MM-dd.log 的日志文件。我这个配置哪里出错了?
更新
看来是因为我们每 60 分钟回收一次应用程序池,具体取决于此时是否正在写入日志文件,取决于是否创建了新的日志文件。关于如何克服这个问题的任何建议。目前我已经在日志文件名中添加了 process_id …
我正在使用log4net并使用param name ="File"value ="C:\ Application.log"完全设置它.但是文件不是用C:创建的.我正在运行Windows 7,也许像权限这样的东西阻止了文件的创建.
这是app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" />
</configSections>`
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender“ type=“log4net.Appender.RollingFileAppender" >
<param name="File" value="C:\Users\Mohit\Documents\Application.log" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern“ value=“%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
</layout>
</appender>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我正在使用以下log4net配置.我正在尝试将性能日志写入单独的文件,但输出将转到这两个文件.即使我正在指定:
private static readonly log4net.ILog log = log4net.LogManager.GetLogger("PerformanceMetricsLogger");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如何阻止log4net写入默认的appender?
<log4net>
<!-- Define some output appenders -->
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="c:\ilap\IlapAdServerLog_%property{log4net:HostName}.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="-1" />
<maximumFileSize value="2000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppenderForPerformance" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="c:\ilap\IlapAdServerLog_%property{log4net:HostName}.peformance.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="-1" />
<maximumFileSize value="2000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger …Run Code Online (Sandbox Code Playgroud) 我有一个快速的log4net问题.如何从app.Config中指定要使用的appender?此特定配置文件引用2个不同的appender.两者都是滚动文件追加器,但它们指向不同的文件.在整个应用程序中,正在调用log4net并将类型传递给构造函数.像这样...
private static readonly ILog log = LogManager.GetLogger(typeof(Foo));
Run Code Online (Sandbox Code Playgroud)
log4net如何知道选择哪个appender?您可以将类型映射到特定的命名appender吗?我知道GetLogger有5个构造函数,你能传递一个类型和一个appender名称吗?我看到"repositoryName",不知道那是什么.如果有人能指出我正确的方向,我会非常感激.我想要一组特定的类型来专门记录到一个appender.
感谢任何提示,
〜在圣地亚哥
我使用以下类使用log4net打印出消息:
public class Message
{
public String Text { get; set; }
public int Id { get; set; }
public override string ToString()
{
return Text;
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Logger.Info(MessageInstance),因此log4net只是调用该ToString方法并打印出消息。我也想记录Id消息对象的属性,但是我不知道该如何实现。
我的转换模式与此类似:
<conversionPattern value="%date %-5level %message%newline" />
Run Code Online (Sandbox Code Playgroud)
我尝试添加,%message{Id}但这只会将整个消息打印两次。
有什么建议么?
我想设置日志文件的完整路径和文件名(我使用log4net),我想使用c:\ ProgramData\Logs文件夹.我使用环境变量#PROGRAMDATA#获取ProgramData文件夹的路径.
我想以下一种方式设置日志文件的路径:我在App.config中使用一个属性,并在我执行日志记录的类中设置此属性的值.
我的App.config文件:
<configuration>
...
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<!-- Pattern to output the caller's file name and line number -->
<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
</layout>
</appender>
<appender name="AppRollingFile" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%property{ProgramDataPath}\Logs\Application.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<maximumFileSize value="1000KB" />
<maxSizeRollBackups value="5" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%-5level][%d{yy-MM-dd HH:mm:ss,fff}] %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="Console" />
<appender-ref ref="AppRollingFile" />
</root>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
以及我设置属性的代码:
static void Main(string[] args)
{ …Run Code Online (Sandbox Code Playgroud) 我使用%property%来设置Log4Net配置文件中的输出文件路径.每次应用程序启动时,都会在APP数据文件夹中创建一个日志文件.我正在使用Composite滚动样式来滚动文件.
但现在我的要求是根据应用程序中的一些用户交互来滚动/更改文件路径.我怎样才能实现这一目标,任何人都可以建议我实现这一目标.
如果我的要求不明确,请告诉我.
谢谢.