intra-mart Accel Platform 配置文件参考 第26版2020-08-01

日志设置

Resin可以指定JDK日志记录接口的输出目的地,并重定向Web应用程序的标准输出和标准错误输出。

java.util.logging

总览

Resin对所有内部日志使用JDK标准java.util.logging,并提供灵活的日志格式和日志级别配置。
日志配置分为两部分:日志处理程序和记录器级别。
日志处理程序告诉将树脂日志输出到何处。 Resin包括基于文件的日志处理程序,邮件处理程序,syslog处理程序以及符合JDK标准的任何自定义日志处理程序。
基于文件的日志处理程序示例
<日志处理程序 名称=“ com.foo” 等级=“全部”
             路径=“ $ {resin.root} /log/foo.log”
             时间戳=“ [[%y-%m-%d%H:%M:%S.%s] {%{thread}}”/>
<logger>设置命名记录器的记录级别。 <logger>通常具有多个日志处理程序,因此记录程序级别和日志处理程序级别的输出必须匹配。
因为记录器和日志处理程序名称是分层的,所以“ com.foo” <logger>启用“ com.foo.bar”。
“精细”级别日志输出设置的示例
<记录器 名称=“ com.foo” 等级=“好”/>
<记录器 名称=“ com.foo.bar” 等级=“最好”/>

日志名称

JDK日志记录API使用分层命名方案。通常,该名称与Java类名称相同。如果指定了名称,则名称以指定名称开头的所有日志记录请求都将被匹配。
例如,<logger name =” example.hogwarts” ...>匹配“ example.hogwarts.System”和“ example.hogwarts.gryffindor.System”的日志记录请求。
Resin自己的日志记录基于Resin类名称。以下是树脂的有用日志名称的一览表 。
名称 意义
“” 调试一切。
com.caucho.ejb EJB处理。
com.caucho.jsp JSP调试。
com.caucho.java Java编译。
com.caucho.server.port TCP端口调试和Thread。
com.caucho.server.http HTTP相关的调试。
com.caucho.server.webapp Web应用程序相关的调试。
com.caucho.server.cache 缓存相关的调试。
com.caucho.sql 数据库池。
交易交易 事务处理。

日志级别

记录器级别启用给定调试粒度的记录。 “严重”级别显示威胁服务器稳定性的日志,“精细”级别显示应用程序/库用户的调试信息。
日志记录级别与JDK java.util.logging.Level中定义的值匹配。
名称 API 用途
  关闭日志记录。
严重的 log.severe(“ ...”) 妨碍程序执行的故障,例如无法启动Web应用程序或服务器重新启动
警告 log.warning(“ ...”) 严重的问题,可能会向浏览器返回响应代码500。
资讯 log.info(“ ...”) 关键生命周期事件,例如启动Web应用程序。
配置 log.config(“ ...”) 设置的详细内容日志。
很好 log.fine(“ ...”) 针对不熟悉源代码的开发人员的用户级调试。
更好 log.finer(“ ...”) 开发人员使用的详细内容调试。
最好的 log.finest(“ ...”) 通过详细内容跟踪进行调试。
全部   所有消息均已记录。

<日志处理程序>

为JDK java.util.logging * API设置日志处理程序。
java.util.logging有两个步骤。设置一组日志处理程序和每个记录器级别的设置。 <log-handler>创建日志目标,为处理程序设置最低日志级别,并将处理程序附加到日志名称。
配置自定义处理程序的<log-handler>具有最常见的设置,即旋转日志文件。大多数设置用于轮换日志,并与其他日志设置共享。

日志处理程序时间戳

日志标记的时间戳是一个字符串,其格式可以包括用日期和时间值替换的“%”代码。
代号 意义
%a 星期几(略)
%A 星期几( 详细内容 )
%b 月(略)
%B 月( 详细内容 )
%c Java语言环境日期
%d 月(两位数)
%H 24小时(两位数)
12小时(两位数)
%j 一年中的天数
%米 月(两位数)
%M 分钟
%p 上午/下午
%S 第二个
%秒 毫秒
%W 年的周数(3位数字)
%w 天数几(1位数字)
%y 年(两位数)
%Y 年份(4位)
%Z 时区(名称)
%z 时区(+/- 0800)
%{thread} 当前Thread的名称
%{level} 当前日志级别
%{env} 当前的类加载器环境
典型的日志标签时间戳的示例
<日志处理程序 名称='' 路径='stderr:' 时间戳=“ [[%H:%M:%S.%s] {%{thread}}”/>
[22:50:11.648] WebApp [/ doc]开始[22:50:11.698] http收听*:8080 [22:50:11.828] hmux收听*:6800

日志处理程序存档

下面的示例是一个标准日志处理程序,它写入过渡文件。由于处理程序级别为“全部”,因此<logger>设置实际的日志级别。
<日志处理程序 名称= 等级=“全部”
     时间戳=“ [[%Y /%m /%d%H:%M:%S.%s] {%{thread}}”/>

<记录器 名称=“ com.caucho” 等级=“信息”/>
默认存档格式如下。
  • 过渡期超过1天(1D)。

    路径+“。%Y%m%d”
  • 过渡期少于1天(1D)。

    路径+“。%Y%m%d。%H”
例如,以下是设置所有使用标准错误输出的日志的示例。
<日志处理程序 名称='' 等级=“全部” 路径='stderr:' 时间戳=“ [%H:%M:%S.%s]”/>
一种有用的技术是打开所有调试日志输出以跟踪问题。
<日志处理程序 名称='' 等级=“更细” 路径='日志/debug.log'
     时间戳=“ [%H:%M:%S.%s]”
     展期='1h' 累计数='1'/>

日志处理程序EL格式

在Resin的<log-handler>的format属性中指定每个日志消息的格式字符串。该格式可以识别EL表达式。
格式字符串示例
<日志处理程序 名称='' 等级=“全部” 路径='stderr:' 时间戳=“ [%H:%M:%S.%s]”
     格式=“ $ {log.level} $ {log.name} $ {log.message}”/>
记录EL变量
可变的 说明
$ {log.level} 日志级别。
$ {log.name} 记录器名称。
$ {log.shortName} 简短的记录器名称(“ Foo”而不是“ com.hogwarts.Foo”)
$ {log.message} 日志消息。
$ {log.millis} 事件发生的时间。自1970年以来的毫秒数。
$ {log.sourceClassName} 请求记录的类的名称。 (在运行时可能不可用。)
$ {log.sourceMethodName} 请求记录的方法的名称。 (在运行时可能不可用。)
$ {log.threadID} 获取发起日志记录请求的Thread的int类型标识符。
$ {log.thrown} 获取与日志记录请求关联的java.lang.Throwable。
$ {thread} 当前Thread的名称。
$ {request} Servlet请求值。
$ {session} HTTP Session 。
$ {cookie ['JSESSIONID']} 要求Cookie值。
您也可以在格式字符串中使用环境EL变量。
<web-app> <log name = '' level = ' all'path = 'log / debug.log'timestamp = “ [%H:%M:%S.%s]” format = “ [$ {app。 contextPath}] $ {log.message}“ /> ... </ web-app>
[14:55:10.189] [/ foo]`null'返回JNDI java:EnvironmentClassLoader的模型[web-app:http://本地主机:8080 / foo] [14:55:10.189] [/ foo] JNDI查找` java:comp / env / caucho / auth'exception javax.naming.NameNotFoundException:java:comp / env / caucho / auth [14:55:10.199] [/ foo]应用程序[http://本地主机:8080 / foo]开始

记录器:应用程序记录

要在应用程序中执行日志记录,可以使用JDK的日志记录功能。正确的日志名称和级别对于疑难解答和调试代码很重要。过多的日志记录对开发人员来说就像减少日志记录一样令人困惑。
日志名称应该是实现类的完整类名。可以使用其他名称,但是使用类名称可以提高可维护性。
日志级别应在整个应用程序中保持一致。树脂使用以下级别的表示法:
更好的日志记录示例
进口 java.util.logging.Logger;
进口 java.util.logging.Level;

公开的  oo {
  私人的 静态的 最后的 记录仪 日志
    = 记录仪getLoggeroogetName());

  ...
  虚空 doFoo弦乐 
  {
    //检查日志级别(如果您的日志记录调用还有其他功能)
    //比传递参数
    如果 日志isLoggable等级罚款))
        日志更好这个 + “ doFoo(” +  + “)”);

    ...

    日志资讯(...);

    试一试 {
        ...
    } 赶上 ExpectedException  {
      日志日志等级最好的 “预期的异常” );
    }
  }
  ...
}

