入门索引

resin作为一款application server,对jsp与servlet提供了良好的支持,自身采接用的java开发,与tomcat相比,各有优劣(resin vs tomcat).对日志支持,resin旗下有自己的一个log系统,与log4j相比有过之无不及

初始环境搭建

环境搭建(参照中的hessianhessian的debug日志),resin版本4.0.52,jdk1.7,使用eclipse插件开发.

环境搭建完成,进行测试,log日志的配置大体区分显式与隐士,显示诸如log4j中的运用api显示调用,还有像resin这种通过配置隐式设置(这种区分只是方便自己理解)

初始log案例

web环境采用原始的servlet.新建web项目(空的web.xml)

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>stu</groupId><artifactId>stu</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>resin</artifactId><packaging>war</packaging><dependencies><!--servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><!--客户端测试--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version></dependency></dependencies>
</project>

servlet使用注解,故需要javax.servlet,使用postman测试,httpclient可注释掉

servlet

package log;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/log.do")
public class LogTestServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("call get");resp.getWriter().write("hello");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("call post");doGet(req, resp);}
}

get访问http://localhost:8080/resin/log.do

默认打印,控制台

[17-08-08 20:19:01.148] {resin-16} WebApp[production/webapp/default/resin] active

log/access.log日志记录

0:0:0:0:0:0:0:1 - - [08/Aug/2017:20:19:01 +0800] "GET /resin/log.do HTTP/1.1" 200 5 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36"

结果解释

access.log的内容在conf/cluster-default.xml配置

 <access-log path="log/access.log"format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'rollover-period="1W" />

 path( resin path)

format具体参数的意义(resin log)-<access-log>


       上面漏掉了两个(accesslog)

%l -Not used. Recognized but always results in "-"

%t-time

因为使用的浏览器访问本机,所以%h-访问的ip是0:0:0:0:0:0:0:1,没有的值以''-"代替

          rollover-period is used to specify the time period, and can be in days (15D), weeks (2W), months (1M), or hours (1h).(设置归档日志的周期)

 acccess-log 参数

其中有四个重要的参数,archive-format(如何归档,如压缩成zip),rollover-priod(周期),rollover-size(大小限制).rollover-count(日期限制)决定对日期进行归档

             初始控制台打印内容由conf/resin.xml控制

  <!-- Logging configuration for the JDK logging API --><log-handler format=" {${thread}} ${log.message}" level="all" name="" path="stdout:" timestamp="[%y-%m-%d %H:%M:%S.%s]"/><!-- - Alternative pseudo-TTCC log format-- <log-handler name="" level="all" path="stdout:"-           timestamp="%y-%m-%d %H:%M:%S.%s"-           format=" [${thread}] ${log.level} ${log.shortName} - ${log.message}"/>--><!--- level='info' for production- 'fine' or 'finer' for development and troubleshooting--><logger level="${log_level?:'info'}" name=""/><logger level="config" name="com.caucho.java"/><logger level="config" name="com.caucho.loader"/>

logger是log-handler的具体解释,此处的两个logger主要用于启动时参数的配置,get第一次访问出现上述打印日志

具体参数解释(resin log hander)-<log-handler>

format

           level

name

timesamp-时间格式,默认出现在行首,name根据包名来控制

注:conf下面几个配置文件resin.xml继承cluster-default.xml(集群配置),也就是resin配置的会覆盖cluster-default.xml的相关配置

resin log配置初窥

resin log标签(标签参考列表)

resin log主要通过一些标签完成log的基本配置

log--log format string,The format for log tags is used to specify a format string for each log message. format recognizes EL-expressions. The EL variable log is a com.caucho.log.ELFormatter.ELFormatterLogRecordobject.(个人理解log相对独立,作为一个log detail 描述性结构而存在,log相当于log-handler+logger)

logger--主要配置 JDK logging API, logger用于指定需要log的包及level(logger对log-handler的进一步解释)

child of <resin>,<server>,<host-default>,<host>,<web-app-default>,<web-app>(可以理解为作用域)

access-log --主要用于http输出

child of <cluster>,<cluster-default>,<server>,<server-default>,<host>,<host-default>,<web-app>,<web-app-default>

stdout-log-用于标准输出(system.out)

child of <resin>,<cluster>,<host-default>,<host>,<web-app-default>,<web-app>

stderr-用于错误输出(system.err)

child of <resin>,<cluster>,<host-default>,<host>,<web-app-default>,<web-app>

