0

app.config我在 C# 中有一个问题。

app.configkeyand写了一个value=DEBUG,而在main我写了

DEBUG,INFO,WARN AND ERROR.

问题是该值不起作用,它在main不考虑级别的情况下将其打印到我的日志中。

这是我的应用程序配置:

<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="FolderName" value="C:\Users\mpilas\Desktop\logs\" />
<add key="FileSize" venter code herealue="10240" />
<add key="LogNameType" value="Date"/> <!--Value can be Size or "Date" -->
<add key="Level" value='DEBUG'/>
</appSettings>
</configuration>

main的是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Configuration;


namespace ConsoleApplication8 {
    class Program {
        static void Main(string[] args) {
            for (int i = 0; i < 2; i++) {
                LogWriter.Write("Hello", Severity.DEBUG);
                LogWriter.Write("Hello", Severity.INFO);
                LogWriter.Write("Hello", Severity.WARNING);
                LogWriter.Write("Hello", Severity.ERROR);
            }
        }
    }
}

我还有一个名为 的课程:LogWriter

namespace ConsoleApplication8 {
    public enum Severity { ERROR, WARNING, INFO, DEBUG };

    public class LogWriter {
        private static string _folder = ConfigurationManager.AppSettings["FolderName"];
        private static long _fileSize = int32.Parse(ConfigurationManager.AppSettings["FileSize"]);
        private static string kindOfType = ConfigurationManager.AppSettings["LogNameType"];

        static LogWriter() {}

        private static string GetFileNameByDate() {
            string dateName= DateTime.Now.ToString("yyyy-MM-dd");
            return  _folder + dateName + ".log";
        }

        private static string GetFileNameBySize() {
            string name = "";
            int counter = 0;

            do {
                if (counter == 0) { name = _folder + kindOfType + ".log"; }
                else {name = _folder + kindOfType + "-" + counter + ".log"; }
                if (File.Exists(name) {
                    counter++;
                    FileInfo realFile = new FileInfo(name);
                    if (realFile.Length > _fileSize) { 
                        name = _folder + kindOfType + "-" + counter + ".log";
                    }
                    else { break; }
                }
                else { break; }
            } while (true);
            return name;
        }


        private static string GetFileName() {
            clearFiles();
            if(kindOfType == "Size") { return GetFileNameBySize(); }
            else { 
              if(kindOfType == "Date") { return GetFileNameByDate(); }
            }
            return "";
        }

        public static void Write(string messgae, Severity severity) {
            try {
                string file = GetFileName();
                StreamWriter log = new StreamWriter(file, true);
                log.WriteLine(DateTime.Now.ToString() + " " + severity.ToString() + ": [" + messgae + "]");
                log.Flush();
                log.Close();
            }
            catch (Exception) {}
        }

        private static void clearFiles() {
            string[] files = Directory.GetFiles(_folder);
            foreach (string file in files) {
                FileInfo fi = new FileInfo(file);
                if (fi.LastAccessTime < DateTime.Now.AddDays(-14)) { fi.Delete(); }
            }
        }
    }
}

我应该如何对待key=level我的应用程序及其价值?

4

1 回答 1

1

您最好使用System.Diagnostics您自己的实现中提供的现有日志脚手架TraceListener,它可以处理您的 14 天滚动日志等,然后您需要做的就是通过 注册您的跟踪侦听器,然后使用跟踪app.config配置您的跟踪级别开关

请注意,traceSwitch支持代码中的实例由<add name="TraceLevelSwitch" value="0" />config 字段控制。

<configuration>
    <system.diagnostics>
        <switches>
            <!--  0-off, 1-error, 2-warn, 3-info, 4-verbose. -->
            <add name="TraceLevelSwitch" value="0" />
        </switches>
        <trace autoflush="true" indentsize="4">
            <listeners>
                <add name="myListener" type="MorPilasTraceListener" />
            </listeners>
        </trace>
    </system.diagnostics>
</configuration>

private static TraceSwitch traceSwitch = new TraceSwitch("TraceLevelSwitch", null);

private static void LogInfo(string message)
{
    if(traceSwitch.TraceInfo)
        Trace.TraceInformation(message);
}
于 2012-08-23T07:06:32.490 回答