自定义和库日志处理程序

可以使用CanDI XML语法配置自定义处理程序和库日志处理程序。
JDK FileHandler示例
<web-app xmlns = “ http://caucho.com/ns/resin” xmlns:jdk-logging = “ urn:java.util.logging” > <log-handler name = “ com.foo” level = “信息“ > <jdk-logging:FileHandler> <新> <value> /tmp/test.out </ value> </ new> </ jdk-logging:FileHandler> </ logger> </ web-app>
包装 com.foo.demo;

进口 java.util.logging。*;

公开的  我的处理程序 延伸 处理程序
{
  @Override
  公开的 虚空 发表日志记录 记录
  {
    系统名称打印getFormatter()。格式记录));
  }

  @Override
  公开的 虚空 齐平();
  {
  }

  @Override
  公开的 虚空 关闭();
  {
  }
}

自定义日志格式

与日志处理程序一样,您可以自定义日志消息的格式。可以通过Resin知道java.util.logging接口并使用<log-handler>来配置格式化程序。
您可能需要更改日志消息的格式,以更好地收集站点信息。格式化程序也可以像处理程序一样进行自定义。
自定义格式的设置示例
<日志处理程序 名称=“ com.foo” 等级=“警告” 路径=“ WEB-INF / log.log”>
  <formatter> <mypkg:MyFormatter /> </ formatter>
