[TOC]

0x00 快速入门

描述:Resin是CAUCHO公司(http://www.caucho.com/)的产品,是一个非常流行的应用服务器支持servlets 和jsp的引擎,速度非常快。
官网介绍:“Resin的动态扩展和集群消除了停机时间,无需重大代码更改”,从单个服务器扩展到数百万用户,没有外部依赖关系

Resin特性:

  • 支持HTTP/1.1的WEB服务器
  • 支持显示动态内容和静态内容(能力强解析速度快)
  • 扩展性好能和其他WEB服务器一起工作(比如Apache server和IIS等);
  • Resin支持Servlets 2.3标准和JSP 1.2标准(用Resin来进行JSP编程是很容易)
  • Resin支持负载平衡(Load balancing),可以增加WEB站点的可靠性,方法是增加服务器的数量。比如一台SERVER的错误率是1%的话,那么支持负载平衡的两个Resin服务器就可以使错误率降到0.01%。
  • 跨平台性:可以在 Windows / Linux 上面安装使用

Resin的两个版本区别:

  • Resin 4.0 免费 : 普通版本独立作为web服务器性能就要差一些,可以使用 apache+resin 借助apache的缓存功能提高性能;
  • Resin Pro 4.0 收费 : 强大的cache功能支持缓存和负载均衡;

官网下载: https://caucho.com/products/resin/download


0x01 Resin安装

通用环境依赖说明:

1
2
Resin: 4.0.62
jDK: >= 6+ (这里选择JDK8)

Windows安装环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#Step1.安装JDK8并添加到环境变量
运行jdk-8u181-windows64.exe进行安装即可(默认路径)
>setx /M JAVA_HOME "C:\Program Files\Java\jdk1.8.0_181"
成功: 指定的值已得到保存。
>setx /M PATH "%PATH%;%JAVA_HOME%\bin;%JAVA_HOME%\jre;"
成功: 指定的值已得到保存。
#重新打开一个cmd.exe执行验证
C:\Users\Administrator\Desktop>java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)


#Step2.解压Resin包到项目目录中,并将其根路径加入到环境变量之中;
C:\Users\Administrator>setx /M RESIN_HOME "C:\resin-4.0.62"
成功: 指定的值已得到保存。

#step3.运行Resin包的安装程序 (注意需要.NET3.5支持) 根据需求选择 setup.exe 安装程序
运行resin.exe或者在命令中执行 run java -jar lib/resin.jar start。
#在下面的框框中可以重启或者停止(直接点击start/stop)

WeiyiGeek.启动Resin

WeiyiGeek.启动Resin

Step4.访问 http://localhost:8080/ 页面说明安装成功

WeiyiGeek.验证安装成功

WeiyiGeek.验证安装成功

Step5.点击/resin-admin 创建认证文件访问 http://localhost:8080/resin-admin/

1
2
3
4
5
6
7
8
9
10
11
#提交后的返回的信息
1.To add the admin user, copy and paste the following into c:\resin-4.0.62\conf/resin.properties: (将以下配置加入resin.propertie中)
admin_user : admin
admin_password : {SSHA}6c3j7qekfBfEWQL9uD6wiasV9oCz3BGG
#当然您也可以采用Use "resinctl generate-password" and copy/paste here to set the admin生成

2.默认是只允许localhost访问,当您设置下面的参数后将所有机器都能访问后台页面(注意防火墙的影响) add to c:\resin-4.0.62\conf/resin.properties:
admin_external : true
admin_secure : true
Or modify directly c:\resin-4.0.62\conf\resin.xml:
<resin:set var="resin_admin_external" value="true"/>

WeiyiGeek.

WeiyiGeek.

Step6.设置好之后便可以进行登录(采用外网机器登录)

WeiyiGeek.

WeiyiGeek.

Step7.简单的介绍一哈war部署