resin项目配置

一个基本的项目的log配要满足:

  • 日志层级分明(区分log的不同level,正常与异常)
  • 日志错误异常记录
  • 日志存储归类(比如按天存储)
  • 打印请求响应(开发调试阶段)
对于一个容器来讲,还要区分不同的webapp
初步配置
    <!-- the default host, matching any host name --><host id="localhost" root-directory="."><!--异常错误处理 --><log name="com.caucho.server.webapp.ErrorPageManager" level="finest"path="logs/${host.name}/error.log" timestamp="[%Y-%m-%d %H:%M:%S]" format="${request} ${log.message}" /><!--access-log,覆盖默认 --><access-log path="logs/${host.name}/access.log"archive-format="access-%Y%m%d.log.gz" format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'rollover-size="10mb" rollover-period="1D" /><!--stdout log and stderr log --><stderr-log path="logs/${host.name}/stderr.log" archive-format="stderr-%Y%m%d.log.gz"timestamp="[%Y.%m.%d %H:%M:%S]" rollover-size="10mb" rollover-period="1D" /><stdout-log path="logs/${host.name}/stdout.log" archive-format="stderr-%Y%m%d.log.gz"timestamp="[%Y.%m.%d %H:%M:%S]" rollover-size="10mb" rollover-period="1D" /><!--- webapps can be overridden/extended in the resin.xml--></host>
主要更改了配置中的host,通过host区分不同的webapp,stdout与stderr承当一个显示记录日志的角色,通过path,archive-format等将不同的归档不同的日志(如一个webapp对应一个目录,每个周期对应一个目录等)
resin作为容器,其异常还可以由error-page标签处理
    <error-page><!-- <error-code>404</error-code> --><exception-type>java.lang.RuntimeException</exception-type><location>/error.jsp</location></error-page>

error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<code>${requestScope["javax.servlet.error.exception"]}</code>
</body>
</html>

resin项目配置测试

package log;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/log.do")
public class LogTestServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("call get");System.err.println("error get");int i=1/0;resp.getWriter().write("hello");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("call post");doGet(req, resp);}}

浏览器访问http://localhost:8080/resin/log.do

logs/localost目录下生成4个日志文件,access.log,error.log,stderr.log,stdout.log,打印内容

<!--access.log-->
0:0:0:0:0:0:0:1 - - [09/Aug/2017:20:42:45 +0800] "GET /resin/log.do HTTP/1.1" 500 327 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36"<!--error.log-->
[2017-08-09 21:17:10]HttpServletRequestImpl[HttpRequest[app-0, 3]] java.lang.ArithmeticException: / by zeroat log.LogTestServlet.doGet(LogTestServlet.java:19)at javax.servlet.http.HttpServlet.service(HttpServlet.java:120)at javax.servlet.http.HttpServlet.service(HttpServlet.java:97)at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:109)at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:156)at com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:95)at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:290)at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:838)at com.caucho.network.listen.TcpSocketLink.dispatchRequest(TcpSocketLink.java:1353)at com.caucho.network.listen.TcpSocketLink.handleRequest(TcpSocketLink.java:1309)at com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(TcpSocketLink.java:1293)at com.caucho.network.listen.TcpSocketLink.handleRequests(TcpSocketLink.java:1201)at com.caucho.network.listen.TcpSocketLink.handleAcceptTaskImpl(TcpSocketLink.java:997)at com.caucho.network.listen.ConnectionTask.runThread(ConnectionTask.java:117)at com.caucho.network.listen.ConnectionTask.run(ConnectionTask.java:93)at com.caucho.network.listen.SocketLinkThreadLauncher.handleTasks(SocketLinkThreadLauncher.java:169)at com.caucho.network.listen.TcpSocketAcceptThread.run(TcpSocketAcceptThread.java:61)at com.caucho.env.thread2.ResinThread2.runTasks(ResinThread2.java:173)at com.caucho.env.thread2.ResinThread2.run(ResinThread2.java:118)<!--stderr.log-->
[2017.08.09 21:17:10]error getstdout.log
[2017.08.09 21:17:10]call get

页面跳转至error.jsp 页面显示

java.lang.ArithmeticException: / by zero

