How do I keep a log file per day in log4net? [duplicate] - c#

This question already has answers here:
Having a log per day
(3 answers)
Closed 5 years ago.
I've inherited an application that I need to keep more than a single days of logs.
It is using log4net for it's logging, and I have the log4net.config file contents below:
<?xml version="1.0"?>
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\connector.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
The file in the log directory never has a date in it and is always called connector.log.
It's created date is from a long time ago, so I think it is simply emptying the file when it ticks over to a new day (and the timestamp of logs in that file prove that).
How would I change this so that it keeps a log file per day.

<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="App_Data/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value=""Logs_"yyyyMMdd".htm"" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="<HR COLOR=red>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" />
<!--<conversionPattern value="%newline %n记录时间:%date %newline %n 线程ID:[%thread] %n日志级别: %-5level %n跟踪描述:%message%newline %n"/>-->
</layout>
</appender>
needn't define log file's name

Related

Two log4net configuration files on same solution

I have an solution which consist of multiple projects.its a desktop application I need to have two separate log4net configurations for those projects since one project contains a library that uses log4net itself. On one project log4net configured in App.config and other project it is configured in log4net.configuration file.
below is one configuration file
'''
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<root>
<level value="DEBUG"/>
<appender-ref ref="SmtpAppender"/>
<appender-ref ref="LogFileAppender"/>
<appender-ref ref="ColoredConsoleAppender"/>
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="D:\seperatelog.txt"/>
<param name="AppendToFile" value="true"/>
<rollingStyle value="Date" />
<datePattern value="'On_'yyyy-MM-dd'.log'" />
<appendToFile value="true" />
<maxSizeRollBackups value="14" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
</layout>
</appender>
<appender name="ColoredConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
</layout>
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="bobby.chopra#prcm.com"/>
<from value="TagFileUploader#prcm.com"/>
<subject value="TagFileUploader ERROR"/>
<smtpHost value="prc-mn-ex01"/>
<bufferSize value="512"/>
<lossy value="true"/>
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
</layout>
</appender>
<appender name="cargillsJournal" type="log4net.Appender.FileAppender">
<param name="File" value="D:\BankInABoxffffff-log.txt"/>
<param name="AppendToFile" value="true"/>
<rollingStyle value="Date" />
<datePattern value="'On_'yyyy-MM-dd'.log'" />
<appendToFile value="true" />
<maxSizeRollBackups value="14" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
</layout>
</appender>
</log4net>
Other configuration file is below
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="console" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="rolling-log.txt" />
<appendToFile value="true" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100" />
<rollingStyle value="Size" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<header value="[Header]
" />
<footer value="[Footer]
" />
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<logger name="LoggingExample">
<!-- <appender-ref ref="B" /> -->
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</logger>
</log4net>
those two log file load correctly but they all write on to the same log file seperatelog.txt
What i need is to have two separate files to create for those 2 configurations.
Seems you'll better define log4net configuration not in app.config but in dedicated XML files. Names of XML files can be composed according to some convention so your projects will know what log4net configuration XML is dedicated to each one.
You'll able to configure your log4net with XmlConfigurator.Configure(...) function

Log4net have a FileAppender with date pattern

I am trying to do something that I thought was simple.
To have a FileAppender in log4net with a date in the filename.
Before you rush to answer this, I need to make clear that I don't need a RollingFileAppender, because I know it's possible with that one.
I want to produce 1 log file every time I run my console app. So I don't need a rolling file appender, just 1 file each time, with a timestamp on it.
This is where it gets tricky because this configuration:
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="MyFileAppender" />
</root>
<appender name="MyFileAppender" type="log4net.Appender.FileAppender">
<file value="logs\" />
<datePattern value="dd.MM.yyyy'.log'" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
Gives this error:
log4net:ERROR XmlHierarchyConfigurator: Cannot find Property [datePattern] to se
t object on [log4net.Appender.FileAppender]
It works if I don't have a pattern and just have a static file that keeps getting overriden each time the app.
So is this not possible with a file appender?
I am using version 1.2.15.0.
that did it:
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="logs\App-%date{yyyy-MM-dd_HH-mm-ss}.log" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%2thread] %-5level - %message%newline" />
</layout>
</appender>

Log4net: append TimeStamp in the name of a created file

below is the code of my logger config file. When a new txt file is created in my LogFolder, my goal is to append the current timestamp in the name of the file.
For example, on July 20th 2015 at 10:27:19am, the file name should be named "logger_2015-07-20_10-27-19.txt"
With the code that I provided, a logger file do get created, but its name is "logger-.txt". The timestamp failed to show up.
Do I need to provide a reference for "${byTimeStamp(local)}? If so, how would I be able to do that?
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<timestamp key="byTimeStamp" datePattern="yyyy-MM-dd_HH-mm-ss" timeReference="contextBirth"/>
//Here is where I set the name of the logger txt.
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\LogFolder\logger_${byTimeStamp(local)}.txt" />
<param name="AppendToFile" value="true"/>
<param name="RollingStyle" value="Once"/>
<param name="DatePattern" value="yyyy-MM-dd'.txt'" />
<preserveLogFileNameExtension value="true"/>
<maxSizeRollBackups value="20" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
</configuration>
Another way to accomplish this:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString">
<conversionPattern value="log (%date{yyyy.MM.dd - HH-mm-ss}).log" />
</file>
[...]
</appender>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="c:\\ProjectX\\Log\\logger_.txt"/>
<param name="AppendToFile" value="true"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<param name="RollingStyle" value="Date"/>
<param name="DatePattern" value="yyyy.MM.dd"/>
<param name="StaticLogFileName" value="true"/>
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline"/>
</layout>
</appender>
As per Nuno G on Append current Date to Log file with Log4Net
Requires a bit of code, and the secret is to call the configuration after updating the property so it gets picked up.
The config...
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\logfolder\logger-%property{ts}.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1024KB" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %.30logger - %message%newline" />
</layout>
</appender>
Then in the code...
var ts = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
GlobalContext.Properties["ts"] = ts;
log4net.Config.XmlConfigurator.Configure();
As mentioned above, every time you change the timestamp, you need to call the Configure() method so it gets picked up in the log name. This could be a bit ugly depending on how your logging code is written.

log4net creates new log every minute

log4net in my project creates new log file every minute. I would like to have just one file per instance of my application, but every instance that runs should create new log file.
This is from my app.config file:
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="C:\\Logs\\log2_"/>
<rollingStyle value="Date"/>
<datePattern value="MMdd_HHmmss.\tx\t"/>
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<maximumFileSize value="500MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %message%newline"/>
</layout>
</appender>
What is the error here?
Your rolling style is set to Date meaning it will rotate on a time based interval. The datePattern element appears to be misused but it set to roll every minute (the ./tx/t) seem extraneous.
From the documentation the following is the example for once per app instance (with a 50G hard limit):
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logfile.txt" />
<appendToFile value="false" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="-1" />
<maximumFileSize value="50GB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
See here for the documentation
exclude dateTime minutes from file layout

current date in app.config

Im trying to create a log file using log4net.
I have it create a log file. But i can't get the name of the log file to be the current date.
I have tried this:
<file value="log\\$date.txt"/>
But this just leans me with a file called "$date.txt" in the log folder.
I would like the file to be named "25-04-2012.txt"
Anyone know the little trick to make this work?
From the documentation, you should use a RollingFileAppender
This example show how to configure the RollingFileAppender to roll log
files on a date period. This example will roll the log file every
minute! To change the rolling period adjust the DatePattern value. For
example, a date pattern of "yyyyMMdd" will roll every day. See
System.Globalization.DateTimeFormatInfo for a list of available
patterns.
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logfile" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HHmm" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
Documentation (search for rollingFileappender)
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="C:\Akhila\logger\logger\bin\Debug\log-" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
</layout>
</appender>

Categories