1
2
3
4
5
6
7
8
9
10
#方式1把war文件放进resin目录中的webapps下,然后resin自动解压,这样虽然可以但是可能会遇到很多问题,就比如运行的时候找不到js文件了,报404,又或者找不到配置的文件或者action。

#方式2:在resin目录中的conf中的resin.conf,这个文件是resin自带的,打开这个文件,拉到底下找到<web-app>这个标签,然后把原本的<web-app id="/" root-directory="">注释掉,添加下面一句
<web-app id="/" document-directory="D:\test\**" archive-path="D:\test\**.war"/>

#方式3:通过resin-admin后台进行部署(注意需要开启ssl)
Actions can only be performed on a local server and over a secure connection (SSL)." Try https://192.168.17.129:8443/resin-admin/index.php?q=deploy&s=0

访问网站:https://192.168.17.129:8443/Demo-1.1.0/
Hello World!WeiyiGeek

WeiyiGeek.

WeiyiGeek.

注意事项:

  • 启动的时候检查默认的8080端口是否被占用;

0x02 Resin配置文件

resin-4.0.x 配置文件结构:

1
2
3
4
5
6
7
配置属性 :  --conf/resin.properties
配置文件 : --conf/resin.xml
openSSL密钥 : --conf/keys/

许可信息文件 : --conf/licenses/
部署服务器路径 : --webapps/
resin日志文件 : --logs/

配置文件conf/resin.properties说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# resin.properties - 配置变量值
# See resin.xml, cluster-default.xml, and health.xml for full configuration.
# Any variable defined by ${...} can be set as a property in this file.
#
# Individual server overrides can be specified by prepending the server.id.
# 日志记录等级
# log_level : info
# app-0.log_level : finest
#
# 与Resin XML配置类似,修改此文件将触发重启。
# General log level (modify resin.xml for more granular log level adjustments)
# log_level : finer

# 启用详细的浏览器错误报告(业务上线时候不建议)
dev_mode : true

# resin多久检查一次更新的文件。
# dependency_check_interval : 5m

# Enable /resin-doc Resin documentation
resin_doc : true
resin_doc_host :

# List Triad server ip-addresses:hmux-port for each tier, space separated
#应用服务设置
# App tier Triad servers must be listed to enable web-tier to
# app-tier load-balancing

# web-tier Triad servers: web-0 web-1 web-2
# web_servers : 127.0.0.1:6810

# app-tier Triad servers: app-0 app-1 app-2
app_servers : 127.0.0.1:6800

# 允许弹性节点加入集群(支持云模式)
# elastic_cloud_enable : true

# 弹性节点应该连接的集群——每个节点都将连接一个三元组服务器
# Use a separate resin.properties file for each cluster
home_cluster : app

# 用于弹性服务器在home_cluster中加入集群
# elastic_server : true

# 为每个服务器创建一个不同的webapps/目录,用于垂直扩展
# elastic_webapp : true

# 用于具有动态IP地址的云服务器,其中服务器启动后为服务器分配DNS名称。resin会重试开始。
# elastic_dns : true

#指定配置文件中的——server
# home_server : app-0

# Set HTTP and HTTPS bind address
# http_address : *

# Set HTTP and HTTPS ports.
# http - default for all clusters and servers
# app.http - default for all servers in cluster 'app'
# app-0.http - for server 'app-0' only
# http : 8080

app.http : 8080
# app.https : 8443

web.http : 8080
# web.https : 8443

# 为了安全起见,Resin可以在绑定到端口80后切换到非root用户
setuid_user :
setuid_group :

# Arg直接传递到JVM
# jvm_args : -Xmx2048m -XX:MaxPermSize=256m
# jvm_mode : -server

# 这个类路径比默认类路径具有优先级,就像您希望使用Hibernate的JPA这样的第三方库时一样
# jvm_classpath :

# 本地url供看门狗检查,以确保服务器已启动,空间分隔
# http_ping_urls : http://127.0.0.1/test.jsp

# 为端口控制活动线程的数量
port_thread_max : 256
accept_thread_max : 32
accept_thread_min : 4
# keepalive_max : 512

