Spark log4j日誌配置詳解(轉載)

1、spark job日誌介紹
    spark中提供了log4j的方式記錄日誌。能夠在$SPARK_HOME/conf/下,將 log4j.properties.template 文件copy爲 log4j.properties 來啓用log4j配置。但這個配置爲全局配置,不能單獨配置某個job的運行日誌。
    在Spark的conf目錄下,把log4j.properties.template修改成log4j.properties,原來的內容以下:(log4j的用法和配置,請參考另外一篇文檔)java

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

2、spark job獨立配置的log4j的方法
    如今咱們介紹spark (streaming) job獨立配置的log4j的方法,經過查看官方文檔,要爲應用主程序(即driver端)或執行程序使(即executor端)自定義log4j配置,須要兩步就完成了,下面具體說明。
    第一步:上傳自定義 log4j-driver.properties和log4j-executor.properties
    第二步:添加-Dlog4j的配置。使用 --conf參數。
        用於驅動程序:spark.driver.extraJavaOptions = -Dlog4j.configuration = <配置文件的位置>
        用於執行者:spark.executor.extraJavaOptions= -Dlog4j.configuration = <配置文件的位置>
        注意:driver端還可使用spark-submit的--driver-java-options參數去配置。
    方案一:使用  spark-submit的 --files 參數將自定義的配置文件上傳到應用程序的文件列表中。mysql

spark-submit  --class com.hm.spark.Application  --master yarn --deploy-mode cluster  --driver-cores 1 --driver-memory 1G  --num-executors 2 --executor-cores 1 --executor-memory 1G  --driver-java-options "-Dlog4j.configuration=log4j-driver.properties"  --conf spark.executor.extraJavaOptions="-Dlog4j.configuration=log4j-executor.properties"  --files /home/hadoop/spark-workspace/log4j-driver.properties,/home/hadoop/spark-workspace/log4j-executor.properties  /home/hadoop/spark-workspace/my-spark-etl-assembly-1.0-SNAPSHOT.jar

 注意,這裏我沒有使用spark.driver.extraJavaOptions參數去配置,而是使用spark-submit的--driver-java-options參數進行設置的。
    方案二:不使用  spark-submit的 --files 參數上傳文件,直接使用文件。spring

spark-submit  --class com.hm.spark.Application  --master yarn --deploy-mode cluster  --driver-cores 1 --driver-memory 1G  --num-executors 2 --executor-cores 1 --executor-memory 1G  --driver-java-options "-Dlog4j.configuration=file:/home/hadoop/spark-workspace/log4j-driver.properties "  --conf spark.executor.extraJavaOptions="-Dlog4j.configuration=file:/home/hadoop/spark-workspace/log4j-executor.properties"  /home/hadoop/spark-workspace/my-spark-etl-assembly-1.0-SNAPSHOT.jar

注意:若是使用文件,  file: 則應明確提供配置文件的,而且文件須要在全部節點上本地存在。sql

在shell腳本中寫的格式shell

#!/bin/bash base_path=/data/service/spark-workspace version=1.0-SNAPSHOT jar_name=spark-etl_2.11-${version}-assembly.jar class_name=com.spark.etl.Application # client or cluster deploy_mode=cluster cmd="spark-submit --class ${class_name} --master yarn --deploy-mode ${deploy_mode} --driver-cores 1 --driver-memory 2G --num-executors 4 --executor-cores 2 --executor-memory 4G --driver-java-options \"-Dlog4j.configuration=log4j-driver.properties\" --conf spark.executor.extraJavaOptions=\"-Dlog4j.configuration=log4j-executor.properties\" --files ${base_path}/log4j-executor.properties,${base_path}/log4j-driver.properties ${base_path}/${jar_name}" echo "${cmd}"

須要注意的是--conf 後的配置項不能用加雙引號,可是參數值必須用雙引號括起來,「\」是shell腳本的轉義符。本人遇到的問題,以前在--conf後的配置項添加了引號,以下數據庫

 --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j-executor.properties" 

