     }
     
     internal func displayWarning(_ text: String) {
-        print(text)
+        var displayText = "\n👉 \(text)"
+        
+        let viewType = "\(type(of: view))"
+        displayText += "\n   (View type: \(viewType), Frame: \(view.frame)"
+        
+        var currentView = view
+        var hierarchy: [String] = []
+        while let parent = currentView.superview {
+            hierarchy.insert("\(type(of: parent))", at: 0)
+            currentView = parent
+        }
+        if hierarchy.count > 0 {
+            displayText += ", Superviews: \(hierarchy.flatMap({ $0 }).joined(separator: " -> "))"
+        }
+        
+        displayText += ", Tag: \(view.tag))\n"
+        
+        print(displayText)
         _pinlayoutUnitTestLastWarning = text
     }
     

        
        if let align = align {
            func context() -> String { return "align(.\(align))" }
            if !((_top != nil && _bottom != nil) || (shouldPinEdges && height != nil && (_top != nil || _bottom != nil || _vCenter != nil))) {
                warn("the top and bottom coordinates must be set to align the view vertically.", context)
            }
            

    
    internal func warn(_ text: String, _ context: Context) {
        guard Pin.logWarnings else { return }
        warn("\(context()) won't be applied, \(text)")
    }
    
    internal func warn(_ text: String) {
        guard Pin.logWarnings else { return }
        displayWarning("PinLayout Warning: \(text)")
    }
    
    internal func warnPropertyAlreadySet(_ propertyName: String, propertyValue: CGFloat, _ context: Context) {
        guard Pin.logWarnings else { return }
        displayWarning("PinLayout Conflict: \(context()) won't be applied since it value has already been set to \(propertyValue).\n")
    }
    
    internal func warnPropertyAlreadySet(_ propertyName: String, propertyValue: CGSize, _ context: Context) {
        guard Pin.logWarnings else { return }
        displayWarning("PinLayout Conflict: \(context()) won't be applied since it value has already been set to CGSize(width: \(propertyValue.width), height: \(propertyValue.height)).\n")
    }
    
    internal func warnConflict(_ context: Context, _ properties: [String: CGFloat]) {
        guard Pin.logWarnings else { return }
        var warning = "PinLayout Conflict: \(context()) won't be applied since it conflicts with the following already set properties:\n"
        properties.forEach { (property) in
            warning += " \(property.key): \(property.value)\n"
        }
