JCHATCustomFormatter.m 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //
  2. // Created by Javen on 15/5/8.
  3. // Copyright (c) 2015 HXHG. All rights reserved.
  4. //
  5. #import <libkern/OSAtomic.h>
  6. #import "JCHATCustomFormatter.h"
  7. #import "DDLog.h"
  8. @implementation JCHATCustomFormatter {
  9. //thread safe
  10. int atomicLoggerCount;
  11. NSDateFormatter *threadUnsafeDateFormatter;
  12. }
  13. - (NSString *)formatLogMessage:(DDLogMessage *)logMessage{
  14. NSString *logLevel = nil;
  15. // switch (logMessage->_flag) {
  16. // case LOG_FLAG_ERROR:
  17. // logLevel = @"E";
  18. // break;
  19. // case LOG_FLAG_WARN:
  20. // logLevel = @"W";
  21. // break;
  22. // case LOG_FLAG_INFO:
  23. // logLevel = @"I";
  24. // break;
  25. // case LOG_FLAG_DEBUG:
  26. // logLevel = @"D";
  27. // break;
  28. // default:
  29. // logLevel = @"V";
  30. // break;
  31. // }
  32. //获取当前时区时间
  33. NSDateFormatter* dateFormatter = [[NSDateFormatter alloc]init];
  34. [dateFormatter setDateStyle:NSDateFormatterFullStyle];
  35. NSString *dateAndTime = [self stringFromDate:(logMessage.timestamp)];
  36. NSString *formatStr = [NSString stringWithFormat:@"%@ | %@ | %@ - [%@] %@", dateAndTime,
  37. COMMON_LOGGER_NAME, logLevel, logMessage.fileName, logMessage->_message];
  38. return formatStr;
  39. }
  40. - (NSString *)stringFromDate:(NSDate *)date {
  41. int32_t loggerCount = OSAtomicAdd32(0, &atomicLoggerCount);
  42. NSString *timeFormatString = @"yyyy-MM-dd HH:mm:ss.SSS";
  43. if (loggerCount <= 1) {
  44. // Single-threaded mode.
  45. if (threadUnsafeDateFormatter == nil) {
  46. threadUnsafeDateFormatter = [[NSDateFormatter alloc] init];
  47. [threadUnsafeDateFormatter setDateFormat:timeFormatString];
  48. }
  49. return [threadUnsafeDateFormatter stringFromDate:date];
  50. } else {
  51. // Multi-threaded mode.
  52. // NSDateFormatter is NOT thread-safe.
  53. NSString *key = @"MyCustomFormatter_NSDateFormatter";
  54. NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary];
  55. NSDateFormatter *dateFormatter = threadDictionary[key];
  56. if (dateFormatter == nil) {
  57. dateFormatter = [[NSDateFormatter alloc] init];
  58. [dateFormatter setDateFormat:timeFormatString];
  59. threadDictionary[key] = dateFormatter;
  60. }
  61. return [dateFormatter stringFromDate:date];
  62. }
  63. }
  64. - (void)didAddToLogger:(id <DDLogger>)logger {
  65. OSAtomicIncrement32(&atomicLoggerCount);
  66. }
  67. - (void)willRemoveFromLogger:(id <DDLogger>)logger {
  68. OSAtomicDecrement32(&atomicLoggerCount);
  69. }
  70. @end