Example #1
0
        static void OnLogInternal(IntPtr data, LogLevel level, IntPtr ctx, IntPtr format, IntPtr args)
        {
            if (_log == null)
            {
                return;
            }

            IntPtr buffer = IntPtr.Zero;

            try
            {
                buffer = Marshal.AllocHGlobal(2048 + 1);
                var count = MarshalUtils.vsprintf(buffer, format, args);
                if (count > -1)
                {
                    var message = buffer.FromUtf8();
                    GetLogContext(ctx, out var module, out var file, out var line);
#if NET40
                    Task.Factory.StartNew(() => _log?.Invoke(null, new LogEventArgs(level, message, module, file, line)));
#else
                    Task.Run(() => _log?.Invoke(null, new LogEventArgs(level, message, module, file, line)));
#endif
                }
            }
            finally
            {
                if (buffer != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(buffer);
                }
            }
        }