resin log日志
来源:互联网 发布:sublime windows 破解 编辑:程序博客网 时间:2024/06/03 08:51
入门索引
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] activelog/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
for log tags is used to specify a format string for each log message. format recognizes EL-expressions. The EL variable 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,正常与异常)
- 日志错误异常记录
- 日志存储归类(比如按天存储)
- 打印请求响应(开发调试阶段)
<!-- 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>
<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 zero at 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日志
- resin 日志
- resin access log 格式
- resin日志处理
- resin查看控制台日志
- Log日志
- Log日志
- log日志
- log 日志
- Log日志
- log日志
- 日志log
- log日志
- Log日志
- log日志
- Log日志
- log日志
- Log 日志
- python 爬虫-2:添加用户代理和延时下载
- 用户和组的管理
- linux下如何用GDB调试c++程序
- Java反射机制浅析
- [总结]操作系统真是博大精深(二)
- resin log日志
- Token认证机制
- 设计模式-解释器模式
- SPA开发第一天(vue-cli)
- matlab调用python代码
- java.lang.IllegalArgumentException: Wrong FS://expected: file:///
- TensorFlow 整体架构 / 第1节:TensorFlow 概要
- 多个线程按顺序循环打印线程独有的字符串
- 详解MySql的慢查询分析及开启慢查询日志