這樣在不寫入shell腳本中,直接在命令行中輸入,是沒有問題的,executor中的日誌能夠收集,若是在shell腳本中這樣寫,那executor是收集不到日誌,由於該參數不起效果,經過我屢次測試,千萬注意,在寫入shell腳本中,--conf 後配置項千萬不能加雙引號。apache

3、spark job的日誌輸出到指定文件
    在測試spark計算時,將做業提交到yarn(模式–master yarn-cluster)上,想查看print到控制檯這是絕對不可能的,由於做業是提交到yarn的集羣上,因此去yarn集羣上看日誌是很麻煩的,但有特別想看下print的信息,方便調試或者別的目的
    在Spark的conf目錄下,把log4j.properties.template修改成log4j.properties。bash

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

  把log4j.rootCategory=INFO, console改成log4j.rootCategory=WARN, console便可抑制Spark把INFO級別的日誌打到控制檯上。若是要顯示全面的信息,則把INFO改成DEBUG。
    若是但願一方面把代碼中的println打印到控制檯,另外一方面又保留spark 自己輸出的日誌,能夠將它輸出到日誌文件中
    配置內容以下:多線程

# Set everything to be logged to the console log4j.rootCategory=INFO, console, FILE log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n # Set the default spark-shell log level to WARN. When running the spark-shell, the # log level for this class is used to overwrite the root logger's log level, so that
# the user can have different defaults for the shell and regular Spark apps. log4j.logger.org.apache.spark.repl.Main=WARN # Settings to quiet third party logs that are too verbose log4j.logger.org.spark_project.jetty=WARN log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO log4j.logger.org.apache.parquet=ERROR log4j.logger.parquet=ERROR # SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.Threshold=DEBUG log4j.appender.FILE.file=/home/hadoop/spark.log log4j.appender.logFile.Encoding = UTF-8 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%n # spark只對com.ha.spark下的程序進行日誌優先級DEBUG輸出,其它包遵循全局日誌級別INFO  log4j.logger.com.ha.spark=DEBUG

   上面的操做,spark的日誌一方面打印到控制檯,一方面寫入到/home/hadoop/spark.log中了,這是日誌的繼承特性,這樣有個弊端假設如今咱們把產品已經部署完成,設置好FileAppender和INFO,日誌就慢慢的在文件中記錄着。忽然有一天,咱們想要查看一下日誌文件了,可能會發現問題:日誌文件可能已經很是龐大了,打開很是緩慢,並且文件越大,作日誌的速度會愈來愈慢。因此咱們要使用RollingFileAppender或者DailyRollingFileAppender
    首先,RollingFileAppender也可以將日誌記錄到文件中,而且能夠當一個文件到達了指定大小後,把這個日誌文件備份並重開一個日誌文件。RollingFileAppender是繼承自FileAppender,因此FileAppender那些配置項仍然可以使用。使用RollingFileAppender雖然能夠將文件大小控制在必定的範圍內,可是仍是會形成一些問題:1,文件命名沒有規律,可能會形成某一段時間的日誌分散在兩個日誌文件中,2,從文件名中很難定位具體的日誌信息。在真實的產品中,咱們要監控日誌,每每須要定位到某個具體的時間段裏面的日誌信息,使用RollingFileAppender就很難作到。Log4J也想到了這點,提供了DailyRollingFileAppender。app

4、spark job的日誌和Yarn日誌進行聚合
    若是您須要spark的日誌文件放入YARN中,以便YARN能夠正確顯示並聚合它們,則 在log4j.properties日誌配置文件中設置 spark.yarn.app.container.log.dir 
    例如,  log4j.appender.File.file=${spark.yarn.app.container.log.dir}/spark-driver.log
    對於流式應用程序則還應該RollingFileAppender和 DailyRollingFileAppender設定文件大小輸出到文件, 將避免YARN的日誌目錄由大型日誌文件引發的磁盤溢出,而且可使用YARN的日誌程序訪問日誌。
    配置以下:

