예제 #1
0
        /// <summary>
        /// The default log handler set up by GLib; <see cref="SetDefaultHandler"/>
        /// allows to install an alternate default log handler.
        /// </summary>
        /// <param name="logDomain">the log domain, or <see langword="null" /> for the default "" application domain</param>
        /// <param name="logLevel">the level of the message</param>
        /// <param name="message">the message</param>
        public static void DefaultHandler(string logDomain, Enums.LogLevelFlags logLevel, string message)
        {
            var nmess = message.ToUtf8Ptr();

            GLib.GLogDefaultHandler(logDomain, logLevel, nmess, IntPtr.Zero);
            GLib.GFree(nmess);
        }
예제 #2
0
        /// <summary>
        /// Logs an error or debugging message.
        /// </summary>
        /// <param name="logDomain">the log domain, or <see langword="null" /> for the default "" application domain</param>
        /// <param name="flags">the log level</param>
        /// <param name="format">the message format</param>
        /// <param name="args">the parameters to insert into the format string</param>
        public static void WriteLog(string logDomain, Enums.LogLevelFlags flags, string format, params object[] args)
        {
            var nmessage = string.Format(format, args).ToUtf8Ptr();

            GLib.GLogv(logDomain, flags, nmessage);
            GLib.GFree(nmessage);
        }
예제 #3
0
            private void Invoke(string logDomain, Enums.LogLevelFlags flags, string message)
            {
                var ndom  = logDomain.ToUtf8Ptr();
                var nmess = message.ToUtf8Ptr();

                native(ndom, flags, nmess, IntPtr.Zero);
                GLib.GFree(ndom);
                GLib.GFree(nmess);
            }
예제 #4
0
파일: Log.cs 프로젝트: kleisauke/net-vips
        /// <summary>
        /// Sets the log handler for a domain and a set of log levels.
        /// </summary>
        /// <param name="logDomain">The log domain, or <see langword="null"/> for the default "" application domain.</param>
        /// <param name="flags">The log levels to apply the log handler for.</param>
        /// <param name="logFunc">The log handler function.</param>
        /// <returns>The id of the handler.</returns>
        public static uint SetLogHandler(string logDomain, Enums.LogLevelFlags flags, LogDelegate logFunc)
        {
            _nativeHandler ??= NativeCallback;

            var gch    = GCHandle.Alloc(logFunc);
            var result = GLib.GLogSetHandler(logDomain, flags, _nativeHandler, (IntPtr)gch);

            _handlers.AddOrUpdate(result, gch, (k, v) => gch);
            return(result);
        }
예제 #5
0
        private static void NativeCallback(IntPtr logDomainNative, Enums.LogLevelFlags flags, IntPtr messageNative,
                                           IntPtr userData)
        {
            if (userData == IntPtr.Zero)
            {
                return;
            }
            var logDomain = logDomainNative.ToUtf8String();
            var message   = messageNative.ToUtf8String();
            var gch       = (GCHandle)userData;

            if (gch.Target is LogFunc func)
            {
                func(logDomain, flags, message);
            }
        }
예제 #6
0
 /// <summary>
 /// Common logging method.
 /// </summary>
 /// <remarks>
 /// Sample usage:
 /// <code language="lang-csharp">
 /// // Print messages and stack trace for vips critical messages
 /// var logFunc = new LogFunc(Log.PrintTraceLogFunction);
 /// Log.SetLogHandler("VIPS", Enums.LogLevelFlags.Critical, logFunc);
 /// </code>
 /// </remarks>
 /// <param name="domain">the log domain of the message</param>
 /// <param name="level">the log level of the message (including the fatal and recursion flags)</param>
 /// <param name="message">the message to process</param>
 public static void PrintTraceLogFunction(string domain, Enums.LogLevelFlags level, string message)
 {
     PrintLogFunction(domain, level, message);
     Console.WriteLine("Trace follows:\n{0}", new StackTrace());
 }
예제 #7
0
 /// <summary>
 /// Common logging method.
 /// </summary>
 /// <remarks>
 /// Sample usage:
 /// <code language="lang-csharp">
 /// // Print the messages for the NULL domain
 /// var logFunc = new LogFunc(Log.PrintLogFunction);
 /// Log.SetLogHandler(null, Enums.LogLevelFlags.All, logFunc);
 /// </code>
 /// </remarks>
 /// <param name="domain">the log domain of the message</param>
 /// <param name="level">the log level of the message (including the fatal and recursion flags)</param>
 /// <param name="message">the message to process</param>
 public static void PrintLogFunction(string domain, Enums.LogLevelFlags level, string message)
 {
     Console.WriteLine("Domain: '{0}' Level: {1}", domain, level);
     Console.WriteLine("Message: {0}", message);
 }
예제 #8
0
 /// <summary>
 /// Sets the log levels which are fatal in the given domain.
 /// </summary>
 /// <param name="logDomain">the log domain</param>
 /// <param name="fatalMask">the new fatal mask</param>
 /// <returns>the old fatal mask for the log domain</returns>
 public static Enums.LogLevelFlags SetAlwaysFatal(string logDomain, Enums.LogLevelFlags fatalMask)
 {
     return(GLib.GLogSetFatalMask(logDomain, fatalMask));
 }
예제 #9
0
 /// <summary>
 /// Sets the message levels which are always fatal, in any log domain.
 /// When a message with any of these levels is logged the program terminates.
 /// </summary>
 /// <param name="fatalMask">the mask containing bits set for each level of error which is to be fatal</param>
 /// <returns>the old fatal mask</returns>
 public static Enums.LogLevelFlags SetAlwaysFatal(Enums.LogLevelFlags fatalMask)
 {
     return(GLib.GLogSetAlwaysFatal(fatalMask));
 }