【问题标题】:Configure log4net RollingFileAppender in code rolling once per application start在每次应用程序启动时在代码滚动中配置 log4net RollingFileAppender
【发布时间】:2012-08-03 19:12:14
【问题描述】:

我想创建一个 log4net RollingFileAppender,每次程序启动时都会创建一个新文件。如果文件变大,它可以滚动,但每次启动应用程序时都必须滚动。如果配置中配置了另一个 appender,则不应添加 appender。本质上是创建一个可以通过更改配置文件来覆盖的默认日志配置。

【问题讨论】:

    标签: c# .net log4net


    【解决方案1】:

    在拼凑了许多其他帖子之后,我终于得到了这个工作。该实现位于静态包装器类中。您所要做的就是将此代码粘贴到您的应用中,设置创建文件的位置,并在应用启动时调用 Log.Configure()。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
    using System.Windows.Threading;
    using log4net;
    using log4net.Core;
    using log4net.Appender;
    using log4net.Repository.Hierarchy;
    using System.Reflection;
    using System.IO;
    
    namespace [Your Namespace]
    {
        public static class Log
        {
            private static bool isConfigured = false;
            private static ILog iLog;
    
            public static void Configure()
            {
                if (isConfigured)
                    return;
    
                var loggerName = typeof(DiagnosticsManager).FullName;
    
                var logger = (log4net.Repository.Hierarchy.Logger)log4net.LogManager.GetRepository().GetLogger(loggerName);
                var ilogger = log4net.LogManager.GetRepository().GetLogger(loggerName);
    
                //Add the default log appender if none exist
                if(logger.Appenders.Count == 0)
                {
                    var directoryName = "[Your directory name here. e.c. 'C:\ProgramData\AppName\Logs']";
    
                    //If the directory doesn't exist then create it
                    if(!Directory.Exists(directoryName))
                        Directory.CreateDirectory(directoryName);
    
                    var fileName = Path.Combine(directoryName, "[Your static file name here. e.c. 'AppName.log']");
    
                    //Create the rolling file appender
                    var appender = new log4net.Appender.RollingFileAppender();
                    appender.Name = "RollingFileAppender";
                    appender.File = fileName;
                    appender.StaticLogFileName = true;
                    appender.AppendToFile = false;
                    appender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size;
                    appender.MaxSizeRollBackups = 10;
                    appender.MaximumFileSize = "10MB";
                    appender.PreserveLogFileNameExtension = true;
    
                    //Configure the layout of the trace message write
                    var layout = new log4net.Layout.PatternLayout()
                    {
                        ConversionPattern = "%date{hh:mm:ss.fff} [%thread] %-5level - %message%newline"
                    };
                    appender.Layout = layout;
                    layout.ActivateOptions();
    
                    //Let log4net configure itself based on the values provided
                    appender.ActivateOptions();
                    log4net.Config.BasicConfigurator.Configure(appender);
                }
    
                iLog = LogManager.GetLogger(loggerName);
                isConfigured = true;
    
                Info("Logging Configured at " + DateTime.Now.ToString("g"));
            }
    
            public static event EventHandler<ExceptionLoggedEventArgs> ExceptionLogged;
    
            public static void Debug(object message) { Configure(); iLog.Debug(message); }
            public static void Debug(object message, Exception exception) { Configure(); iLog.Debug(message, exception); }
    
            public static void Error(object message) { Configure(); iLog.Error(message); }
            public static void Error(object message, Exception exception) { Configure(); iLog.Error(message, exception); }
    
            public static void Fatal(object message) { Configure(); iLog.Fatal(message); }
            public static void Fatal(object message, Exception exception) { Configure(); iLog.Fatal(message, exception); }
    
            public static void Info(object message) { Configure(); iLog.Info(message); }
            public static void Info(object message, Exception exception) { Configure(); iLog.Info(message, exception); }
    
            public static void Warn(object message) { Configure(); iLog.Warn(message); }
            public static void Warn(object message, Exception exception) { Configure(); iLog.Warn(message, exception); }
    
        }
    
    }
    

    【讨论】:

    • +1 用于发布解决方案。今天对我很有用,因为我想做类似的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多