diff --git a/Common/Common/Log/LCLogLevel.cs b/Common/Common/Log/LCLogLevel.cs
new file mode 100644
index 0000000..f43aaf5
--- /dev/null
+++ b/Common/Common/Log/LCLogLevel.cs
@@ -0,0 +1,19 @@
+namespace LeanCloud {
+ ///
+ /// 日志级别
+ ///
+ public enum LCLogLevel {
+ ///
+ /// 调试级别
+ ///
+ Debug,
+ ///
+ /// 警告级别
+ ///
+ Warn,
+ ///
+ /// 错误级别
+ ///
+ Error,
+ }
+}
diff --git a/Common/Common/Log/LCLogger.cs b/Common/Common/Log/LCLogger.cs
new file mode 100644
index 0000000..1ffbcac
--- /dev/null
+++ b/Common/Common/Log/LCLogger.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Text;
+
+namespace LeanCloud {
+ ///
+ /// 日志类
+ ///
+ public static class LCLogger {
+ ///
+ /// 日志回调接口,方便开发者调试
+ ///
+ /// The log delegate.
+ public static Action LogDelegate {
+ get; set;
+ }
+
+ public static void Debug(string log) {
+ LogDelegate?.Invoke(LCLogLevel.Debug, log);
+ }
+
+ public static void Debug(string format, params object[] args) {
+ LogDelegate?.Invoke(LCLogLevel.Debug, string.Format(format, args));
+ }
+
+ public static void Warn(string log) {
+ LogDelegate?.Invoke(LCLogLevel.Warn, log);
+ }
+
+ public static void Warn(string format, params object[] args) {
+ LogDelegate?.Invoke(LCLogLevel.Warn, string.Format(format, args));
+ }
+
+ public static void Error(string log) {
+ LogDelegate?.Invoke(LCLogLevel.Error, log);
+ }
+
+ public static void Error(string format, params object[] args) {
+ LogDelegate?.Invoke(LCLogLevel.Error, string.Format(format, args));
+ }
+
+ public static void Error(Exception e) {
+ StringBuilder sb = new StringBuilder();
+ sb.Append(e.GetType());
+ sb.Append("\n");
+ sb.Append(e.Message);
+ sb.Append("\n");
+ sb.Append(e.StackTrace);
+ Error(sb.ToString());
+ }
+ }
+}