# Set everything to be logged to the console log4j.rootCategory=INFO, console, FILE log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n # Set the default spark-shell log level to WARN. When running the spark-shell, the # log level for this class is used to overwrite the root logger's log level, so that
# the user can have different defaults for the shell and regular Spark apps. log4j.logger.org.apache.spark.repl.Main=WARN # Settings to quiet third party logs that are too verbose log4j.logger.org.spark_project.jetty=WARN log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO log4j.logger.org.apache.parquet=ERROR log4j.logger.parquet=ERROR # SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppende log4j.appender.FILE.Threshold=DEBUG log4j.appender.File.file=${spark.yarn.app.container.log.dir}/spark-driver.log log4j.appender.FILE.DatePattern='.'yyyy-MM-dd log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%n # spark  只對com.ha.spark下的程序進行日誌優先級DEBUG輸出,其它包遵循全局日誌級別INFO   log4j.logger.com.ha.spark=DEBUG

   DailyRollingFileAppender是日誌記錄軟件包Log4J中的一個Appender,它可以按必定的頻度滾動日誌記錄文件。

    日誌文件爲: spark-driver.log-2010-01-01 , spark-driver.log-2010-01-02

    在DailyRollingFileAppender中能夠指定monthly(每個月)、weekly(每週)、daily(天天)、half-daily(每半天)、hourly(每小時)和minutely(每分鐘)六個頻度,這是經過爲 DatePattern選項賦予不一樣的值來完成的。DatePattern選項的有效值爲:

* ‘.’yyyy-MM,對應monthly(每個月)                   
* ‘.’yyyy-ww,對應weekly(每週)
* ‘.’yyyy-MM-dd,對應daily(天天)
* ‘.’yyyy-MM-dd-a,對應half-daily(每半天)
* ‘.’yyyy-MM-dd-HH,對應hourly(每小時)
* ‘.’yyyy-MM-dd-HH-mm,對應minutely(每分鐘)
    DatePattern中不用處理的文字要放到單引號(‘)中,如上面的(.)。
    DatePattern格式化以後的文本做爲文件名字的後綴。DailyRollingFileAppender不支持格式化以後的文本做爲文件名字的前綴。
    DailyRollingFileAppender在每個日誌事件(LoggingEvent)附加(append)以前檢查是否須要附加。也就是說若是在一個滾動區間中沒有任何日誌記錄,那麼這個區間的日誌記錄文件就不會造成。

5、spark log4j.properties配置詳解與實例(摘錄於銘霏的記事本)

