예제 #1
0
        internal bool IsEnabledAccessLog(AccessLogTarget target)
        {
            if ((AccessLogTarget & target) == 0)
            {
                return(false);
            }

            if (AccessLogInitialized)
            {
                return(GlobalAccessLogMode != GlobalAccessLogMode.None);
            }

            lock (_accessLogInitLocker)
            {
                if (!AccessLogInitialized)
                {
                    if (HasFileSystemServer())
                    {
                        IFileSystemProxy fsProxy = GetFileSystemProxyServiceObject();

                        Result rc = fsProxy.GetGlobalAccessLogMode(out GlobalAccessLogMode globalMode);
                        GlobalAccessLogMode = globalMode;

                        if (rc.IsFailure())
                        {
                            throw new LibHacException("Abort");
                        }
                    }
                    else
                    {
                        GlobalAccessLogMode = GlobalAccessLogMode.Log;
                    }

                    if (GlobalAccessLogMode != GlobalAccessLogMode.None)
                    {
                        InitAccessLog();
                    }

                    AccessLogInitialized = true;
                }
            }

            return(GlobalAccessLogMode != GlobalAccessLogMode.None);
        }
예제 #2
0
        public Result RunOperationWithAccessLogOnFailure(AccessLogTarget logTarget, Func <Result> operation,
                                                         Func <string> textGenerator, [CallerMemberName] string caller = "")
        {
            Result rc;

            if (IsEnabledAccessLog(logTarget))
            {
                TimeSpan startTime = Time.GetCurrent();
                rc = operation();
                TimeSpan endTime = Time.GetCurrent();

                OutputAccessLogUnlessResultSuccess(rc, startTime, endTime, textGenerator(), caller);
            }
            else
            {
                rc = operation();
            }

            return(rc);
        }
예제 #3
0
        public Result RunOperationWithAccessLog(AccessLogTarget logTarget, FileHandle handle, Func <Result> operation,
                                                Func <string> textGenerator, [CallerMemberName] string caller = "")
        {
            Result rc;

            if (IsEnabledAccessLog(logTarget) && handle.File.Parent.IsAccessLogEnabled)
            {
                TimeSpan startTime = Time.GetCurrent();
                rc = operation();
                TimeSpan endTime = Time.GetCurrent();

                OutputAccessLog(rc, startTime, endTime, handle, textGenerator(), caller);
            }
            else
            {
                rc = operation();
            }

            return(rc);
        }
예제 #4
0
 public void SetAccessLogTarget(AccessLogTarget target)
 {
     AccessLogTarget = target;
 }