resin log日志相关推荐

  1. loguru log 日志的使用

    loguru log 日志的使用 # pip install loguru from loguru import logger # 创建out.log文件 logger.add("out.l ...

  2. linux日志手机,通过 shell 脚本 自动发送 log日志 文件内容 到手机邮箱

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 需要用到 mail 命令 如果你的系统中没有安装需要执行 (yum install -y mail sendmail) 安装 sendmail 是因为需要 ...

  3. python log函数怎么打_Python的log日志功能及设置方法

    python log函数怎么打_Python的log日志功能及设置方法_Elaine要当律师的博客-CSDN博客

  4. linux日志生成速率统计,Linux学习29-awk提取log日志信息,统计日志里面ip访问次数排序...

    前言 有一段log日志,需从日志里面分析,统计IP访问次数排序前10名,查看是否有异常攻击. 日志提取 如下日志,这段日志包含的信息内容较多,我们希望提取ip,访问时间,请求方式,访问路径(不带参数) ...

  5. tomcat的log日志乱码解决方案

    tomcat的log日志乱码解决方案 参考文章: (1)tomcat的log日志乱码解决方案 (2)https://www.cnblogs.com/q1359720840/p/10431989.htm ...

  6. oracle11gRAC之log日志体系

    oracle11gRAC之log日志体系: 1.CRS日志(grid): 首选查看alertlog: $CRS_HOME/grid/log/hostname/alertdbserver1.log Cl ...

  7. svn update -r m path 代码还原到某个版本(这样之前的log日志也就没了,也就是清空log日志)...

    [root@ok 资料库]# svn log 简历 ------------------------------------------------------------------------ r ...

  8. uwsgi的log日志中出现错误uWSGI listen queue of socket 4 full。

    如果没有设置uwsgi的--listen,如果sysctl -a | grep net.core.somaxconn发现net.core.somaxconn=128. 那你使用uwsgi启动的服务,单 ...

  9. Android中对Log日志文件的分析

    Android中对Log日志文件的分析 如何分析和研究Log文件 ,如何看日志信息 Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没 ...

  10. 如何对系统中设置的修改记录增加log日志

    前段时间有个用户打电话给我,苦兮兮的说,他们的自定义的报表版本的内容不知道给谁删除的干干静静,然后咬牙切齿的说,一定要设个blog,抓住这个乱改的家伙. 我给他的答复是,对不起,自定义报表的行列字段修 ...

最新文章

  1. 网站设计与开发流程图
  2. ArrayList 源码阅读记录
  3. mysql重装要删注册表_Mysql重装问题—删除注册表
  4. 【jQuery】使用Ajax提单表单数据
  5. SAP Cloud for Customer里Sales Order和Sales Quote的建模方式
  6. 简单好用的计算器:bc
  7. tf.train.get_checkpoint_state
  8. 互联网晚报 | 11月11日 星期四 | 腾讯第三季度营收1424亿元;华为捐赠百万价值职业技能券;货拉拉成立司机权益保障委员会...
  9. TCP/IP概念及基础网络配置
  10. pb利用pdf虚拟打印机将datawindow中的内容导出为pdf
  11. 找不到java是什么意思_“无法找到或加载主类”是什么意思?
  12. 腾讯云:服务器资源池化技术发展趋势
  13. 如何避免PayPal、Fb、谷歌账户被封,又如何解封?
  14. matlab之plot函数属性设置
  15. a轮b轮c轮天使轮区别是什么?
  16. 【读书】2020年阅读记录及心得
  17. mysql 不会丢失数据吗_讨论MySQL丢失数据的几种情况
  18. python 爬取链家成交房数据案例
  19. 熊猫直播助手服务器断开,熊猫直播发告别信正式关停服务器 总共运行1286天终于再见了...
  20. java-php-python-爱心公益网站设计与制作计算机毕业设计

热门文章

  1. win7屏保时间设置_高逼格时钟屏保-冷高轮时间小人人体形状造型数字动态时钟windows pc端 电脑屏幕保护...
  2. 软考中级系统集成项目管理工程师自学好不好过,怎么备考,给点经验
  3. java生成背景透明的png图片,Java生成背景透明的png图片
  4. 叮铃铃~: 一个前端铃声/提示音组件
  5. 安卓调试工具 adb 命令大全
  6. 程序员进阶必备--写文档
  7. 敏捷开发中的文档怎么写
  8. OpenCV50:使用SVM完成OCR手写体识别
  9. HI3559A,Hi3519A,Hi3556A芯片产品参数介绍资料
  10. Lync Server 2010下载拓扑报错分析及解决方法分享