mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
個人BLOG
it developer
  1. Main page
  2. DotNET
  3. Main content

Create a log4net logger in code

2016-07-01 117hotness 0likes 0comments

I found myself requiring to instantiate a log4net logger in code (not through the xml configuration).
However, there are a few things that I haven’t worked around yet, here’s the code I came up with.

var hierarchy = (Hierarchy)LogManager.GetRepository();
var logger = hierarchy.LoggerFactory.CreateLogger((ILoggerRepository)hierarchy, "logname");
logger.Hierarchy = hierarchy;
 
logger.AddAppender(CreateFileAppender());
logger.AddAppender(CreateDbAppender());
 
logger.Repository.Configured = true;
 
// alternative use the LevelMap to set the Log level based on a string
// hierarchy.LevelMap["ERROR"]
hierarchy.Threshold = Level.Debug;
logger.Level = Level.Debug;
 
ILog log = new LogImpl(logger);
 
log.Error(“This is my error message”);

Note that setting the level needs to be both on the hierarchy and the logger. This is based on the log4net hierarchy implementation.

Creating the Appenders is quite simple.

private IAppender CreateFileAppender()
{
    var fileAppender = new RollingFileAppender
    {
        Name = "myFileAppenderName",
        File = "logfile.log",
        LockingModel = new FileAppender.MinimalLock(),
        AppendToFile = true,
        RollingStyle = RollingFileAppender.RollingMode.Size,
        MaxSizeRollBackups = 2,
        MaximumFileSize = "1MB",
        StaticLogFileName = true,
        Layout = new log4net.Layout.PatternLayout("%d [%t] %-5p %c %m%n")
    };
    fileAppender.ActivateOptions();
    return fileAppender;
}
 
private IAppender CreateDBAppender()
{
    RawLayoutConverter layoutConverter = new RawLayoutConverter();
 
    var databaseAppender = new AdoNetAppender
    {
        Name = "myDbAppender",
        ConnectionString = connectionStringBuilder.ConnectionString,
        CommandText = @"INSERT INTO [Log] ([DateTime], [Exception], [Level], [Logger], [Message], [Thread])
                        VALUES (@logdate, @exception, @level, @logger, @message, @thread)",
        CommandType = System.Data.CommandType.Text,
        ConnectionType = "System.Data.SqlClient.SqlConnection",
        UseTransactions = true
    };
 
    databaseAppender.AddParameter(new AdoNetAppenderParameter
        {
            ParameterName = "@logdate",
            DbType = System.Data.DbType.DateTime,
            Layout = new RawTimeStampLayout()
        });
 
    databaseAppender.AddParameter(new AdoNetAppenderParameter
     &n

Tag: Nothing
Last updated:2016-07-01

mikebai

This person is a lazy dog and has left nothing

Like
< Last article
Next article >

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang