Inheritance: IActionLogWriter
Ejemplo n.º 1
0
        private async Task EnsureCreatedAsync()
        {
            var token = await _initializationLock.WaitAsync();

            try {
                if (!token.IsSet)
                {
                    // Delay-create log since permission is established when settings are loaded
                    // which may happen after ctor is called.
                    _logs = new IActionLogWriter[Enum.GetValues(typeof(LogVerbosity)).Length];
                    _logs[(int)LogVerbosity.None] = NullLogWriter.Instance;

                    IActionLogWriter mainWriter = NullLogWriter.Instance;
                    if (_permissions.CurrentVerbosity >= LogVerbosity.Minimal)
                    {
                        mainWriter = _writer ?? FileLogWriter.InTempFolder(_appName);
                    }

                    // Unfortunately, creation of event sources in OS logs requires local admin rights.
                    // http://www.christiano.ch/wordpress/2009/12/02/iis7-web-application-writing-to-event-log-generates-security-exception/
                    // So we can't use OS event logs as in Dev15 there is no MSI which could elevate..
                    // _maxLogLevel >= LogLevel.Minimal ? (_writer ?? new ApplicationLogWriter(_appName)) : NullLogWriter.Instance;
                    _logs[(int)LogVerbosity.Minimal] = mainWriter;
                    _logs[(int)LogVerbosity.Normal]  = _permissions.CurrentVerbosity >= LogVerbosity.Normal ? mainWriter : NullLogWriter.Instance;

                    if (_permissions.CurrentVerbosity == LogVerbosity.Traffic)
                    {
                        _logs[(int)LogVerbosity.Traffic] = _writer ?? FileLogWriter.InTempFolder(_appName + ".traffic");
                    }
                    else
                    {
                        _logs[(int)LogVerbosity.Traffic] = NullLogWriter.Instance;
                    }
                }
            } finally {
                token.Set();
            }
        }