Customize log4net Output Path

The default log4net output path is relative to the startup directory of your executable. To customize the output path, you can override the base Appender’s File property in your own Appender class. The following example describes how to route the log files relative to the temp folder : public class MyOwnAppender : log4net.Appender.RollingFileAppender { public override string File { get { return base.File; } set { if (Path.IsPathRooted(value)) { base.File = value; } else { base.File = Path.Combine(Path.GetTempPath(), value); } } } } Your log4net config file must be modified so that log4net can locate and use your custom Appender. If MyOwnAppender is in MyNamespace and you have implemented it in MyLoggerLib.dll : ...

March 7, 2008 · 1 min · tewari

Career Advice

The value of any advice is tied to the degree of its relevance to your particular situation and circumstances. Very specific advice, like legal and medical advice, is very expensive. It is very relevant to the individual’s situation and therefore quite valuable. The degree of relevance of inexpensive/free advice to your specific circumstances is usually very low. Inexpensive/free advice, as in sayings and quotes, but also in everyday personal and business communication, is very generic. The same message is usually perceived differently by different people. Especially when the entire message is very succinct and pithy. Various aspects of the message are accentuated differently as it is filtered through individual perception. ...

March 1, 2008 · 2 min · tewari

Database Schema Version Control Tool

It is essential to treat database schema as source code and apply all the norms and best practices applicable to it. From what I hear and read, database schema version control is non-existent in too many projects. Various techniques to accomplish version control of database schemas have been discussed and published. Martin Fowler and Pramod Sadagale has written a comprehensive article on Evolutionary Database Design. It is a must-read for everyone involved with database development. ...

February 19, 2008 · 1 min · tewari

Printing Blog Posts

I like printing blog posts and reading them later, but too many blogs don’t provide functionality to print well formatted posts. I end up printing sidebars, advertisements and other clutter along with the post, thanks to lousy print formatting in browsers. What a waste ! It is actually quite easy to add a “Print This Post” button to a WordPress blog. One great option (the one I use on this blog) is WP-Print. Make sure you read Installation and Usage instructions. Brilliant job ! ...

January 25, 2008 · 1 min · tewari

OpenSimSim 1.0-RC is out

OpenSimSim : Your Password Solution. Download 1.0 Release Candidate here : OpenSimSim 1.0-RC

December 24, 2007 · 1 min · tewari

Leveraging XPATH Axes

XPATH axes come in very handy when nodes need to be selected based on (attribute’s or child element’s) values that must match those of other nodes elsewhere in the xml tree. Consider the following log4net configuration file : <?xml version="1.0"?> <configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" /> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" /> <add key="hibernate.connection.connection_string" value="Server=servername; Database=dbname; User=username; Password=secret;" /> <add key="hibernate.connection.isolation" value="ReadCommitted" /> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" /> </nhibernate> <log4net> <appender name="NHibernateFileLog" type="log4net.Appender.RollingFileAppender"> <file value="Logs/nhibernate.txt" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="100KB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n" /> </layout> </appender> <appender name="GeneralLog" type="log4net.Appender.RollingFileAppender"> <file value="Logs/general.txt" /> <appendToFile value="true" /> <maximumFileSize value="100KB" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="5" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n" /> </layout> </appender> <appender name="DataLog" type="log4net.Appender.RollingFileAppender"> <file value="Logs/data.txt" /> <appendToFile value="true" /> <maximumFileSize value="100KB" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="5" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n" /> </layout> </appender> <!-- levels: DEBUG, INFO, WARN, ERROR, FATAL --> <root> <level value="DEBUG"/> <appender-ref ref="GeneralLog" /> </root> <logger name="NHibernate" additivity="false"> <level value="DEBUG"/> <appender-ref ref="NHibernateFileLog"/> </logger> <logger name="Pushable.Data" additivity="false"> <level value="DEBUG"/> <appender-ref ref="DataLog"/> </logger> </log4net> </configuration> The s are referenced by s using ‘ref’ attribute of their ‘appender-ref’ child elements, using the same value as the ’name’ attribute of the . This type of linking is quite common in xml documents. Now, The first question is : How to list files that are referenced by s ? In order to solve this problem you will need to reach the s that are referenced by each and then extract the ‘value’ of their s. ...

December 21, 2007 · 3 min · tewari