log.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* log.c - Log to logcat.
  2. *
  3. * Copyright 2016 The Android Open Source Project
  4. USE_LOG(NEWTOY(log, "p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
  5. config LOG
  6. bool "log"
  7. depends on TOYBOX_ON_ANDROID
  8. default y
  9. help
  10. usage: log [-p PRI] [-t TAG] [MESSAGE...]
  11. Logs message (or stdin) to logcat.
  12. -p Use the given priority instead of INFO:
  13. d: DEBUG e: ERROR f: FATAL i: INFO v: VERBOSE w: WARN s: SILENT
  14. -t Use the given tag instead of "log"
  15. */
  16. #define FOR_log
  17. #include "toys.h"
  18. GLOBALS(
  19. char *t, *p;
  20. )
  21. void log_main(void)
  22. {
  23. android_LogPriority pri = ANDROID_LOG_INFO;
  24. char *s = toybuf;
  25. int i;
  26. if (TT.p) {
  27. i = stridx("defisvw", tolower(*TT.p));
  28. if (i==-1 || strlen(TT.p)!=1) error_exit("bad -p '%s'", TT.p);
  29. pri = (android_LogPriority []){ANDROID_LOG_DEBUG, ANDROID_LOG_ERROR,
  30. ANDROID_LOG_FATAL, ANDROID_LOG_INFO, ANDROID_LOG_SILENT,
  31. ANDROID_LOG_VERBOSE, ANDROID_LOG_WARN}[i];
  32. }
  33. if (!TT.t) TT.t = "log";
  34. if (toys.optc) {
  35. for (i = 0; toys.optargs[i]; i++) {
  36. if (i) *s++ = ' ';
  37. if ((s-toybuf)+strlen(toys.optargs[i])>=1024) {
  38. memcpy(s, toys.optargs[i], 1024-(s-toybuf));
  39. toybuf[1024] = 0;
  40. error_msg("log cut at 1024 bytes");
  41. break;
  42. }
  43. s = stpcpy(s, toys.optargs[i]);
  44. }
  45. } else toybuf[readall(0, toybuf, 1024-1)] = 0;
  46. __android_log_write(pri, TT.t, toybuf);
  47. }