文章内容来源:



spark中提供了log4j的方式记录日志。可以在$SPARK_HOME/conf/下,将 log4j.properties.template 文件copy为 log4j.properties 来启用log4j配置。但这个配置为全局配置,不能单独配置某个job的运行日志。

Spark-core包设置默认的日志级别为info。

用程序是默认加载Spark-core包下面的log4j-defaults.properties日志文件。

查看log4j-defaults.properties文件:

  1. # Set everything to be logged to the console
  2. log4j.rootCategory=INFO, console
  3. log4j.appender.console=org.apache.log4j.ConsoleAppender
  4. log4j.appender.console.target=System.err
  5. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  6. log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
  7. # Set the default spark-shell log level to WARN. When running the spark-shell, the
  8. # log level for this class is used to overwrite the root logger's log level, so that
  9. # the user can have different defaults for the shell and regular Spark apps.
  10. log4j.logger.org.apache.spark.repl.Main=WARN
  11. # Settings to quiet third party logs that are too verbose
  12. log4j.logger.org.spark_project.jetty=WARN
  13. log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
  14. log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
  15. log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
  16. log4j.logger.org.apache.parquet=ERROR
  17. log4j.logger.parquet=ERROR
  18. # SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
  19. log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
  20. log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

1、全局应用设置

针对spark所有应用,可以在Java工程目录中新建/src/main/resources目录,把log4j.properties放置该目录。

log4j.properties生成:

  1. Spark中conf默认配置文件是log4j.properties.template,可以将其改名为log4j.properties;
  2. 将Spark-core包中的log4j-default.properties内容复制到log4j.properties文件。

log4j内容如下:

  1. #
  2. # Licensed to the Apache Software Foundation (ASF) under one or more
  3. # contributor license agreements. See the NOTICE file distributed with
  4. # this work for additional information regarding copyright ownership.
  5. # The ASF licenses this file to You under the Apache License, Version 2.0
  6. # (the "License"); you may not use this file except in compliance with
  7. # the License. You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing, software
  12. # distributed under the License is distributed on an "AS IS" BASIS,
  13. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. # See the License for the specific language governing permissions and
  15. # limitations under the License.
  16. #
  17. # Set everything to be logged to the console
  18. log4j.rootCategory=WARN, console
  19. log4j.appender.console=org.apache.log4j.ConsoleAppender
  20. log4j.appender.console.target=System.err
  21. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  22. log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
  23. # Settings to quiet third party logs that are too verbose
  24. log4j.logger.org.spark-project.jetty=WARN
  25. log4j.logger.org.spark-project.jetty.util.component.AbstractLifeCycle=ERROR
  26. log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
  27. log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
  28. log4j.logger.org.apache.parquet=ERROR
  29. log4j.logger.parquet=ERROR
  30. # SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
  31. log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
  32. log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

在开发工程中,我们可以设置日志级别为WARN,即:

log4j.rootCategory=WARN, console

2、局部应用设置日志输出级别

针对SparkContext应用,Spark有专门的api设置日志级别,如下:

上述方法,只针对SparkContext相关的应用,而对Spark Streaming等应用无效果。

  1. import org.apache.log4j.{ Level, Logger }
  2. Logger.getLogger("org").setLevel(Level.WARN)
  3. Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
  4. Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.WARN)
  5. spark.sparkContext.setLogLevel("WARN")

