配置代码log4net的RollingFileAppender进行每个应用程序开始滚动一次 [英] Configure log4net RollingFileAppender in code rolling once per application start

查看:313
本文介绍了配置代码log4net的RollingFileAppender进行每个应用程序开始滚动一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建创建一个新的文件中的每个程序启动时间log4net的RollingFileAppender进行。如果该文件获取到大,但每次启动应用程序时必须滚动它可以滚动。如果另一个附加目的地的配置中配置的附加器不应添加。在本质上创建可以通过更改配置文件来覆盖默认的日志配置。

I would like to create a log4net RollingFileAppender that creates a new file each time the program starts. It can roll if the file gets to big but must roll each time the application is started. The appender should not be added if another appender is configured in the configuration. In essence creating a default log configuration that can be overridden by changing the configuration file.

推荐答案

拼凑了一些其他职位后,我终于得到了这个工作。实施是在静态包装类。所有你需要做的就是这段代码粘贴到您的应用程序,设置的位置来创建文件,并调用Log.Configure()应用程序启动时。

After piecing together a number of other posts, I finally got this working. The implementation is in a static wrapper class. All you have to do is paste this code into your app, set the location to create the file, and call Log.Configure() when the application starts.

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); }

    }

}

这篇关于配置代码log4net的RollingFileAppender进行每个应用程序开始滚动一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