Thursday, October 01, 2009

Log4Net - Different Log Files, Different Log Levels.

Just writing to help other developer like me,

Problem: I wanted to log different LOG Levels in different files using LOG4Net.

my app.config was like this.



log4net
appender name="LogFileAppender" type="log4net.Appender.FileAppender"
param name="File" value="..\..\Logs\ApplicationLog.log"
param name="AppendToFile" value="false"
layout type="log4net.Layout.PatternLayout"
param name="Header" value=""
param name="Footer" value=""
param name="ConversionPattern" value="%d [%t] %-5p %m%n"
layout
appender

appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"
layout type="log4net.Layout.PatternLayout"
param name="Header" value="[Header]\r\n"
param name="Footer" value="[Footer]\r\n"
param name="ConversionPattern" value="%d [%t] %-5p %m%n"
layout
appender
root
level value="ALL"
appender-ref ref="ConsoleAppender"
appender-ref ref="LogFileAppender"
root

log4net
--
-------------------------------------------------------------------------------------
I added different Appenders for file saving and Logger tag to define my new loggers
(Check TEXT in Green)
-------------------------------------------------------------------------------------
!--

log4net
appender name="LogFileAppender" type="log4net.Appender.FileAppender"
param name="File" value="..\..\Logs\ApplicationLog.log"
param name="AppendToFile" value="false"
layout type="log4net.Layout.PatternLayout"
param name="Header" value=""
param name="Footer" value=""
param name="ConversionPattern" value="%d [%t] %-5p %m%n"
layout
appender

appender name="InputLogFileAppender" type="log4net.Appender.FileAppender"
param name="File" value="..\..\Logs\InputData.log"
param name="AppendToFile" value="false"
layout type="log4net.Layout.PatternLayout"
param name="Header" value=""
param name="Footer" value=""
param name="ConversionPattern" value="%m%n"
layout
appender

appender name="OutputLogFileAppender" type="log4net.Appender.FileAppender"
param name="File" value="..\..\Logs\OutputData.log"
param name="AppendToFile" value="false"
layout type="log4net.Layout.PatternLayout"
param name="Header" value=""
param name="Footer" value=""
param name="ConversionPattern" value="%m%n"
layout
appender

appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"
layout type="log4net.Layout.PatternLayout"
param name="Header" value="[Header]\r\n"
param name="Footer" value="[Footer]\r\n"
param name="ConversionPattern" value="%d [%t] %-5p %m%n"
layout
appender
root
level value="ALL"
appender-ref ref="ConsoleAppender"
root

logger name="LogFileAppender"
level value="DEBUG"
appender-ref ref="LogFileAppender"
logger
logger name="ErrorFileAppender"
level value="ERROR"
appender-ref ref="LogFileAppender"


logger
logger name="InputLogger"
level value="INFO"
appender-ref ref="InputLogFileAppender"

logger
logger name="OutputLogger"
level value="INFO"
appender-ref ref="OutputLogFileAppender"

logger
log4net

--

---------------------------------------------------------------------------------------------
My LOG4Net Level ENUM was look like this before;
---------------------------------------------------------------------------------------------

public enum ELogLevel
{

DEBUG = 1,

ERROR,

FATAL,

INFO,

WARN,
}
---------------------------------------------------------------------------------------------
I added my new LOG4Net Levels (Check Text in green )
---------------------------------------------------------------------------------------------

public enum ELogLevel
{

DEBUG = 1,

ERROR,

FATAL,

INFO,

WARN,

INPUT,

OUTPUT

}

---------------------------------------------------------------------------------------------
My LOG4Net Class was look like this before;
---------------------------------------------------------------------------------------------

public static class CLogger
{

#region Members

private static readonly ILog logger = LogManager.GetLogger(typeof(CLogger));


#endregion



#region Constructors

static CLogger()
{

XmlConfigurator.Configure();
}

#endregion



#region Methods



public static void WriteLog(ELogLevel logLevel, String log)
{

if (logLevel.Equals(ELogLevel.DEBUG))
{

logger.Debug(log);

}

else if (logLevel.Equals(ELogLevel.ERROR))
{

logger.Error(log);

}

else if (logLevel.Equals(ELogLevel.FATAL))
{

logger.Fatal(log);

}

else if (logLevel.Equals(ELogLevel.DEBUG))
{

logger.Info(log);

}

else if (logLevel.Equals(ELogLevel.WARN))
{

logger.Warn(log);

}

else if (logLevel.Equals(ELogLevel.INFO ))
{

logger.Info (log);

}
}


-----------------------------------------------------------------------------------------------
I wrote code for my new LOGGER in config (check text in green)
-----------------------------------------------------------------------------------------------





public static class CLogger
{

#region Members

private static readonly ILog logger = LogManager.GetLogger("LogFileAppender");
private static readonly ILog errorlogger = LogManager.GetLogger("ErrorFileAppender");
private static readonly ILog inputDataLog = LogManager.GetLogger("InputLogger");
private static readonly ILog outputDataLog = LogManager.GetLogger("OutputLogger");



#endregion



#region Constructors

static CLogger()
{

XmlConfigurator.Configure();
}

#endregion



#region Methods



public static void WriteLog(ELogLevel logLevel, String log)
{

if (logLevel.Equals(ELogLevel.DEBUG))
{

logger.Debug(log);

}

else if (logLevel.Equals(ELogLevel.ERROR))
{

errorlogger.Error(log);

}

else if (logLevel.Equals(ELogLevel.FATAL))
{

logger.Fatal(log);

}

else if (logLevel.Equals(ELogLevel.DEBUG))
{

logger.Info(log);

}

else if (logLevel.Equals(ELogLevel.WARN))
{

logger.Warn(log);

}

else if (logLevel.Equals(ELogLevel.INFO ))
{

logger.Info (log);

}
else if (logLevel.Equals(ELogLevel.INPUT ))
{

inputDataLog.Info(log);

}

else if (logLevel.Equals(ELogLevel.OUTPUT ))
{

outputDataLog.Info(log);

}


}



After all this, now i can save my Input and Out level messages to different files and Debug and Error in one file.


Thanks


Tuesday, September 22, 2009

TAP VPN Adapter Driver INstallation Problem.

After searching for more than two hours I found the solution for the problem of TAP VPN driver installation in my PC, might be alot of people facing the same problem.


ISSUE:
Device Manager showing, TAP VPN ADAPTER but conflicted.
OPEN VPN Service: can not be started because, it is dependent on other services too.
Environment: WINXP SP3

Following solution I found on one website but it was not related to OPENVPN Installation or TAP VPN installation: I tried and it worked




Go to Start » Run and enter "regedit."

Go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

With CurrentVersion Highlighted, go to the Edit menu and select New » Key

Name the key RunOnce, leaving everything else about the key alone.

The RunOnce key should now exist underneath the CurrentVersion key.
Once the key exists, Windows 2000/XP stops redetecting the Hardware