/src/main/java/org/teasoft/honey/osql/core/Logger.java

https://github.com/automvc/honey · Java · 435 lines · 321 code · 54 blank · 60 comment · 57 complexity · 58271664d843a33d987c1699fdd0722d MD5 · raw file

  1. package org.teasoft.honey.osql.core;
  2. import java.util.List;
  3. import org.teasoft.bee.logging.Log;
  4. import org.teasoft.honey.logging.LoggerFactory;
  5. /**
  6. * @author Kingstar
  7. * @since 1.0
  8. */
  9. public class Logger {
  10. // private static boolean showSQL = HoneyConfig.getHoneyConfig().showSQL;
  11. // private static boolean showSQLShowType = HoneyConfig.getHoneyConfig().showSQL_showType;
  12. // private static boolean showExecutableSql = HoneyConfig.getHoneyConfig().showSQL_showExecutableSql;
  13. private static boolean isShowSQL() {
  14. return HoneyConfig.getHoneyConfig().showSQL;
  15. }
  16. private static boolean isShowSQLShowType() {
  17. return HoneyConfig.getHoneyConfig().showSql_showType;
  18. }
  19. private static boolean isShowExecutableSql() {
  20. return HoneyConfig.getHoneyConfig().showSql_showExecutableSql;
  21. }
  22. private static String getSqlLoggerLevel() {
  23. return HoneyConfig.getHoneyConfig().sqlLoggerLevel;
  24. }
  25. private static Log log = null;
  26. //专门用于Bee框架输出SQL日志.
  27. static void logSQL(String hardStr, String sql) {
  28. if (!isShowSQL()) return;
  29. //=================================start
  30. if (LoggerFactory.isNoArgInConstructor()) {
  31. resetLog();
  32. } else {
  33. //不能移走,它表示的是调用所在的位置.
  34. String callerClass = "";
  35. try {
  36. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  37. } catch (Error e) {
  38. try {
  39. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  40. } catch (Throwable t) {
  41. try {
  42. callerClass = new Throwable().getStackTrace()[1].getClassName();
  43. } catch (Exception e2) {
  44. callerClass = Logger.class.getName();
  45. }
  46. }
  47. }
  48. resetLog(callerClass);
  49. }
  50. //=================================end
  51. if (isShowSQL()) {
  52. List list = null;
  53. String insertIndex = (String) OneTimeParameter.getAttribute("_SYS_Bee_BatchInsert");
  54. if (HoneyUtil.isMysql() && insertIndex != null) {
  55. // mysql批处理,在v1.8开始,不会用于占位设值. 需要清除
  56. list = HoneyContext.getAndClearPreparedValue(sql);
  57. } else {
  58. list = HoneyContext.justGetPreparedValue(sql);
  59. }
  60. // list = HoneyContext._justGetPreparedValue(sql); //统一用这个. bug,只用于打印的,没有删
  61. String value = HoneyUtil.list2Value(list, isShowSQLShowType());
  62. // if (value == null || "".equals(value.trim())) {
  63. if (value == null) {
  64. _print("[Bee] " + hardStr, sql);
  65. } else {
  66. // if(OneTimeParameter.isTrue("_SYS_Bee_BatchInsertFirst")){//batchSize==1
  67. // _print("[Bee] " + hardStr, sql);
  68. // }else
  69. if (insertIndex != null) {
  70. // if ("0".equals(insertIndex) && !HoneyUtil.isMysql()) {
  71. // _print("[Bee] " + hardStr, sql);
  72. // }
  73. print("[Bee] --> index:" + insertIndex + " , [values]: " + value);
  74. } else {
  75. _print("[Bee] " + hardStr, sql + " [values]: " + value);
  76. }
  77. if (isShowExecutableSql()) {
  78. String executableSql = HoneyUtil.getExecutableSql(sql, list);
  79. if (insertIndex != null ) {
  80. int endIndex = executableSql.indexOf("]_End ");
  81. _println("[Bee] " + hardStr + " ( ExecutableSql " + executableSql.substring(4, endIndex + 1) + " )", executableSql.substring(endIndex + 6) + " ;");
  82. // if(OneTimeParameter.isTrue("saveSqlString")) print(executableSql.substring(endIndex + 6));
  83. } else {
  84. // if ("0".equals(insertIndex))
  85. // _println("[Bee] " + hardStr + " ( ExecutableSql [index0])", executableSql);
  86. // else
  87. _println("[Bee] " + hardStr + " ( ExecutableSql )", executableSql);
  88. // if(OneTimeParameter.isTrue("saveSqlString")) print(executableSql);
  89. }
  90. }
  91. }
  92. }
  93. }
  94. private static void print(String s) {
  95. //在此判断输出日志的级别.
  96. //用户可以自己定义输出sql的日志级别. 比如定义warn才输出sql.
  97. //没意义. 因有一个是否显示sql日志了? 但,如果log4j设置了warn, 它还会输出吗? (用log4j时) 不会输出了,所以还是要设置.
  98. // log.info(s);
  99. //v1.9.8
  100. if (getSqlLoggerLevel() == null)
  101. log.info(s);
  102. else if ("warn".equalsIgnoreCase(getSqlLoggerLevel()))
  103. log.warn(s);
  104. else if ("error".equalsIgnoreCase(getSqlLoggerLevel()))
  105. log.error(s);
  106. else
  107. log.info(s);
  108. }
  109. private static void _print(String s1, String s2) {
  110. // log.info(s1+"\n" +s2);
  111. //v1.9.8
  112. if (getSqlLoggerLevel() == null)
  113. log.info(s1 + s2);
  114. else if ("warn".equalsIgnoreCase(getSqlLoggerLevel()))
  115. log.warn(s1 + s2);
  116. else if ("error".equalsIgnoreCase(getSqlLoggerLevel()))
  117. log.error(s1 + s2);
  118. else
  119. log.info(s1 + s2);
  120. }
  121. private static void _println(String s1, String s2) {
  122. //v1.9.8
  123. if (getSqlLoggerLevel() == null)
  124. log.info(s1 + "\n" + s2);
  125. else if ("warn".equalsIgnoreCase(getSqlLoggerLevel()))
  126. log.warn(s1 + "\n" + s2);
  127. else if ("error".equalsIgnoreCase(getSqlLoggerLevel()))
  128. log.error(s1 + "\n" + s2);
  129. else
  130. log.info(s1 + "\n" + s2);
  131. }
  132. public static void debug(String msg) {
  133. //=================================start
  134. if (LoggerFactory.isNoArgInConstructor()) {
  135. resetLog();
  136. } else {
  137. //不能移走,它表示的是调用所在的位置.
  138. String callerClass = "";
  139. try {
  140. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  141. } catch (Error e) {
  142. try {
  143. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  144. } catch (Throwable t) {
  145. try {
  146. callerClass = new Throwable().getStackTrace()[1].getClassName();
  147. } catch (Exception e2) {
  148. callerClass = Logger.class.getName();
  149. }
  150. }
  151. }
  152. resetLog(callerClass);
  153. }
  154. //=================================end
  155. log.debug(msg);
  156. }
  157. public static void info(String msg) {
  158. //=================================start
  159. if (LoggerFactory.isNoArgInConstructor()) {
  160. resetLog();
  161. } else {
  162. //不能移走,它表示的是调用所在的位置.
  163. String callerClass = "";
  164. try {
  165. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  166. } catch (Error e) {
  167. try {
  168. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  169. } catch (Throwable t) {
  170. try {
  171. callerClass = new Throwable().getStackTrace()[1].getClassName();
  172. } catch (Exception e2) {
  173. callerClass = Logger.class.getName();
  174. }
  175. }
  176. }
  177. resetLog(callerClass);
  178. }
  179. //=================================end
  180. log.info(msg);
  181. }
  182. public static void info(Number msg) {
  183. //=================================start
  184. if (LoggerFactory.isNoArgInConstructor()) {
  185. resetLog();
  186. } else {
  187. //不能移走,它表示的是调用所在的位置.
  188. String callerClass = "";
  189. try {
  190. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  191. } catch (Error e) {
  192. try {
  193. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  194. } catch (Throwable t) {
  195. try {
  196. callerClass = new Throwable().getStackTrace()[1].getClassName();
  197. } catch (Exception e2) {
  198. callerClass = Logger.class.getName();
  199. }
  200. }
  201. }
  202. resetLog(callerClass);
  203. }
  204. //=================================end
  205. log.info(msg + "");
  206. }
  207. public static void warn(String msg) {
  208. //=================================start
  209. if (LoggerFactory.isNoArgInConstructor()) {
  210. resetLog();
  211. } else {
  212. //不能移走,它表示的是调用所在的位置.
  213. String callerClass = "";
  214. try {
  215. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  216. } catch (Error e) {
  217. try {
  218. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  219. } catch (Throwable t) {
  220. try {
  221. callerClass = new Throwable().getStackTrace()[1].getClassName();
  222. } catch (Exception e2) {
  223. callerClass = Logger.class.getName();
  224. }
  225. }
  226. }
  227. resetLog(callerClass);
  228. }
  229. //=================================end
  230. log.warn(msg);
  231. }
  232. public static void warn(String msg,Throwable t) {
  233. //=================================start
  234. if (LoggerFactory.isNoArgInConstructor()) {
  235. resetLog();
  236. } else {
  237. //不能移走,它表示的是调用所在的位置.
  238. String callerClass = "";
  239. try {
  240. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  241. } catch (Error e) {
  242. try {
  243. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  244. } catch (Throwable t2) {
  245. try {
  246. callerClass = new Throwable().getStackTrace()[1].getClassName();
  247. } catch (Exception e2) {
  248. callerClass = Logger.class.getName();
  249. }
  250. }
  251. }
  252. resetLog(callerClass);
  253. }
  254. //=================================end
  255. log.warn(msg,t);
  256. }
  257. public static void warn(Number msg) {
  258. //=================================start
  259. if (LoggerFactory.isNoArgInConstructor()) {
  260. resetLog();
  261. } else {
  262. //不能移走,它表示的是调用所在的位置.
  263. String callerClass = "";
  264. try {
  265. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  266. } catch (Error e) {
  267. try {
  268. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  269. } catch (Throwable t) {
  270. try {
  271. callerClass = new Throwable().getStackTrace()[1].getClassName();
  272. } catch (Exception e2) {
  273. callerClass = Logger.class.getName();
  274. }
  275. }
  276. }
  277. resetLog(callerClass);
  278. }
  279. //=================================end
  280. log.warn(msg + "");
  281. }
  282. public static void error(String msg) {
  283. //=================================start
  284. if (LoggerFactory.isNoArgInConstructor()) {
  285. resetLog();
  286. } else {
  287. //不能移走,它表示的是调用所在的位置.
  288. String callerClass = "";
  289. try {
  290. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  291. } catch (Error e) {
  292. try {
  293. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  294. } catch (Throwable t) {
  295. try {
  296. callerClass = new Throwable().getStackTrace()[1].getClassName();
  297. } catch (Exception e2) {
  298. callerClass = Logger.class.getName();
  299. }
  300. }
  301. }
  302. resetLog(callerClass);
  303. }
  304. //=================================end
  305. log.error(msg);
  306. }
  307. public static void error(String msg,Throwable t) {
  308. //=================================start
  309. if (LoggerFactory.isNoArgInConstructor()) {
  310. resetLog();
  311. } else {
  312. //不能移走,它表示的是调用所在的位置.
  313. String callerClass = "";
  314. try {
  315. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  316. } catch (Error e) {
  317. try {
  318. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  319. } catch (Throwable t2) {
  320. try {
  321. callerClass = new Throwable().getStackTrace()[1].getClassName();
  322. } catch (Exception e2) {
  323. callerClass = Logger.class.getName();
  324. }
  325. }
  326. }
  327. resetLog(callerClass);
  328. }
  329. //=================================end
  330. log.error(msg,t);
  331. }
  332. public static void error(Number msg) {
  333. //=================================start
  334. if (LoggerFactory.isNoArgInConstructor()) {
  335. resetLog();
  336. } else {
  337. //不能移走,它表示的是调用所在的位置.
  338. String callerClass = "";
  339. try {
  340. callerClass = sun.reflect.Reflection.getCallerClass().getName();
  341. } catch (Error e) {
  342. try {
  343. callerClass = sun.reflect.Reflection.getCallerClass(2).getName();
  344. } catch (Throwable t) {
  345. try {
  346. callerClass = new Throwable().getStackTrace()[1].getClassName();
  347. } catch (Exception e2) {
  348. callerClass = Logger.class.getName();
  349. }
  350. }
  351. }
  352. resetLog(callerClass);
  353. }
  354. //=================================end
  355. log.error(msg + "");
  356. }
  357. private static void resetLog() {
  358. if (LoggerFactory.isNoArgInConstructor()) {
  359. log = _getLog(); //Log4jImpl,Slf4jImpl,SystemLogger,NoLogging,FileLogger 可以不需要参数
  360. }
  361. }
  362. private static void resetLog(String callerClass) {
  363. if (LoggerFactory.isNoArgInConstructor()) {
  364. log = _getLog(); //log4j 要解决同时处理两个构造函数
  365. } else {
  366. try {
  367. log = _getLog(callerClass);
  368. } catch (Exception e) {
  369. log = _getLog(Logger.class.getName());
  370. }
  371. }
  372. }
  373. private static Log _getLog() {
  374. Log log = LoggerFactory.getLog();
  375. return log;
  376. }
  377. private static Log _getLog(String className) {
  378. Log log = LoggerFactory.getLog(className);
  379. return log;
  380. }
  381. }