Reputation: 1405
I have a ASP.Net MVC application running on IIS hosting environment, I wish to have a application wise log file to log some custom event and error.
What is the best practices to doing this ?
Should I open the file (say log.txt) when application start, write using StreamWriter whenever I need and close when application end
or Open -> Write -> Close every time ?
for 1st approach, I'm afraid that when the application domain exit unexpected the file will still keep open,
for 2nd approach, there may have IO error due to multi-thread operation or too freq open/close ?
Any ideas ?
Upvotes: 2
Views: 13300
Reputation: 997
Do not use your own home-grown logging.
Do use established frameworks (like log4net).
Do not cloud your app with logging internals (keep open/open every time, etc.)
Do have configurable logging
Do not tie your app to logging implementation
Do code to interface
Have a generic logger that you pass around and use in the app:
namespace YourApp.Framework.Logger
{
public interface ILogger
{
void Error(Exception ex);
void Info(object msg);
void Debug(string msg);
void Error(string msg, Exception ex);
}
}
Consumer:
public class TokenController : ApiController
{
private readonly ITokenRepository _repository;
private readonly ILogger _logger;
public TokenController(ITokenRepository repository, ILogger logger)
{
_repository = repository;
_logger = logger;
}
public HttpResponseMessage Token()
{
....
_logger.Info(string.Format("Customer {0} autenticated", customerId));
....
}
}
Base implementation of your ILogger on log4net's logger, for example:
public class Logger : ILogger
{
private static ILog _log = LogManager.GetLogger("ErrorLogger");
void ILogger.Info(object msg)
{
_log.Info(msg);
}
....
}
Configure log4net in config file:
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Log\Service.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
<logger name="ErrorLogger" additivity="False">
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</logger>
</log4net>
Upvotes: 11