精华内容
下载资源
问答
  • tomcat日志解析

    2016-01-31 19:38:49
    tomcat的log文件夹下有以下几种日志: 1、catalina.YYYY-MM-DD.log catalina引擎输出的日志;catalina是tomcat的servlet引擎,(其他两大组件是处理html、css、js等静态文件的web容器和处理jsp文件的jasper引擎)...

    tomcat的log文件夹下有以下几种日志:

    1、catalina.YYYY-MM-DD.log

    catalina引擎输出的日志;catalina是tomcat的servlet引擎,(其他两大组件是处理html、css、js等静态文件的web容器和处理jsp文件的jasper引擎);catalina负责处理tomcat接入的请求,调度相应的servlet处理。catalina.YYYY-MM-DD.log文件中,主要是这部分业务逻辑的输出日志,在一般情况下,不需要关注

    2、host-manager.YYYY-MM-DD.log

    tomcat自带的host-manager应用的日志输出文件;如果在部署tomcat的时候,把webapps下面的host-manager删除了,则该日志文件为空。

    3、localhost.YYYY-MM-DD.log

    tomcat内部代码输出的日志文件;例如jasper引擎在解析jsp文件异常时输出的错误日志,就在该文件中。

    4、manager.YYYY-MM-DD.log

    tomcat自带的manager应用的日志输出文件;如果在部署tomcat的时候,把webapps下面的manager删除了,则该日志文件中为空。

    5、catalina.out

    所有输出到控制台的日志,被重定向至catalina.out;即程序中的System.out和System.err输出,均可以在这个日志文件中查询到。需要注意的是,该文件不支持rotate,会不断的膨胀,所以在应用程序中,尽量不要输出日志到控制台,统一输出到对应的日志文件中。如果有必要,可以使用cronolog对该日志文件进行分割;

    6、localhost_access_log.YYYY-MM-DD.txt

    访问日志,所有tomcat处理的请求和响应均在该文件中记录。

    tomcat各种日志如何配置:

    上述的1、2、3、4四种日志,在${tomcat_home}/conf/logging.properties文件中进行配置:

    级别有OFF》server》warning》info》config》fine》finer》finest》ALL


    catalina.out在catalina.sh中进行配置:

    在启动脚本中,把所有控制台的输出重定向到了catalina.out文件中;可以修改脚本,把日志文件输出到别的路径


    localhost_access_log日志在server.xml中进行配置:

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>

    server.xml中该日志的配置是被注释了的,如果需要输出访问日志,可以取消这部分配置的注释。其中directory是日志输出的文件路径,以tomcat安装路径作为当前路径;pattern表示日志的格式,common是tomcat提供的一个标准设置格式。其具体的表达式为 %h %l %u %t “%r" %s %b,我们也可以根据需要,配置自己的pattern(直接把common替换为具体的格式表达式即可)。该日志支持的格式化参数如下。一般可以对tomcat的访问日志做日志分析,做相关的数据统计。

        * %a - Remote IP address   
        * %A - Local IP address
        * %b - Bytes sent, excluding HTTP headers, or '-' if zero
        * %B - Bytes sent, excluding HTTP headers
        * %h - Remote host name (or IP address if resolveHosts is false)   
        * %H - Request protocol
        * %l - Remote logical username from identd (always returns '-')
        * %m - Request method (GET, POST, etc.)
        * %p - Local port on which this request was received
        * %q - Query string (prepended with a '?' if it exists)
        * %r - First line of the request (method and request URI)
        * %s - HTTP status code of the response
        * %S - User session ID
        * %t - Date and time, in Common Log Format
        * %u - Remote user that was authenticated (if any), else '-'
        * %U - Requested URL path
        * %v - Local server name
        * %D - Time taken to process the request, in millis
        * %T - Time taken to process the request, in seconds

    展开全文
  • 之前分享过博客大数据离线web网站日志分析,好多大数据学习爱好者,想要拿到测试数据,可以来这里下载咯,每次发邮件挺麻烦滴~ 原博客地址:https://blog.csdn.net/MrZhangBaby/article/details/87360470 如果你...
  • 本文试图实现的需求场景为:以学习Spark知识点为目的,编写Scala利用Spark解析800M的tomcat日志文件,打印一段时间内ERROR级别记录的前10行,统计每分钟的日志记录数,并将统计结果存入mysql数据库中。之前曾用JAVA...

    0818b9ca8b590ca3270a3433284dd417.png

    本文试图实现的需求场景为:以学习Spark知识点为目的,编写Scala利用Spark解析800M的tomcat日志文件,打印一段时间内ERROR级别记录的前10行,统计每分钟的日志记录数,并将统计结果存入mysql数据库中。之前曾用JAVA写过一次同样的处理逻辑,但在学习了Scala之后,真的感觉在计算方面Scala要比JAVA方便的多。没有学习Scala语言的同学速度速度了啊……

    技术要点

    将日志文件写入HDFS中,相对路径PATH为“nova.log”

    注意JAVA堆栈异常日志的处理

    将解析后的异常日志全部存到SparkSQL中或Hive数据仓库中

    通过编写SQL查询一段时间内ERROR级别记录的前10行

    统计每分钟的日志记录数,并将统计结果存入mysql数据库中,便于上层应用直接使用计算结果

    解析前后对比

    解析前:

    0818b9ca8b590ca3270a3433284dd417.png

    解析后:

    0818b9ca8b590ca3270a3433284dd417.png

    解析代码

    LoggerApp.scala:

    import java.text.SimpleDateFormat

    import java.util.Date

    import org.apache.spark.SparkConf

    import org.apache.spark.SparkContext

    import org.apache.spark.rdd.RDD

    import org.apache.spark.rdd.RDD.rddToPairRDDFunctions

    import org.apache.spark.sql.Row

    import org.apache.spark.sql.SQLContext

    import org.apache.spark.sql.hive.HiveContext

    import org.apache.spark.sql.types.StringType

    import org.apache.spark.sql.types.StructField

    import org.apache.spark.sql.types.StructType

    import org.apache.spark.sql.types.TimestampType

    /**

    * 日志解析

    */

    object LoggerApp {

    def main(args: Array[String]): Unit = {

    println("")

    val reg = "^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}.\\d{3}) (\\[.*\\]) (.*) (.*) - ([\\s\\S]*)$"

    val path = "nova.log"

    val sc = new SparkContext(new SparkConf().setAppName("日志解析"))

    val textRDD = sc.textFile(path)

    /**

    * 处理一条日志包括多行的情况

    */

    var key = ""

    val formatRDD = textRDD.map { x =>

    if (x.matches(reg)) {

    key = x

    Pair.apply(key, "")

    } else {

    Pair.apply(key, x)

    }

    }.reduceByKey((a, b) => { a + "\n" + b }).map(x => x._1 + x._2)

    /**

    * 将字符串转换为Logger

    */

    val loggerRDD: RDD[Logger] = formatRDD.map { x =>

    {

    val reg.r(time, thread, level, logger, msg) = x //通过正则取值

    val log = new Logger(formatDate(time), thread, level, logger, msg)

    log

    }

    }.cache()

    /**

    * TODO 通过类的反射机制来定义数据库Scheme,但在scala语言中不知道为啥就是不成功,此处浪费了许久留着以后研究吧

    */

    /*val sqlc = new SQLContext(sc)

    sqlc.createDataFrame(loggerRDD, classOf[Logger]).registerTempTable("logger")*/

    /**

    * 定义数据库Scheme

    */

    val schemaString = "time thread level logger msg"

    val schema =

    StructType(

    schemaString.split(" ").map(fieldName =>

    if ("time".equals(fieldName))

    StructField(fieldName, TimestampType, true)

    else

    StructField(fieldName, StringType, true)))

    /**

    * 将Logger转换为Row

    */

    val rowRDD = loggerRDD.map { log =>

    Row(

    formatDate(log.time),

    log.thread,

    log.level,

    log.logger,

    log.msg)

    }

    /**

    * 利用SQL进行查询过滤

    */

    // val sqlc = bySQLContext(sc, rowRDD, schema);

    val sqlc = byHiveContext(sc, rowRDD, schema);

    val df = sqlc.sql("select * from logger where level='ERROR' and time between '2016-03-21 11:00:00' and '2016-03-21 12:00:00' order by time")

    val errLogRDD = df.map { x =>

    new Logger(

    formatDate(x.getTimestamp(0)),

    x.getString(1),

    x.getString(2),

    x.getString(3),

    x.getString(4))

    }

    for (log

    println("time:" + formatDateToStr(log.time))

    println("thread:" + log.thread)

    println("level:" + log.level)

    println("logger:" + log.logger)

    println("msg:" + log.msg)

    }

    println("")

    }

    /**

    * 创建临时表

    */

    def bySQLContext(sc: SparkContext, rowRDD: RDD[Row], schema: StructType): SQLContext = {

    val sqlc = new SQLContext(sc)

    sqlc.createDataFrame(rowRDD, schema).registerTempTable("logger")

    sqlc

    }

    /**

    * 创建永久表,需要提前搭建好Spark与Hive的集成环境

    */

    def byHiveContext(sc: SparkContext, rowRDD: RDD[Row], schema: StructType): SQLContext = {

    val sqlc = new HiveContext(sc)

    sqlc.sql("drop table if exists logger")

    sqlc.sql("CREATE TABLE IF NOT EXISTS logger (time TIMESTAMP, thread STRING, level STRING, logger STRING, msg STRING)")

    sqlc.createDataFrame(rowRDD, schema).write.mode("overwrite").saveAsTable("logger")

    sqlc

    }

    def formatDate(str: String): Date = {

    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(str)

    }

    def formatDate(timestamp: java.sql.Timestamp): Date = {

    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(timestamp.toString())

    }

    def formatDate(date: Date): java.sql.Timestamp = {

    new java.sql.Timestamp(date.getTime)

    }

    def formatDateToStr(date: Date): String = {

    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date)

    }

    }

    Logger.scala:

    import java.util.Date

    class Logger extends Serializable {

    var time: Date = null

    var thread: String = ""

    var level: String = ""

    var logger: String = ""

    var msg: String = ""

    def this(time: Date, thread: String, level: String, logger: String, msg: String) {

    this()

    this.time = time;

    this.thread = thread;

    this.level = level;

    this.logger = logger;

    this.msg = msg;

    }

    }

    统计并写入Mysql

    LoggerMysqlApp.scala:

    import org.apache.spark.SparkContext

    import org.apache.spark.SparkConf

    import org.apache.spark.sql.hive.HiveContext

    import org.apache.spark.sql.SQLContext

    import java.util.Date

    import java.text.SimpleDateFormat

    import org.apache.spark.sql.types.StringType

    import org.apache.spark.sql.types.StructType

    import org.apache.spark.sql.types.StructField

    import org.apache.spark.sql.types.IntegerType

    import org.apache.spark.sql.Row

    import java.util.Properties

    object LoggerMysqlApp {

    def main(args: Array[String]): Unit = {

    val sc = new SparkContext(new SparkConf().setAppName("输出写入Mysql"))

    /**

    * 从hive中加载数据

    */

    val hivec = new HiveContext(sc)

    val df = hivec.sql("select * from logger")

    val loggerRDD = df.rdd.map { x =>

    new Logger(

    LoggerApp.formatDate(x.getTimestamp(0)),

    x.getString(1),

    x.getString(2),

    x.getString(3),

    x.getString(4))

    }

    val resultRDD = loggerRDD.map { logger =>

    Pair(formatDateToStr(logger.time), 1)

    }.reduceByKey((a, b) =>

    { a + b }).map(f =>

    Row(f._1, f._2)).sortBy(f => f.getInt(1), false, 2)

    for (r

    println(r.getString(0) + ":" + r.getInt(1))

    }

    /**

    * 定义数据库Scheme

    */

    val schemaString = "time count"

    val schema =

    StructType(

    schemaString.split(" ").map(fieldName =>

    if ("time".equals(fieldName))

    StructField(fieldName, StringType, true)

    else

    StructField(fieldName, IntegerType, true)))

    /**

    * TODO计算每分钟日志的个数

    */

    val connectionProperties = new Properties()

    connectionProperties.setProperty("user", "root")

    connectionProperties.setProperty("password", ".")

    new SQLContext(sc).createDataFrame(resultRDD, schema).write.jdbc(

    "jdbc:mysql://192.168.136.128:3306/logger",

    "logger",

    connectionProperties);

    }

    def formatDateToStr(date: Date): String = {

    new SimpleDateFormat("yyyy-MM-dd HH:mm").format(date)

    }

    }

    展开全文
  • 1.Tomcat日志格式: localhost_access_log.txt 192.168.88.1 - - [30/Jul/2017:12:53:43 +0800] "GET /MyDemoWeb/ HTTP/1.1" 200 259 192.168.88.1 - - [30/Jul/2017:12:53:43 +0800] "GET /MyDemoWeb/head.jsp ...

    1.Tomcat日志格式:

    localhost_access_log.txt

    192.168.88.1 - - [30/Jul/2017:12:53:43 +0800] "GET /MyDemoWeb/ HTTP/1.1" 200 259
    192.168.88.1 - - [30/Jul/2017:12:53:43 +0800] "GET /MyDemoWeb/head.jsp HTTP/1.1" 200 713
    192.168.88.1 - - [30/Jul/2017:12:53:43 +0800] "GET /MyDemoWeb/body.jsp HTTP/1.1" 200 240
    192.168.88.1 - - [30/Jul/2017:12:54:37 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:38 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:38 +0800] "GET /MyDemoWeb/java.jsp HTTP/1.1" 200 240
    192.168.88.1 - - [30/Jul/2017:12:54:40 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:40 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:41 +0800] "GET /MyDemoWeb/mysql.jsp HTTP/1.1" 200 241
    192.168.88.1 - - [30/Jul/2017:12:54:41 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:42 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
    192.168.88.1 - - [30/Jul/2017:12:54:42 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:52 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:52 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:53 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:54 +0800] "GET /MyDemoWeb/mysql.jsp HTTP/1.1" 200 241
    192.168.88.1 - - [30/Jul/2017:12:54:54 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:54 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:56 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
    192.168.88.1 - - [30/Jul/2017:12:54:56 +0800] "GET /MyDemoWeb/java.jsp HTTP/1.1" 200 240
    192.168.88.1 - - [30/Jul/2017:12:54:57 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:57 +0800] "GET /MyDemoWeb/java.jsp HTTP/1.1" 200 240
    192.168.88.1 - - [30/Jul/2017:12:54:58 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:58 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:59 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:54:59 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:55:00 +0800] "GET /MyDemoWeb/mysql.jsp HTTP/1.1" 200 241
    192.168.88.1 - - [30/Jul/2017:12:55:00 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
    192.168.88.1 - - [30/Jul/2017:12:55:02 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
    192.168.88.1 - - [30/Jul/2017:12:55:02 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    

    2.需求:

    找到访问量最高的两个网页

    3.分析:

    • 第一步:对网页的访问量求和 和WordCount类似
    • 第二步:排序,降序

    4.编写代码:

    (1)添加依赖:

    pom.xml

     <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_2.11</artifactId>
                <version>2.1.0</version>
            </dependency>
    
    (2)MyTomcatLogCount.scala
    package day1208
    
    import org.apache.spark.SparkContext
    import org.apache.spark.SparkConf
    
    /**
     * 解析Tomcat日志
     * 192.168.88.1 - - [30/Jul/2017:12:54:41 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    		192.168.88.1 - - [30/Jul/2017:12:54:42 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
    
    		需求:
    		找到访问量最高的两个网页
    
    		第一步:对网页的访问量求和   和WordCount类似
    		第二步:排序,降序
     *
     *
     */
    
    object MyTomcatLogCount {
    
      def main(args: Array[String]): Unit = {
    
        val conf = new SparkConf().setMaster("local").setAppName("My Tomcat Log Count")
        val sc = new SparkContext(conf)
    
        /**
         * 读入日志,解析,找到访问jsp网页
         * 192.168.88.1 - - [30/Jul/2017:12:54:42 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
         */
    
        val rdd1 = sc.textFile("/users/macbook/TestInfo/localhost_access_log.txt")
          .map(
            /**
             * 找到网页名字
             *
             * 并计数
             *
             * line 代表读进来的每一行数据
             */
    
            line => {
              //解析字符串,找到jsp名字
              //得到两个双引号之间的东西
              val index1 = line.indexOf("\"")
              val index2 = line.lastIndexOf("\"")
              val line1 = line.substring(index1+1, index2) // GET /MyDemoWeb/web.jsp HTTP/1.1
    
              //得到两个空格之间的东西
              val index3 = line1.indexOf(" ")
              val index4 = line1.lastIndexOf(" ")
              val line2 = line1.substring(index3+1, index4) // /MyDemoWeb/web.jsp
    
              //得到jsp的名字
              val jspName = line2.substring(line2.lastIndexOf("/")+1)
    
              (jspName,1)
            }
          )
    
        /**
         * 按照jsp的名字 进行聚合操作
         */
    
        val rdd2 = rdd1.reduceByKey(_+_)//得到每个jsp的访问量
    
        //使用value排序
        val rdd3 = rdd2.sortBy(_._2,false)
    
        //取出访问量最高的两个网页
        rdd3.take(2).foreach(println)
    
        sc.stop()
    
        //销售  :  勇气输出岗
        //技术 : 头脑
      }
    
    }
    
    

    5.运行结果:

    运行结果

    展开全文
  • Tomcat配置解析

    2019-09-27 20:09:09
    Tomcat文件配置 tomcat解压后目录 bin:可执行文件(startup.bat ...log:日志文件(记录出错等信息) temp:临时文件 webapps:可执行的项目(将我们开发的项目 放入该目录) work:存放由jsp翻译成的j...

     

    Tomcat文件配置

     

    tomcat解压后目录

     

    bin:可执行文件(startup.bat shutdown.bat)

    conf:配置文件(server.xml)

    lib:tomcat依赖的jar文件

    log:日志文件(记录出错等信息)

    temp:临时文件

    webapps:可执行的项目(将我们开发的项目 放入该目录)

    work:存放由jsp翻译成的java,以及编辑 成的lass文件(jsp -> Java -> class)

     

    配置tomcat

     

    然后来测试下:

     

    最后显示Server startup in xxx ms 显示开启成功

    双击bin/startup.bat启动tomcat,常见错误:可能与其他服务的端口号冲突。tomcat端口默认8080 (此端口号较为常见,容易冲突), 建议修改此端口(8888)

     

    修改端口号

    打开conf/server.xml

    <Connector part="端口号" protocol = xxxx...

     

    开启服务后访问解析

    startup.bat开启后,默认回访问webapps/examples/WEB-INF下的web.xml文件中的

    <welcome-file-list>

     

    里面依次访问index文件,就查找到了index.html文件,可以设置默认访问文件,必须要有其中一个文件,

    否则会报404状态码,下面先说下状态码

    状态码

    200:一切正常

    404:资源存在

    403:权限不足(如果访问a目录,但是a目录设置不可见)

    300/301:页面重定向

    500:服务器内部错误(代码有误)

    其他编码:积累

     

    文件可以不放在webapps,但说需要配置虚拟路径

    conf/server.xml文件中

    <Host name=xxx中

     

    name="locaalhost" 就是根目录下。appBase="webapps"中

    那么如何修改路径呢

    • 第一种方式(需要重启tomcat)

    docBase:实际路径

    path:虚拟路径(绝对路径、相对路径) 可以写绝对路径也可以写相对路径

     

    path相当于docBase绝对路径

    • 第二种方式(不需要重启tomcat)

      在conf/Catalina/localhost中创建。项目名.xml 文件

      上面代码放进去。就可以了

      这种方式不需要重启tomcat

    • 注意(可以把项目明改成ROOT.xml),这样可以直接变成默认项目,但是不建议使用

     

    虚拟主机

    当我们要用www.test.com访问默认主机的时候

    我们还是要修改server.xml

     

    新建一个Host 如上图

    然后 打开电脑C:\Windows\system32\drivers\etc\hosts文件下

    添加 127.0.0.1 www.test.com 保存 如下图:

     

    还有一步 ,要将引擎默认地址修改

     

    因为,浏览器默认端口80的,所有server中修改端口改成80,就能成功修改

    完成,启动成功,就不截图了

    转载于:https://www.cnblogs.com/MrChen-/p/11168747.html

    展开全文
  • Tomcat目录解析

    2019-09-15 14:06:01
    日志文件 temp 临时文件 webapps 创建的web应用程序 work 存放运行时数据 如何启动Tomcat? 启动文件:bin\startup.bat文件 Tomcat已启动就黑框无法启动,怎么办? 如果启动时出现黑框一闪而过,则说明...
  • 最近协助项目组部署 Tomcat 时遇到一种情况:同一 Tomcat 下多 war 包部署时,有一个简单的应用无法启动,所有日志渠道中都没有关于它异常信息,catalina 日志中只轻描淡写地说它部署失败了。在该应用的类路径下放置...
  • 本文试图实现的需求场景为:以学习Spark知识点为目的,编写Scala利用Spark解析800M的tomcat日志文件,打印一段时间内ERROR级别记录的前10行,统计每分钟的日志记录数,并将统计结果存入mysql数据库中。之前曾用JAVA...
  • 本文试图实现的需求场景为:以学习Spark知识点为目的,编写Scala利用Spark解析800M的tomcat日志文件,打印一段时间内ERROR级别记录的前10行,统计每分钟的日志记录数,并将统计结果存入mysql数据库中。之前曾用JAVA...
  • 快点关注我们吧随着每天业务的增长,Tomcat 的catalina.out日志 变得越来越大,占用磁盘空间不说。要查看某个时候的日志的时候,庞大的日志让你顿时无从下手,所以日志的切割的变得刻不容缓。而且,切割后的日志,还...
  • 1.Tomcat安装目录解析: ·/bin:有两个用于启动tomcat的脚本程序 ·/conf:server.xml(Tomcat的配置文件,例如端口号等)、tomcat-...·/lib:jar包 ·/logs:存放Tomcat日志文件 ·/temp:存放Tomcat运行时候...
  • 解析tomcat的log日志文件,用于统计PV,UV SimpleDateFormat format = new SimpleDateFormat(  "yyyy-MM-dd");  Date date = new Date();  List list = new ArrayList();  list = cou
  • 本文试图实现的需求场景为:以学习Spark知识点为目的,编写Scala利用Spark解析800M的tomcat日志文件,打印一段时间内ERROR级别记录的前10行,统计每分钟的日志记录数,并将统计结果存入mysql数据库中。之前曾用JAVA...
  • 1、Tomcat介绍 Tomcat是Apache软件基金会(Apache Software ... java程序写的网站用tomcat+jdk来解析、运行 tomcat是一个中间件,用来运行java语言写的网站,真正起作用的,解析java脚本的是jdk jdk(java devel...
  • 日志解析器 一个简单的Java库,用于将各种已知的日志文件格式解析为强类型特定于格式的Java对象。 数据进入强类型对象后,便可以更轻松地对大文件进行分析。 当前支持的格式为: Amazon AWS ELB日志 Adobe ...
  • 最近协助项目组部署 Tomcat 时遇到一种情况:同一 Tomcat 下多 war 包部署时,有一个简单的应用无法启动,所有日志渠道中都没有关于它异常信息,catalina 日志中只轻描淡写地说它部署失败了。在该应用的类路径下放置...
  • 今天准备解析tomcat日志,发现tomcat日志里面的时间格式为:24/Jun/2015:09:22:09 +0800,试着用SimpleDateFormat解析,一直报错,后来才发现+0800时区的问题。 SimpleDateFormat formatter = new SimpleDateFormat...
  • Tomcat 源码过程中,控制台日志打印的都是 INFO 级别的日志,于是就想修改下日志级别,打印 Digester 类的 DEBUG 级别的日志,便于观察 Digester 类解析 server.xml 的流程,顺便跟踪了一下 Tomcat 使用日志的流程,...
  • Tomcat源码解析(6)

    2017-08-04 14:02:53
     在org.apache.catalina.logger包下,Tomcat提供几种不同类型的日志记录器。  与上一节的程序相比,只是SimpleContext和Bootstrap类有变化。 Logger接口  提供了一些log()方法来写日志。  接受一个日志
  • ELK详解tomcat日志

    2019-04-20 19:01:53
    实验环境 192.168.170.8 node1 kibana 192.168.170.9 node2 els 192.168.170.10 node3 logstash1 192.168.170.11 node4 redis 192.168.170.12 node5 logstash2 ...保证所有主机的主机名都能被解析,同时...
  • 新版tomcat无法解析web.xml问题

    千次阅读 2017-05-11 18:42:30
    错误日志:  java.io.FileNotFoundException: Could not resolve XML resource [null] with public ID [null], system ID [classes/casFilter.xml] and base URI [file:/home/sdkManager/apache-tomcat-8.5.11/...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 259
精华内容 103
关键字:

tomcat日志解析