# Enable JNI TCP speed optimizations
tcp_cork : true
sendfile : true
keepalive_select_enable : true

# OpenSSL证书配置密钥通常存储在resin配置目录中。
# openssl_file : keys/test.crt
# openssl_key : keys/test.key
# openssl_chain_file : keys/test.ca
# openssl_password : changeme
# openssl_protocol : -sslv2 -sslv3
# openssl_cipher_suite :

# JSSE证书配置密钥通常存储在resin配置目录中。
# jsse_keystore_type : jks
# jsse_keystore_file : /etc/resin/keys/server.keystore
# jsse_keystore_password : changeme

# In absence of a signed certificate, Resin will fallback to using a
# self-signed development certificate if HTTPS is enabled

# 启用代理缓存——用于缓存内存中的静态内容
proxy_cache_enable : true

# Sets the proxy cache memory size
# proxy_cache_size : 256m

# 启用集群持久会话(用于故障转移)
session_store : false

# disable the quercus *.php mapping when using Apache for PHP
# quercus_disable : true

# 使用数字后缀命名的web应用程序,例如foo-10.0。战争和可以浏览
# # / foo。当web应用程序的新版本被部署时,Resin会继续
# 将活动会话请求路由到以前的web应用程序版本
# #新会话将转到新版本,因此用户不会意识到
# #应用程序升级。
# webapp_multiversion_routing : true

# Set the email address to receive weekly and restart PDF reports
# email : [email protected]
pdf_summary : true

# 启用远程管理(对于远程CLI和EC2 ext: triad discovery)
# remote_admin_enable : true

# Enable /resin-admin web administration console
web_admin_enable : true
web_admin_host :

#允许访问/树脂管理从非本地网络ip地址
# web_admin_external : true
# 要求HTTPS访问/树脂管理
# web_admin_ssl : true

# 启用Resin REST Admin
# rest_admin_enable : true

# REST管理需要SSL
# rest_admin_ssl : true

# 健康检查禁用
# health_disable : true
# health_log_level : off

# 访问/树脂管理和远程CLI是密码限制。
# Use "resinctl generate-password" and copy/paste here to set the admin
# admin_user : admin
# admin_password : {SSHA}xxxxxxxx

# 允许读取EC2用户数据作为树脂属性
# properties_import_url : http://169.254.169.254/latest/user-data

常规配置配置文件 conf/resin.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<!--- Resin 4.0 configuration file.-->
<resin xmlns="http://caucho.com/ns/resin"
xmlns:resin="urn:java:com.caucho.resin">
<!-- property-based Resin configuration -->
<resin:properties path="${__DIR__}/resin.properties" optional="true"/>
<resin:if test="${properties_import_url}">
<resin:properties path="${properties_import_url}" optional="true" recover="true"/>
</resin:if>

<!-- JDK日志API的日志配置 -->
<log-handler name="" level="all" path="stdout:"
timestamp="[%y-%m-%d %H:%M:%S.%s]"
format=" {${thread}} ${log.message}"/>

<!--
- 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
- 日志信息级别:info生产环境 fine和finer适合开发环境和调试环境
-->
<logger name="" level="${log_level?:'info'}"/>
<logger name="com.caucho.java" level="config"/>
<logger name="com.caucho.loader" level="config"/>

<!--
- Default configuration applied to all clusters, including
- HTTP, HTTPS, and /resin-admin configuration.
-->
<resin:import path="${__DIR__}/cluster-default.xml"/>

<!--
- health configuration
-->
<resin:import path="${__DIR__}/health.xml"/>


<!--
- Remote management requires at least one enabled admin user.
-->
<resin:AdminAuthenticator>
<user name="${admin_user}" password="${admin_password}"/>

<resin:import path="${__DIR__}/admin-users.xml" optional="true"/>
</resin:AdminAuthenticator>