################################################################################  #①配置根Logger,其語法爲:  #  #log4j.rootLogger = [level],appenderName,appenderName2,...  #level是日誌記錄的優先級,分爲OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL  ##Log4j建議只使用四個級別,優先級從低到高分別是DEBUG,INFO,WARN,ERROR  #經過在這裏定義的級別,您能夠控制到應用程序中相應級別的日誌信息的開關  #好比在這裏定義了INFO級別,則應用程序中全部DEBUG級別的日誌信息將不被打印出來  #appenderName就是指定日誌信息輸出到哪一個地方。可同時指定多個輸出目的  ################################################################################  ################################################################################  #②配置日誌信息輸出目的地Appender,其語法爲:  #  #log4j.appender.appenderName = fully.qualified.name.of.appender.class  #log4j.appender.appenderName.optionN = valueN  #  #Log4j提供的appender有如下幾種:  #1)org.apache.log4j.ConsoleAppender(輸出到控制檯)  #2)org.apache.log4j.FileAppender(輸出到文件)  #3)org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件)  #4)org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)  #5)org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)  #  #1)ConsoleAppender選項屬性  # -Threshold = DEBUG:指定日誌消息的輸出最低層次  # -ImmediateFlush = TRUE:默認值是true,全部的消息都會被當即輸出  # -Target = System.err:默認值System.out,輸出到控制檯(err爲紅色,out爲黑色)  #  #2)FileAppender選項屬性  # -Threshold = INFO:指定日誌消息的輸出最低層次  # -ImmediateFlush = TRUE:默認值是true,全部的消息都會被當即輸出  # -File = C:\log4j.log:指定消息輸出到C:\log4j.log文件  # -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容  # -Encoding = UTF-8:能夠指定文件編碼格式  #  #3)DailyRollingFileAppender選項屬性  # -Threshold = WARN:指定日誌消息的輸出最低層次  # -ImmediateFlush = TRUE:默認值是true,全部的消息都會被當即輸出  # -File = C:\log4j.log:指定消息輸出到C:\log4j.log文件  # -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容  # -DatePattern='.'yyyy-ww:每週滾動一次文件,即每週產生一個新的文件。還能夠按用如下參數:  #              '.'yyyy-MM:每個月  #              '.'yyyy-ww:每週  #              '.'yyyy-MM-dd:天天  #              '.'yyyy-MM-dd-a:天天兩次  #              '.'yyyy-MM-dd-HH:每小時  #              '.'yyyy-MM-dd-HH-mm:每分鐘  # -Encoding = UTF-8:能夠指定文件編碼格式  #  #4)RollingFileAppender選項屬性  # -Threshold = ERROR:指定日誌消息的輸出最低層次  # -ImmediateFlush = TRUE:默認值是true,全部的消息都會被當即輸出  # -File = C:/log4j.log:指定消息輸出到C:/log4j.log文件  # -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容  # -MaxFileSize = 100KB:後綴能夠是KB,MB,GB.在日誌文件到達該大小時,將會自動滾動.如:log4j.log.1  # -MaxBackupIndex = 2:指定能夠產生的滾動文件的最大數  # -Encoding = UTF-8:能夠指定文件編碼格式  ################################################################################  ################################################################################  #③配置日誌信息的格式(佈局),其語法爲:  #  #log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class  #log4j.appender.appenderName.layout.optionN = valueN  #  #Log4j提供的layout有如下幾種:  #5)org.apache.log4j.HTMLLayout(以HTML表格形式佈局)  #6)org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式)  #7)org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)  #8)org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)  #9)org.apache.log4j.xml.XMLLayout(以XML形式佈局)  #  #5)HTMLLayout選項屬性  # -LocationInfo = TRUE:默認值false,輸出java文件名稱和行號  # -Title=Struts Log Message:默認值 Log4J Log Messages  #  #6)PatternLayout選項屬性  # -ConversionPattern = %m%n:格式化指定的消息(參數意思下面有)  #  #9)XMLLayout選項屬性  # -LocationInfo = TRUE:默認值false,輸出java文件名稱和行號  #  #Log4J採用相似C語言中的printf函數的打印格式格式化日誌信息,打印參數以下:  # %m 輸出代碼中指定的消息  # %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL  # %r 輸出自應用啓動到輸出該log信息耗費的毫秒數  # %c 輸出所屬的類目,一般就是所在類的全名  # %t 輸出產生該日誌事件的線程名  # %n 輸出一個回車換行符,Windows平臺爲「\r\n」,Unix平臺爲「\n」  # %d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式  #    如:%d{yyyy年MM月dd日 HH:mm:ss,SSS},輸出相似:2012年01月05日 22:10:28,921  # %l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數  #    如:Testlog.main(TestLog.java:10)  # %F 輸出日誌消息產生時所在的文件名稱  # %L 輸出代碼中的行號  # %x 輸出和當前線程相關聯的NDC(嵌套診斷環境),像java servlets多客戶多線程的應用中  # %% 輸出一個"%"字符  #  # 能夠在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:  #  %5c: 輸出category名稱,最小寬度是5,category<5,默認的狀況下右對齊  #  %-5c:輸出category名稱,最小寬度是5,category<5"-"號指定左對齊,會有空格  #  %.5c:輸出category名稱,最大寬度是5,category>5,就會將左邊多出的字符截掉,<5不會有空格  #  %20.30c:category名稱<20補空格,而且右對齊,>30字符,就從左邊交遠銷出的字符截掉  ################################################################################  ################################################################################  #④指定特定包的輸出特定的級別  #log4j.logger.org.springframework=DEBUG  ################################################################################  #OFF,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB,ALL  log4j.rootLogger =ALL,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB  #輸出到控制檯  log4j.appender.systemOut = org.apache.log4j.ConsoleAppender  log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout  log4j.appender.systemOut.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n  log4j.appender.systemOut.Threshold = DEBUG  log4j.appender.systemOut.ImmediateFlush = TRUE  log4j.appender.systemOut.Target = System.out  #輸出到文件  log4j.appender.logFile = org.apache.log4j.FileAppender  log4j.appender.logFile.layout = org.apache.log4j.PatternLayout  log4j.appender.logFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n  log4j.appender.logFile.Threshold = DEBUG  log4j.appender.logFile.ImmediateFlush = TRUE  log4j.appender.logFile.Append = TRUE  log4j.appender.logFile.File = ../Struts2/WebRoot/log/File/log4j_Struts.log  log4j.appender.logFile.Encoding = UTF-8  #按DatePattern輸出到文件  log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender  log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout  log4j.appender.logDailyFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n  log4j.appender.logDailyFile.Threshold = DEBUG  log4j.appender.logDailyFile.ImmediateFlush = TRUE  log4j.appender.logDailyFile.Append = TRUE  log4j.appender.logDailyFile.File = ../Struts2/WebRoot/log/DailyFile/log4j_Struts  log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm'.log'  log4j.appender.logDailyFile.Encoding = UTF-8  #設定文件大小輸出到文件  log4j.appender.logRollingFile = org.apache.log4j.RollingFileAppender  log4j.appender.logRollingFile.layout = org.apache.log4j.PatternLayout  log4j.appender.logRollingFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n  log4j.appender.logRollingFile.Threshold = DEBUG  log4j.appender.logRollingFile.ImmediateFlush = TRUE  log4j.appender.logRollingFile.Append = TRUE  log4j.appender.logRollingFile.File = ../Struts2/WebRoot/log/RollingFile/log4j_Struts.log  log4j.appender.logRollingFile.MaxFileSize = 1MB  log4j.appender.logRollingFile.MaxBackupIndex = 10  log4j.appender.logRollingFile.Encoding = UTF-8  #用Email發送日誌  log4j.appender.logMail = org.apache.log4j.net.SMTPAppender  log4j.appender.logMail.layout = org.apache.log4j.HTMLLayout  log4j.appender.logMail.layout.LocationInfo = TRUE  log4j.appender.logMail.layout.Title = Struts2 Mail LogFile  log4j.appender.logMail.Threshold = DEBUG  log4j.appender.logMail.SMTPDebug = FALSE  log4j.appender.logMail.SMTPHost = SMTP.163.com  log4j.appender.logMail.From = xly3000@163.com  log4j.appender.logMail.To = xly3000@gmail.com  #log4j.appender.logMail.Cc = xly3000@gmail.com  #log4j.appender.logMail.Bcc = xly3000@gmail.com  log4j.appender.logMail.SMTPUsername = xly3000  log4j.appender.logMail.SMTPPassword = 1234567  log4j.appender.logMail.Subject = Log4j Log Messages  #log4j.appender.logMail.BufferSize = 1024  #log4j.appender.logMail.SMTPAuth = TRUE  #將日誌登陸到MySQL數據庫  log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender  log4j.appender.logDB.layout = org.apache.log4j.PatternLayout  log4j.appender.logDB.Driver = com.mysql.jdbc.Driver  log4j.appender.logDB.URL = jdbc:mysql://127.0.0.1:3306/xly 
log4j.appender.logDB.User = root  log4j.appender.logDB.Password = 123456  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')
相關文章
相關標籤/搜索