1

エンタープライズ ログ設定を動的に作成しています。

構成を保存した後、Windows サービスConfigurationManager.RefreshSection("loggingConfiguration")を更新するために を追加しました。app.configしかし、ログは最初の数秒 (10 秒) を作成していません。ログに記録する必要があるいくつかのデータを失いました。

以下は、プログラムでログ設定を作成するために作成したコードです。

    public static void CreateLoggingSettings(string configpath, string logCategory, string logfilePath)
    {
        ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
        TextFormatterData txtformat;
        FlatFileTraceListenerData tldata;
        LogSource ls;
        TraceSourceData tsd;
        TraceListenerReferenceData tlr;
        try
        {

            fileMap.ExeConfigFilename = configpath;
            Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            LoggingSettings loggingSettings = config.GetSection(LoggingSettings.SectionName) as LoggingSettings;

            if (loggingSettings == null ||
                (loggingSettings.Formatters.Contains(logCategory) &&
                 loggingSettings.TraceListeners.Contains(logCategory))) return;

            txtformat = new TextFormatterData(logCategory, "{timestamp(local)}{tab}{message}");
            loggingSettings.Formatters.Add(txtformat);

            tldata = new FlatFileTraceListenerData(logCategory, logfilePath + logCategory + ".log",
                txtformat.Name);
            loggingSettings.TraceListeners.Add(tldata);

            ls = new LogSource(tldata.Name, System.Diagnostics.SourceLevels.All);
            tsd = new TraceSourceData(ls.Name, System.Diagnostics.SourceLevels.All);
            tlr = new TraceListenerReferenceData(tldata.Name);
            tsd.TraceListeners.Add(tlr);

            loggingSettings.TraceSources.Add(tsd);
            config.Save(ConfigurationSaveMode.Full);
            ConfigurationManager.RefreshSection("loggingConfiguration");

        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            fileMap = null;
            txtformat = null;
            tldata = null;
            ls = null;
            tsd = null;
            tlr = null;
        }
    }
}

しかし、それはうまくいきます。サービスをデバッグするとき。何か案は?

4

0 に答える 0