<!---对于集群系统,请在cluster_system_key中创建密码-->
<cluster-system-key>${cluster_system_key}</cluster-system-key>

<!--
- 环境依赖检查时间生产系统设置长点,600s 10分钟(不用修改文件后手动重启)
- 检测会非常耗时搞resin优化的话,那么就把它设置的长一些,生产环境中干脆设置为-1禁止自动检测变更;
-->
<dependency-check-interval>${dependency_check_interval?:'2s'}</dependency-check-interval>

<!-- 属性动态集群连接 -->
<home-cluster>${home_cluster}</home-cluster>
<home-server>${home_server}</home-server>
<elastic-server>${elastic_server}</elastic-server>
<elastic-dns>${elastic_dns}</elastic-dns>

<!--- JSSE default properties-->
<system-property
jdk.tls.ephemeralDHKeySize="2048"
jdk.tls.rejectClientInitiatedRenegotiation="true"
sun.security.ssl.allowUnsafeRenegotiation="false"
sun.security.ssl.allowLegacyHelloMessages="false"/>

<!--- 配置主应用程序集群。负载均衡配置也将有一个web集群。-->
<cluster id="app">
<!-- define the servers in the cluster -->
<server-multi id-prefix="app-" address-list="${app_servers}" port="6800"/>

<host-default>
<!-- 为.war扩展创建webapps目录 -->
<web-app-deploy path="webapps"
expand-preserve-fileset="WEB-INF/work/**"
multiversion-routing="${webapp_multiversion_routing}"
path-suffix="${elastic_webapp?resin.id:''}"/>
</host-default>
<!--
Sets the default character encoding to utf-8 <character-encoding>utf-8</character-encoding> (默认字符集为 utf-8 )
-->
<!-- 在hosts/foo.example.com/webapps中自动部署虚拟主机 -->
<host-deploy path="hosts">
<host-default>
<resin:import path="host.xml" optional="true"/>
</host-default>
</host-deploy>

<!-- 默认主机,匹配任何主机名 -->
<host id="" root-directory=".">
<!--- web应用程序可以在resin.xml中重写/扩展 可以解压war-->
<web-app id="/" root-directory="webapps/ROOT"/>
</host>

<resin:if test="${resin_doc}">
<host id="${resin_doc_host}" root-directory="${resin_doc_host}">
<web-app id="/resin-doc" root-directory="${resin.root}/doc/resin-doc"/>
</host>
</resin:if>
</cluster>

<cluster id="web">
<!-- 定义集群中的服务器 -->
<server-multi id-prefix="web-" address-list="${web_servers}" port="6810"/>
<host id="" root-directory="web">
<web-app id="">
<resin:LoadBalance regexp="" cluster="app"/>
</web-app>
</host>
</cluster>

</resin>


0x03 Resin应用

描述:Resion主要应用就是部署和发布我们的JSP应用;

Resin发布应用
Resin发布应用其实和Tomcat几乎一模一样有两种方式:

  • Resin目录发布
  • War发布

Resin3.x日志级别
描述:java.util.logging.Level中的日志级别对应

1
2
3
4
5
6
7
8
9
Level. ALL 指示应该记录所有消息。
static Level Level. CONFIG 是用于静态配置消息的消息级别。
static Level Level. FINE 是提供跟踪信息的消息级别。
static Level Level. FINER 指示一条相当详细的跟踪消息。
static Level Level. FINEST 指示一条最详细的跟踪消息。
static Level Level. INFO 是报告消息的消息级别。
static Level Level. OFF 是一个可用于关闭日志记录的特殊级别。
static Level Level. SEVERE 是指示严重失败的消息级别。
static Level Level. WARNING 是指示潜在问题的消息级别。


0x04 Security

描述:对于Resin服务进行安全配置加固;

Resin 4.x版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#1.外部主机不能访问配置登录(实际生产环境中建议不要让外网访问后台)
vim /conf/resin.properties
#admin_external : true
#admin_secure : true
#或者
vim /conf/resin.xml
<!-- <resin:set var="resin_admin_external" value="true"/> -->