</ log-handler>
MyFormatter.java
包装 com.mycom.mypkg;

进口 java.util.logging。*;

公开的  MyFormatter 延伸 格式化程序
{
  @Override
  公开的 弦乐 格式日志记录 记录
  {
    归还 “ [” + 记录getLevel() + “]” + 记录getMessage();
  }
}

树脂内置日志处理程序

Resin带有一个自定义日志处理程序,该处理程序将具有常见日志格式的消息发送到JMS,HMTP和syslog服务。
创建自定义处理程序也很容易。

BamLogHandler

BAM处理程序将日志消息发布到BAM代理。代理可以具有自定义的HMTP服务来处理日志消息。 BamHandler要求使用JID(Jabber ID)作为目标服务的地址。
BAM处理程序配置示例
<logger name = “ com.foo” > <resin:BamLogHandler level = “警告” > <to>测试@本地主机</ to> </ resin:BamLogHandler> </ logger>

EventLogHandler

事件处理器向CanDI事件系统发出LogEvent。 LogEvent接收通知,因此任何具有@Observes方法的CanDI组件都将接收该通知。日志处理程序的类名称为com.caucho.log.EventLogHandler。
事件处理器设置示例
<记录器 名称=“ com.foo”>
  <resin:EventLogHandler 等级=“警告”/>
</ logger>

JmsLogHandler

JMS处理程序将日志消息发布到JMS队列。
JMS处理程序配置示例
<web-app xmlns = “ http://caucho.com/ns/resin” xmlns:ee = “ urn:java:ee” xmlns:resin = “ urn:java:com.caucho.resin” > <resin:MemoryQueue ee:命名= “ myQueue” /> <logger 名称= “ com.foo” > <resin:JmsLogHandler 级别= “ warning” > <target> $ {myQueue} </ target> </ resin:JmsLogHandler> </ logger> </ web-app>

MailLogHandler

电子邮件处理程序将日志消息发送到电子邮件地址。为了减少电子邮件的数量,处理程序将邮件串联起来,并在一定时间后发送。
MailLogHandler属性
属性名称 说明 默认
电邮地址 无(必填)
延迟时间 发送第一封电子邮件之前需要等待的时间 1m(1分钟)
邮件间隔分钟 电子邮件之间的最小间隔 1小时(1小时)
属性 JavaMail属性
邮件处理程序设置示例
<logger name = “” > <resin:MailLogHandler 级别= “ warning” > <to> admin@foo.com </ to> <properties> mail.smtp.host = 127.0.0.1 mail.smtp.port = 25 </属性> </树脂:MailLogHandler> </记录器>