3、Spark log4j.properties配置详解与实例(摘录于铭霏的记事本)

  1. ################################################################################
  2. #①配置根Logger,其语法为:
  3. #
  4. #log4j.rootLogger = [level],appenderName,appenderName2,...
  5. #level是日志记录的优先级,分为OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL
  6. ##Log4j建议只使用四个级别,优先级从低到高分别是DEBUG,INFO,WARN,ERROR
  7. #通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关
  8. #比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来
  9. #appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的
  10. ################################################################################
  11. ################################################################################
  12. #②配置日志信息输出目的地Appender,其语法为:
  13. #
  14. #log4j.appender.appenderName = fully.qualified.name.of.appender.class
  15. #log4j.appender.appenderName.optionN = valueN
  16. #
  17. #Log4j提供的appender有以下几种:
  18. #1)org.apache.log4j.ConsoleAppender(输出到控制台)
  19. #2)org.apache.log4j.FileAppender(输出到文件)
  20. #3)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  21. #4)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  22. #5)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  23. #
  24. #1)ConsoleAppender选项属性
  25. # -Threshold = DEBUG:指定日志消息的输出最低层次
  26. # -ImmediateFlush = TRUE:默认值是true,所有的消息都会被立即输出
  27. # -Target = System.err:默认值System.out,输出到控制台(err为红色,out为黑色)
  28. #
  29. #2)FileAppender选项属性
  30. # -Threshold = INFO:指定日志消息的输出最低层次
  31. # -ImmediateFlush = TRUE:默认值是true,所有的消息都会被立即输出
  32. # -File = C:\log4j.log:指定消息输出到C:\log4j.log文件
  33. # -Append = FALSE:默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容
  34. # -Encoding = UTF-8:可以指定文件编码格式
  35. #
  36. #3)DailyRollingFileAppender选项属性
  37. # -Threshold = WARN:指定日志消息的输出最低层次
  38. # -ImmediateFlush = TRUE:默认值是true,所有的消息都会被立即输出
  39. # -File = C:\log4j.log:指定消息输出到C:\log4j.log文件
  40. # -Append = FALSE:默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容
  41. # -DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。还可以按用以下参数:
  42. # '.'yyyy-MM:每月
  43. # '.'yyyy-ww:每周
  44. # '.'yyyy-MM-dd:每天
  45. # '.'yyyy-MM-dd-a:每天两次
  46. # '.'yyyy-MM-dd-HH:每小时
  47. # '.'yyyy-MM-dd-HH-mm:每分钟
  48. # -Encoding = UTF-8:可以指定文件编码格式
  49. #
  50. #4)RollingFileAppender选项属性
  51. # -Threshold = ERROR:指定日志消息的输出最低层次
  52. # -ImmediateFlush = TRUE:默认值是true,所有的消息都会被立即输出
  53. # -File = C:/log4j.log:指定消息输出到C:/log4j.log文件
  54. # -Append = FALSE:默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容
  55. # -MaxFileSize = 100KB:后缀可以是KB,MB,GB.在日志文件到达该大小时,将会自动滚动.如:log4j.log.1
  56. # -MaxBackupIndex = 2:指定可以产生的滚动文件的最大数
  57. # -Encoding = UTF-8:可以指定文件编码格式
  58. ################################################################################
  59. ################################################################################
  60. #③配置日志信息的格式(布局),其语法为:
  61. #
  62. #log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
  63. #log4j.appender.appenderName.layout.optionN = valueN
  64. #
  65. #Log4j提供的layout有以下几种:
  66. #5)org.apache.log4j.HTMLLayout(以HTML表格形式布局)
  67. #6)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  68. #7)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  69. #8)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
  70. #9)org.apache.log4j.xml.XMLLayout(以XML形式布局)
  71. #
  72. #5)HTMLLayout选项属性
  73. # -LocationInfo = TRUE:默认值false,输出java文件名称和行号
  74. # -Title=Struts Log Message:默认值 Log4J Log Messages
  75. #
  76. #6)PatternLayout选项属性
  77. # -ConversionPattern = %m%n:格式化指定的消息(参数意思下面有)
  78. #
  79. #9)XMLLayout选项属性
  80. # -LocationInfo = TRUE:默认值false,输出java文件名称和行号
  81. #
  82. #Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
  83. # %m 输出代码中指定的消息
  84. # %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  85. # %r 输出自应用启动到输出该log信息耗费的毫秒数
  86. # %c 输出所属的类目,通常就是所在类的全名
  87. # %t 输出产生该日志事件的线程名
  88. # %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
  89. # %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式
  90. # 如:%d{yyyy年MM月dd日 HH:mm:ss,SSS},输出类似:2012年01月05日 22:10:28,921
  91. # %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
  92. # 如:Testlog.main(TestLog.java:10)
  93. # %F 输出日志消息产生时所在的文件名称
  94. # %L 输出代码中的行号
  95. # %x 输出和当前线程相关联的NDC(嵌套诊断环境),像java servlets多客户多线程的应用中
  96. # %% 输出一个"%"字符
  97. #
  98. # 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
  99. # %5c: 输出category名称,最小宽度是5,category<5,默认的情况下右对齐
  100. # %-5c:输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格
  101. # %.5c:输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格
  102. # %20.30c:category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉
  103. ################################################################################
  104. ################################################################################
  105. #④指定特定包的输出特定的级别
  106. #log4j.logger.org.springframework=DEBUG
  107. ################################################################################
  108. #OFF,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB,ALL
  109. log4j.rootLogger =ALL,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB
  110. #输出到控制台
  111. log4j.appender.systemOut = org.apache.log4j.ConsoleAppender
  112. log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout
  113. log4j.appender.systemOut.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  114. log4j.appender.systemOut.Threshold = DEBUG
  115. log4j.appender.systemOut.ImmediateFlush = TRUE
  116. log4j.appender.systemOut.Target = System.out
  117. #输出到文件
  118. log4j.appender.logFile = org.apache.log4j.FileAppender
  119. log4j.appender.logFile.layout = org.apache.log4j.PatternLayout
  120. log4j.appender.logFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  121. log4j.appender.logFile.Threshold = DEBUG
  122. log4j.appender.logFile.ImmediateFlush = TRUE
  123. log4j.appender.logFile.Append = TRUE
  124. log4j.appender.logFile.File = ../Struts2/WebRoot/log/File/log4j_Struts.log
  125. log4j.appender.logFile.Encoding = UTF-8
  126. #按DatePattern输出到文件
  127. log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender
  128. log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout
  129. log4j.appender.logDailyFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  130. log4j.appender.logDailyFile.Threshold = DEBUG
  131. log4j.appender.logDailyFile.ImmediateFlush = TRUE
  132. log4j.appender.logDailyFile.Append = TRUE
  133. log4j.appender.logDailyFile.File = ../Struts2/WebRoot/log/DailyFile/log4j_Struts
  134. log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm'.log'
  135. log4j.appender.logDailyFile.Encoding = UTF-8
  136. #设定文件大小输出到文件
  137. log4j.appender.logRollingFile = org.apache.log4j.RollingFileAppender
  138. log4j.appender.logRollingFile.layout = org.apache.log4j.PatternLayout
  139. log4j.appender.logRollingFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  140. log4j.appender.logRollingFile.Threshold = DEBUG
  141. log4j.appender.logRollingFile.ImmediateFlush = TRUE
  142. log4j.appender.logRollingFile.Append = TRUE
  143. log4j.appender.logRollingFile.File = ../Struts2/WebRoot/log/RollingFile/log4j_Struts.log
  144. log4j.appender.logRollingFile.MaxFileSize = 1MB
  145. log4j.appender.logRollingFile.MaxBackupIndex = 10
  146. log4j.appender.logRollingFile.Encoding = UTF-8
  147. #用Email发送日志
  148. log4j.appender.logMail = org.apache.log4j.net.SMTPAppender
  149. log4j.appender.logMail.layout = org.apache.log4j.HTMLLayout
  150. log4j.appender.logMail.layout.LocationInfo = TRUE
  151. log4j.appender.logMail.layout.Title = Struts2 Mail LogFile
  152. log4j.appender.logMail.Threshold = DEBUG
  153. log4j.appender.logMail.SMTPDebug = FALSE
  154. log4j.appender.logMail.SMTPHost = SMTP.163.com
  155. log4j.appender.logMail.From = xly3000@163.com
  156. log4j.appender.logMail.To = xly3000@gmail.com
  157. #log4j.appender.logMail.Cc = xly3000@gmail.com
  158. #log4j.appender.logMail.Bcc = xly3000@gmail.com
  159. log4j.appender.logMail.SMTPUsername = xly3000
  160. log4j.appender.logMail.SMTPPassword = 1234567
  161. log4j.appender.logMail.Subject = Log4j Log Messages
  162. #log4j.appender.logMail.BufferSize = 1024
  163. #log4j.appender.logMail.SMTPAuth = TRUE
  164. #将日志登录到MySQL数据库
  165. log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender
  166. log4j.appender.logDB.layout = org.apache.log4j.PatternLayout
  167. log4j.appender.logDB.Driver = com.mysql.jdbc.Driver
  168. log4j.appender.logDB.URL = jdbc:mysql://127.0.0.1:3306/xly
  169. log4j.appender.logDB.User = root
  170. log4j.appender.logDB.Password = 123456
  171. log4j.appender.logDB.Sql = INSERT INTOT_log4j(project_name,create_date,level,category,file_name,thread_name,line,all_category,message)values('Struts2','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')