#2.应为不同的用户分配不同的resin帐户,不允许不同用户间共享resint帐户(删除无关的用户)
#应要求 resin 管理帐户口令长度至少 8 位,且为数字、字母和特殊符号
#口令格式如:It#[email protected]!、Test$6y&y0u等
#方式1.将管理员口令粘贴到/resin-pro-4.0.36/conf/resin.properties,覆盖原来的口令
#方式2.
cat /resin/resin-pro-4.0.48/conf/admin-users.xml



#3.禁用管理控制台/停止/限定resin-doc和resin-admin
#禁止非本地用户访问
resin_doc: false #false 表示禁用 
resin_doc_host:127.0.0.1
#禁用管理控制台
web_admin_enable : false
web_admin_host : false
#删除默认页面
%resin%/webapps/ROOT/index.jsp
%resin%/doc/resin-doc
%resin%/doc/resin-admin


#4.Resin应用执行权限(低权限用户运行)
/usr/sbin/groupadd resin
/usr/sbin/useradd -g resin resin -s /sbin/nologin
#%resin%/conf/resin.properties 修改 resin 配置文件中的配置项,确保 setuid_user 和 setuid_group 的值不为 root 修改如下字段:
setuid_user : resin
setuid_group :resin
#注: resin 为 非 root 权限用户,Windows下面执行采用resin用户即可
runas /user:resin "cmd.exe cmd/k F:\resin11\httpd.exe "-Xms512M" "-Xmx1024M" "


#5.更改Resin默认端口 resin.properties ;
app.http  : 8080 
web.http  : 8080
# 适用于 HTTPS 站点的参数
# app.https : 8443
# web.https : 8443
# openssl_file : keys/test.crt
# openssl_key : keys/test.key
# openssl_password : changeme


#6.隐藏版本信息
Resin的版本信息被写死在了代码之中,无法通过配置文件来进行控制,修改方法如下:

第一步:找到下列文件,将所有文件解压缩到一个目录中(例如:xxx)。
%RESIN_HOME%/lib/resin.jar
%RESIN_HOME%/lib/pro.jar(适用于Pro版本)

第二步:找到下列文件:
xxx/com/caucho/Version.class
xxx/com/caucho/ProVersion.class(适用于Pro版本)

用JD-GUI反编译版本上述文件,得到Version.java或ProVersion.java(适用于Pro版本)
注意:如果导出文件内容为空,可直接从JD-GUI中复制出代码创建这个文件

第三步:根据需要修改Version.java/ProVersion.java文件中的VERSION、FULL_VERSION和VERSION_DATA参数的值(建议直接删除小版本号),修改完成后用下面的命令重新编译为class文件
javac Version.java
javac ProVersion.java(适用于Pro版本)

第四步:然后重新打包
将编译得到的class文件复制到原位置覆盖就文件,然后使用下面的命令重新打包:

jar cfm resin.jar xxx/META-INF/MANIFEST.MF -C xxx/ .
jar cfm pro.jar xxx/META-INF/MANIFEST.MF -C xxx/ . (适用于Pro版本)

第五步:停止Resin,用新生成的jar文件覆盖原文件(建议在覆盖前先备份原文件)后重启Resin。


#7.1 方式1管理目录安全应通过限制 ip 对管理目录的访问
进入目录 %resin% / doc / resin-doc / WEB-INF
使用命令“ vi resin-web.xml ”修改如下字段:
<resin:if test="${! resin_admin_external}">
<resin:IfNetwork>
<value>127.0.0.1</value>
<value>192.168.0.0/16</value>
<value>[::1]</value>
</resin:IfNetwork>
</resin:if>

