views:

914

answers:

6

Hello

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

+1  A: 

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.

TheVillageIdiot
+1  A: 

You can write a custom layout by inherit from XmlLayoutBase.

Enyra
+4  A: 

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.

Joe
+1 This is the way to do it.
Manga Lee
+1  A: 

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:

Butu
A: 
<file type="log4net.Util.PatternString">
  <conversionPattern value="C:\Logs\log-%date{ yyyy.MM.dd.HH.mm.ss}-[%processid].log" />

from here

Valery Tydykov
A: 

Checkout the RollingPatternFileAppender, just like the rollingfileappender plus dynamic file name http://mysite.verizon.net/vze14bhji

zsu