Spark日志,及设置日志输出级别的更多相关文章

  1. Mybatis 存在多个日志时设置日志

    mybatis默认使用log4j,当有self4j这个日志jar包存在时会无法打印sql,请移除或者在工程启动时显示设置mybatis使用的日志类 log4j.logger.org.apache.ib ...

  2. Spark:控制日志输出级别

    Spark:控制日志输出级别 终端修改 在pySpark终端可使用下面命令来改变日志级别 sc.setLogLevel("WARN") # 或者INFO等 修改日志设置文件 ** ...

  3. log4j日志输出级别高低

    Log4j是Apache的开源项目一个功能强大的日志组件,提供方便的日志记录.日志记录器(Logger)是日志处理的核心组件Log4j建议只使用四个级别,优先级从高到低分别是FATAL, ERROR. ...

  4. springboot设置日志级别时报错

    配置springboot日志,输出级别为info,运行时报错: Caused by: org.springframework.boot.context.properties.bind.BindExce ...

  5. spring boot项目下的application.properties中的logging.level设置日志级别

    日志级别 trace<debug<info<warn<error<fatal 默认级别为info,即默认打印info及其以上级别的日志,如下: logging.level ...

  6. 有效Log4j按指定级别定向输出日志到指定的输出文件地址配置Threshold,log4j中如何屏蔽父logger输出源rootlogger的additivity配置,log4j向多个文件记录日志

    log4j向多个文件记录日志 关键配置,指定想要的日志级别信息输出到指定的日志文件中: log4j.appender.errorLogger.Threshold=ERROR #扩展,可指定只在子类自己 ...

  7. SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出

    写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...

  8. Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console、file等。Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别。

    Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console.file等.Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别. ...

  9. scarpy设置日志打印级别和存储位置

    在settings.py中配置 日志级别设置 LOG_LEVEL = 'ERROR' # 当LOG_LEVEL设置为ERROR时,在进行日志打印时,只是打印ERROR级别的日志 日志存储设置 LOG_ ...

