Custom filename in a rolling Log4Net logfile?
Question
We have a ASP .Net application whereby we use Log4Net to log details within the app - nothing new there - and the rolling log filenames are in the usual format of:
rolling-log.txt
rolling-log.txt.1
rolling-log.txt.2 etc.
A each user of the application adds to the logfile, the logfile can be difficult to read for a specific user's case and so, we'd like to modify the config file somehow to record the user's log details individually, each writing to a specific file, e.g.
<applicationId>rolling-log.txt
<applicationId>rolling-log.txt.1
<applicationId>rolling-log.txt.2
etc.
where is each user's unique application Id, made up of a five digit number, e.g.
12345rolling-log.txt
Any ideas on the best way to implement this, assuming that it's possible?
Cheers
Brett
Solution
look for log4net Context Properties...
in your code :
log4net.GlobalContext.Properties["id"] = "12345";
then
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo("configPath"));
in the log4net config file:
<file type="log4net.Util.PatternString"
value="%property{id}rolling-log.txt" />
OTHER TIPS
<file type="log4net.Util.PatternString">
<conversionPattern value="C:\Logs\log-%date{ yyyy.MM.dd.HH.mm.ss}-[%processid].log" />
</file>
I believe the Log4Net configuration file supports environment variables (e.g. USERNAME) as well as customizable patterns which should give you what you want.
Look at "PatternString for pattern based configuration" in the Log4Net V1.2.10 release notes.
I don't think that log file per user is possible but you can write custom layer between log4net and your application which prepends user id before writing to log.
You can write a custom layout by inherit from XmlLayoutBase.
Checkout the RollingPatternFileAppender, just like the rollingfileappender plus dynamic file name http://mysite.verizon.net/vze14bhji