#7.2 方式2为resin-admin设置白名单,webapps设置黑名单,然后新建立一个resin.properties中加一个参数用来放允许访问的ip:
#比如 `web_admin_allow_host: 10.10.10.10 10.10.10.11 10.10.10.12`
<cluster id="app">
<!-- 只允许指定ip访问resin-admin -->
<host id="${web_admin_host}" root-directory="${web_admin_host}">
<web-app id="/resin-admin" root-directory="${resin.root}/doc/admin">
<resin:Allow url-pattern="/admin/*">
<resin:IfNetwork value="${web_admin_allow_host}"/>
</resin:Allow>
</web-app>
</host>
</cluster>




#8.应开启日志记录
#cat %resin% /conf/resin.xml 配置文件确保 level 值不为 Off
<log-handler name="" level="all" path="stdout:" timestamp="[%y-%m-%d %H:%M:%S.%s]"
format=" {${thread}} ${log.message}"/>


#9.应关闭开发模式
vi %resin%/conf/resin.properties将resin.properties配置文件中的
dev_mode: true #注释掉


Resin 3.x 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#1.隐藏Resin响应头中的Server头
#resin.conf增加<server-header>节点
<cluster id="app-tier">
<!-- sets the content root for the cluster, relative to server.root -->
<root-directory>.</root-directory>
<server-header>Foo/1.0</server-header>
<server-default>


#2.Resin可以配置3种error-page:
#404错误也就是文件找不到错误页;Exception违例页;不能连接java引擎页
<web-app id='/app1'>
<error-page error-code='404' location='/file_not_found.jsp'/>
</web-app>

#Exception 违例页
<web-app id='/foo'>
<error-page exception-type='java.lang.NullPointerException' location='/nullpointer.jsp'/>
</web-app>

#不能连接到srun Servlet引擎错误页,该页设置和应用无关,属于服务器的设置。
<http-server>
 <error-page exception-type='connection' location='/missing_file.html'/>
</http-server>


#3.生产环境日志设置
<!-- -JDK日志接口的配置. 日志信息的级别:'info' 生产环境 'fine' 开发环境 'finer' 调试环境 -->
<log name="" level="fine" path="stdout:" timestamp="[%H:%M:%S.%s] "/>
<logger name="com.caucho" level="info"/>
<logger name="com.caucho.java" level="config"/>
<logger name="com.caucho.loader" level="config"/>

#3.注释将关闭Administration application /resin-admin
<web-app id="/resin-admin" root-directory="${resin.home}/php/admin">
<character-encoding>utf8</character-encoding>
<prologue>
<resin:set var="resin_admin_external" value="false"/>
<resin:set var="resin_admin_insecure" value="true"/>
</prologue>
</web-app>


0x05 Help

(1) Resin 日志记录之format配置详解

描述:访问日志格式变量遵循Apache的变量,且默认access.log的日志格式为"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"";

参数解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
%b 	result content length
%D time taken to complete the request in microseconds (since 3.0.16)
%h remote IP addr
%{xxx}i request header xxx
%{xxx}o response header xxx
%{xxx}c cookie value xxx
%n request attribute
%r request URL
%s status code
%{xxx}t request date with optional time format string.
%T time taken to complete the request in seconds
%u remote user
%U request URI
%v name of the virtual host serving the request


时间戳格式字符串
日志标记时间戳是一种格式的字符串,可含有取代有时间和日期值百分比代码。
参数解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
%a 	day of week (short)
%A day of week (verbose)
%b day of month (short)
%B day of month (verbose)
%c Java locale date
%d day of month (two-digit)
%H 24-hour (two-digit)
%I 12-hour (two-digit)
%j day of year (three-digit)
%m month (two-digit)
%M minutes
%p am/pm
%S seconds
%s milliseconds
%W week in year (three-digit)
%w day of week (one-digit)
%y year (two-digit)
%Y year (four-digit)
%Z time zone (name)
%z time zone (+/-0800)

基础实例:

1
2
3
4
<resin xmlns="http://caucho.com/ns/resin">
<log-handler name='' path='stderr:' timestamp="[%H:%M:%S.%s]"/>
...
</resin>