随机推荐

  1. Centos7无网络下安装mysql5.7——mysql-rpm安装

    本教程指将mysql安装到系统默认目录下,如想自定义修改目录,请在rpm安装时自行修改: rpm -ivh --prefix= /opt xxx.rpm #将xxx.rpm安装到/opt下 一.下载m ...

  2. Codefroces 1328E Tree Querie(dfs序)

    Codefroces 1328E Tree Querie 题目 给出一棵1为根,n个节点的树,每次询问\(k_i\) 个节点,问是否存在这样一条路径: 从根出发,且每个节点在这条路径上或者距离路径的距 ...

  3. mysql源码分析-启动过程

    mysql源码分析-启动过程 概要 # sql/mysqld.cc, 不包含psi的初始化过程 mysqld_main: // 加载my.cnf和my.cnf.d,还有命令行参数 if (load_d ...

  4. go语言环境搭建以及配置VSCode

    Go语言学习笔记(环境安装)-day01 Go语言运行环境安装 下载Go安装包 安装包地址 安装Go语言运行环境 ​ 直接在下载好的目录双击运行*.msi的可执行文件,下一步进行安装,安装的目录最好是 ...

  5. Laya 踩坑日记-BitmapFont 字体模糊

    基于bitmap 制作的字体,放到项目中,因为最终使用的是位图字体(所有的字全是一张图片),所以一旦出现压缩./放大等情况的时候, 字体就开始模糊了,暂时没有他好的办法解决

  6. PMP知识领域

    · 十大知识领域 整合-项目整合管理 识别.定义.组合.统一和协调个项目管理过程组的各种过程和活动而展开的活动与过程. 整合:统一.合并.沟通和简历联系:贯穿项目始终 七个过程组 一.制定项目章程(启 ...

  7. 相同的class的各位object互为友元(friend)

    相同的class的各位object互为友元(friend) 这句话是啥意思? 我们来看一段代码: 1 class complex{ 2 3 private: 4 5 int r,i; 6 public ...

  8. [翻译]Azure 网关迁移至 .NET Core 3.1 性能提升一倍

    原文:[Azure Active Directory's gateway is on .NET Core 3.1!] Azure Active Directory 的网关服务是一个反向代理,它为构成 ...

  9. CodeMonke少儿编程第1章 step与turn

    第1章 step与turn 目标 了解游戏舞台的各组成部分 掌握step和turn指令的用法 说起计算机,对于不了解它的人来说,也许会感到有些神秘,其实不然,它不过是能够接收指令并且按照指令执行的一种 ...

  10. SDUST数据结构 - chap6 树与二叉树

    判断题: 选择题: 函数题: 6-1 求二叉树高度: 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef char ...