예제 #1
0
        /// <summary>
        /// Create command event
        /// </summary>
        /// <param name="format"></param>
        /// <returns></returns>
        public static IEnumerable <FormatEvent> CreateCommandEvent(string format = null)
        {
            if (format == null || string.IsNullOrWhiteSpace(format))
            {
                yield break;
            }

            if (CasingHelper.Check(out var cmd1, format) && (cmd1 == 'U' || cmd1 == 'w'))
            {
                yield return(new FormatEvent(cmd1, 10000, CasingHelper.Format()(cmd1)));
            }

            if (PaddingHelper.Check(out var cmd2, out var width, format) && (cmd2 == 'r' || cmd2 == 'l'))
            {
                yield return(new FormatEvent(cmd2, 10001, PaddingHelper.Format()(cmd2)(width)));
            }

            if (JsonHelper.Check(format))
            {
                yield return(new FormatEvent('j', 99999, JsonHelper.Format));
            }

            foreach (var provider in CustomFormatProviderManager.Get())
            {
                if (provider != null)
                {
                    var additionalFormats = provider.Invoke(format);
                    foreach (var f in additionalFormats)
                    {
                        yield return(f);
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Create command func
        /// </summary>
        /// <param name="format"></param>
        /// <param name="customFormatProvider"></param>
        /// <returns></returns>
        public static IEnumerable <Func <object, IFormatProvider, object> > CreateCommandFunc(
            string format = null,
            Func <string, IEnumerable <Func <object, IFormatProvider, object> > > customFormatProvider = null)
        {
            if (format == null || string.IsNullOrWhiteSpace(format))
            {
                yield break;
            }

            if (CasingHelper.Check(out var cmd1, format) && (cmd1 == 'U' || cmd1 == 'w'))
            {
                yield return(CasingHelper.Format()(cmd1));
            }

            if (PaddingHelper.Check(out var cmd2, out var width, format) && (cmd2 == 'r' || cmd2 == 'l'))
            {
                yield return(PaddingHelper.Format()(cmd2)(width));
            }

            if (JsonHelper.Check(format))
            {
                yield return(JsonHelper.Format);
            }

            if (customFormatProvider != null)
            {
                var additionalFormatFuncs = customFormatProvider.Invoke(format);
                foreach (var f in additionalFormatFuncs)
                {
                    yield return(f);
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Get level moniker
        /// </summary>
        /// <param name="value"></param>
        /// <param name="format"></param>
        /// <param name="formatProvider"></param>
        /// <returns></returns>
        public static string GetLevelMoniker(LogEventLevel value, string format = null, IFormatProvider formatProvider = null)
        {
            var(f, l) = Char(format);
            var levelName = Name(value);

            if (format == null || format.Length != 2 && format.Length != 3)
            {
                return(CasingHelper.Format()(f)(levelName, formatProvider) as string);
            }

            if (l < 1)
            {
                return(string.Empty);
            }

            if (l > 4)
            {
                var stringValue = levelName.Length > l?levelName.Substring(0, l) : levelName;

                return(CasingHelper.Format()(f)(stringValue, formatProvider) as string);
            }

            var levelIndex = Index(value);

            if (levelIndex >= MinIndex && levelIndex <= MaxIndex)
            {
                switch (f)
                {
                case 'w':
                    return(LowercaseLevelMap[levelIndex][l - 1]);

                case 'U':
                    return(UppercaseLevelMap[levelIndex][l - 1]);

                case 't':
                    return(TitleCaseLevelMap[levelIndex][l - 1]);
                }
            }

            return(CasingHelper.Format()(f)(levelName, formatProvider) as string);
        }