SyslogHandler

在UNIX系统上,可以使用SyslogHandler将消息记录到syslog。
SyslogHandler配置示例
<记录器 名称= “” > <树脂:SyslogLogHandler 级别= “警告” > <facility>守护程序</设施> <severity>通知</严重性> </ resin:SyslogLogHandler> </ logger>
工具的可能值是:user,mail,daemon,auth,lpr,news,uucp,cron,authpriv,ftp,local0,local1,local2,local3,local4,local5,local6,local7。 默认值为守护程序。
紧急程度,紧急程度,严重程度,错误,警告,通知,信息和调试可用于严重性。
请参见“ man 3 syslog”和“ man syslog.conf”。

日志旋转和归档

日志轮换每周或每天存档日志文件。发生过渡时,将更改现有日志文件的名称,并将日志输出到新的日志文件。
树脂日志轮换用于JDK日志记录,HTTP访问日志和标准输入/输出日志。

按大小滚动

当文件大小达到一定数量时,将发生翻转。 Resin的默认行为是在文件大小达到1MB时翻转。
“滚动大小”用于指定最大大小,并且可以指定字节(50000),千字节(128kb)和兆字节(10mb)。 -1禁用按大小滚动。

按时间滚动

自上次翻转以来的一段时间后已翻转。 Resin的默认行为是不执行基于时间的翻转,除非将“ rollover-size”设置为-1并且禁用了“按尺寸翻转”。如果禁用大小翻转,则默认期限为一个月。
“周转期”用于指定时间段,可以指定为日(15D),周(2W),月(1M)或时间(1h)。

存档文件

发生过渡时,日志文件将重命名(存档),并且日志将输出到新的日志文件。
“存档格式”指定存档文件的名称。这可以包括使用常规字符,EL环境变量和%代码的当前日期和时间。 %代码与用于时间戳的代码相同。
默认行为取决于“过渡期”的值。如果未使用“ rollover-period”(因为它大于一天),或者指定了“ rollover-size”,则归档文件名将在原始路径后附加“。%Y%m%d”。是的
如果“过渡期”少于一天,则归档文件名是原始路径,并添加了“。%Y%m%d。%H”。

禁用翻转

要禁用翻转功能,请将“ rollover-size”设置为无法发生的大数值。
<stdout-log 路径=“日志// stdout.log” 滚动大小=“ 1024mb”/>

压缩方式

日志转换文件可以使用gzip或zip压缩。存档格式由扩展名决定。
<日志 名称= 等级=“警告” 路径='日志/ error.log'
     存档格式=“%Y-%m-%d.error.log.gz”
     展期=“ 1D”/>

<访问日志 路径=“日志/ access.log”
            存档格式=“访问-%Y%m%d.log.gz”
            展期=“ 1D”/>

标准输出重定向

标准输出日志

设置System.out的目标。
标准输出日志中的设置优先于父级中的设置。例如,如果您将标准输出日志指定为<web-app>的子级,则将执行在Web应用程序中执行的System.out重定向,并且将优先于父级<主机>的标准输出日志的设置。

注意

“路径”不得与在命令行“ -stdout”上指定的路径相同。如果指定相同的路径,则这些进程将争夺文件所有权。

属性

属性名称 说明 默认
档案格式 过渡存档文件名的格式 见下文
路径 目标路径 无(必填)
路径格式 指定用于确定路径的格式。语法与“存档格式”相同。 无(可选)
滚动数 过渡文件的最大数量。
展期 多久滚动一次。日期(15D),星期(2W),月份(1M),时间(1H)。
滚动大小 要翻转的文件的最大大小。字节(50000),KB(128kb),兆字节(10mb)。 1兆字节(1mb)
时间戳记 行首使用的时间戳格式。 没有时间戳记
默认存档格式如下。
  • 过渡期超过1天(1D)。

    路径+“。%Y%m%d”
  • 过渡期少于1天(1D)。

    路径+“。%Y%m%d。%H”
以下示例在<host>上配置System.out。主机中的所有Web应用程序都将写入相同的输出文件,除非<web-app>中的输出日志设置被覆盖。
<host id = 'foo.com' > <stdout-log path = '/var /log / foo / stdout.log'rollover-period = '1W' /> ... </ host>

