【问题标题】:How to configure Tomcat to log everything via syslog?如何配置 Tomcat 以通过 syslog 记录所有内容?
【发布时间】:2011-03-21 12:23:34
【问题描述】:

我正在尝试配置 Tomcat 和 webapp (Atlassian JIRA) 以通过 syslog 记录所有内容。

这是我添加到 webapp log4j.properties (atlassian-jira/WEB-INF/classes/log4j.properties) 的内容:

log4j.rootLogger=WARN, syslog
log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
log4j.appender.syslog.facility=LOCAL0
log4j.appender.syslog.layout.ConversionPattern=%-5p [%t] [%c]: %m%n
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.SyslogHost=my.syslog.server.fqdn

但是,系统日志不会发送任何内容。我在端口 514 上嗅探了传出的数据包,但没有出现任何内容。

感谢您的帮助!

【问题讨论】:

    标签: tomcat logging log4j jira syslog


    【解决方案1】:

    访问日志:https://github.com/magwas/SyslogValve 由于使用的 api 会不断变化,因此可能需要针对您的 tomcat 版本进行调整。

    【讨论】:

      【解决方案2】:

      我也非常想要一个 JIRA 的 syslog appender,它不需要单独的记录器进程。

      修改/opt/jira/atlassian-jira/WEB-INF/classes/log4j.properties如Q所示,相关结果如下:

      ...
      23-Sep-2011 12:12:44 org.apache.catalina.core.StandardService start
      INFO: Starting service Catalina
      23-Sep-2011 12:12:44 org.apache.catalina.core.StandardEngine start
      INFO: Starting Servlet Engine: Apache Tomcat/6.0.32
      log4j:ERROR Could not instantiate class [org.apache.log4j.net.SyslogAppender].
      java.lang.ClassNotFoundException: org.apache.log4j.net.SyslogAppender
              at java.net.URLClassLoader$1.run(Unknown Source)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(Unknown Source)
              at java.lang.ClassLoader.loadClass(Unknown Source)
              at java.lang.ClassLoader.loadClass(Unknown Source)
              at java.lang.Class.forName0(Native Method)
              at java.lang.Class.forName(Unknown Source)
              at org.apache.log4j.helpers.Loader.loadClass(Loader.java:179)
              at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:320)
              at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:121)
              at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:664)
              at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:647)
              at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:544)
              at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:440)
              at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:476)
              at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471)
              at org.apache.log4j.LogManager.<clinit>(LogManager.java:125)
              at org.apache.log4j.Logger.getLogger(Logger.java:118)
              at com.atlassian.jira.startup.LauncherContextListener.<clinit>(LauncherContextListener.java:40)
              at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
              at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
              at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
              at java.lang.reflect.Constructor.newInstance(Unknown Source)
              at java.lang.Class.newInstance0(Unknown Source)
              at java.lang.Class.newInstance(Unknown Source)
              at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4149)
              at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704)
              at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
              at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
              at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
              at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
              at org.apache.catalina.core.StandardService.start(StandardService.java:525)
              at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
              at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
              at java.lang.reflect.Method.invoke(Unknown Source)
              at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
              at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
      log4j:ERROR Could not instantiate appender named "syslog".
      ...
      

      我可能是错的,但看起来 org.apache.log4j.helpers.Loader.loadClass 类加载器知道 org.apache.log4j 包,但是不是 org.apache.log4j.net 包,即使它们位于同一个 jar /opt/jira/lib/log4j-1.2.15.jar

      撰写本文时:JIRA 4.4.1 通过 Linux 64 位安装程序。

      【讨论】:

        【解决方案3】:

        这是我目前使用的解决方案:

        1. 我删除了 conf/logging.properties 文件
        2. 我修改了 atlassian-jira/WEB-INF/classes/log4j.properties 以禁用所有文件日志记录操作,只留下控制台日志记录
        3. 我修改了 catalina.sh 以便将其输出通过管道传输到 logger

        我想这个解决方案不符合 java-world。但它正在工作。

        但是,我仍在寻找一种更简洁的方式来记录到 syslog。

        【讨论】:

          猜你喜欢
          • 2017-08-11
          • 2011-05-12
          • 2011-08-25
          • 1970-01-01
          • 2011-04-27
          • 1970-01-01
          • 2015-05-18
          • 2018-10-12
          • 1970-01-01
          相关资源
          最近更新 更多