标准日志

设置System.err的目标。
stderr日志中的设置优先于父级中的设置。例如,如果将stderr日志指定为<web-app>的子级,则将执行Web应用程序中执行的System.err重定向,并且其优先级高于父<host>的stderr日志的设置。

注意

“路径”不得与在命令行“ -stderr”上指定的路径相同。如果指定相同的路径,则这些进程将争夺文件所有权。

属性

属性名称 说明 默认
档案格式 过渡存档文件名的格式 见下文
路径 目标路径 无(必填)
路径格式 指定用于确定路径的格式。语法与“存档格式”相同。 无(可选)
滚动数 过渡文件的最大数量。
展期 多久滚动一次。日期(15D),星期(2W),月份(1M),时间(1H)。
滚动大小 要翻转的文件的最大大小。字节(50000),KB(128kb),兆字节(10mb)。 1兆字节(1mb)
时间戳记 行首使用的时间戳格式。 没有时间戳记
默认存档格式如下。
  • 过渡期超过1天(1D)。

    路径+“。%Y%m%d”
  • 过渡期少于1天(1D)。

    路径+“。%Y%m%d。%H”
以下示例在<host>上配置System.out。主机中的所有Web应用程序都将写入相同的输出文件,除非<web-app>中的输出日志设置被覆盖。
<host id = 'foo.com' > <stderr-log path = '/var /log / foo / stderr.log'rollover-period = '1W' /> ... </ host>

<访问日志>

<access-log>配置访问日志文件。
如果在<web-app>的子级中定义,则将覆盖<host>定义。如果在<host>的子项中定义,则将覆盖<server>的定义。
默认存档格式如下。
  • 过渡期超过1天(1D)。

    路径+“。%Y%m%d”
  • 过渡期少于1天(1D)。

    路径+“。%Y%m%d。%H”
在访问日志中,跟随Apache变量获取格式变量。

格式类型

模式 说明
%b 要返回的内容的长度。
%D 处理请求所花费的时间。 (微秒)
%h 远端IP地址。
%{xxx}我 请求标头。
%{xxx} o 响应头。
%{xxx} c Cookie值。
%n 请求属性值。
%r 请求网址。
%秒 状态码。
%S Session ID。
%{xxx} t 日期和时间格式。
%T 处理请求所花费的时间。 (第二)
%u 远程用户。
请求URI 。
%v 虚拟主机的服务器名称。
默认格式如下。
“%h%l%u%t \ ”%r \ “%> s%b \ ”%{Referer} i \ “ \ ”%{User-Agent} i \ “

属性

属性名称 说明 默认
路径 目标路径 无(必填)
路径格式 指定用于确定路径的格式。语法与“存档格式”相同。 无(可选)
档案格式 过渡存档文件名的格式。 见下文
自动冲洗 如果为True,则在每次请求时刷新内存缓冲区。 false
自动冲洗时间 刷新内存缓冲区的时间间隔。 60秒(60秒)
排除 如果请求URI匹配,则不会将其记录在访问日志中。 无(可选)
格式 访问日志格式。 见上文。
主机名-DNS查找 记录DNS名称而不是IP地址。 (这可能会影响性能。) false
展期 多久滚动一次。按天(15D),周(2W),月(1M)或小时(1h)指定。 无(可选)
滚动大小 要滚动的日志文件的最大大小。以字节(50000),千字节(128kb)或兆字节(10mb)为单位指定。 1 GB(1 GB)
滚动数 过渡文件的最大数量。
在<host>中设置<access-log>的示例。
<群集 ID = “应用程序层” > <主机 ID = “” > <访问日志 路径= '日志/ access.log' > <翻转时间> 2W </翻转时间> </访问日志> < / host> </ cluster>

日志路径

“路径”用于确定将消息发送到的位置。通常,将访问日志,标准输出日志和标准错误日志设置为输出到文件。
或设置为切换到标准输出和标准错误输出以在控制台上显示。
路径 说明
文件系统路径 输出到文件。
标准输出: 输出到标准输出。
stderr: 输出到标准错误输出。
将日志消息输出到标准输出的示例
<日志 名称= 等级=“全部” 路径=“ stdout:”/>