如何为Jira插件REST端点创建名为itrac-plugins的自定义日志文件
要让你的Jira插件REST端点的日志输出到itrac-plugins.log,需要通过配置Log4j(或Log4j2,取决于Jira版本)的Appender和Logger来实现,而不是直接修改Logger.getLogger()的参数为文件名。以下是详细步骤:
1. 确定Jira使用的日志框架
从你的代码中org.apache.log4j.Logger可以看出,你的Jira版本使用的是Log4j 1.x(旧版本Jira)。如果是Jira 8及以上版本,默认使用Log4j2,配置方式略有不同,下面会分别说明。
2. 配置Log4j 1.x(适用于Jira 7及以下)
Jira的Log4j配置文件位于JIRA_INSTALL/atlassian-jira/WEB-INF/classes/log4j.properties(JIRA_INSTALL是你的Jira安装目录)。
步骤2.1 添加自定义Appender
在配置文件末尾添加以下内容,定义输出到itrac-plugins.log的Appender:
# 自定义itrac-plugins日志文件的Appender log4j.appender.itracplugins=org.apache.log4j.RollingFileAppender # 指定日志文件路径,${catalina.home}是Tomcat的根目录,也可以写绝对路径 log4j.appender.itracplugins.File=${catalina.home}/logs/itrac-plugins.log # 单个日志文件最大大小 log4j.appender.itracplugins.MaxFileSize=20MB # 保留的备份日志数量 log4j.appender.itracplugins.MaxBackupIndex=5 # 日志格式 log4j.appender.itracplugins.layout=org.apache.log4j.PatternLayout log4j.appender.itracplugins.layout.ConversionPattern=%d{ISO8601} %t %-5p %c %x - %m%n
步骤2.2 绑定专属Logger
接着添加Logger配置,将指定的日志分类绑定到上面的Appender:
# 创建专属Logger,名字可以自定义(建议用插件的包名/标识,避免冲突) log4j.logger.com.yourcompany.itracplugins=WARN, itracplugins # 禁止日志向上传递到父Logger(避免同时输出到atlassian-jira.log) log4j.additivity.com.yourcompany.itracplugins=false
3. 配置Log4j2(适用于Jira 8及以上)
Jira 8+使用Log4j2,配置文件位于JIRA_INSTALL/atlassian-jira/WEB-INF/classes/log4j2.xml。
步骤3.1 添加自定义Appender
在<Appenders>标签内添加:
<RollingFile name="ITRAC_PLUGINS" fileName="${sys:catalina.home}/logs/itrac-plugins.log" filePattern="${sys:catalina.home}/logs/itrac-plugins-%d{yyyy-MM-dd}-%i.log.gz"> <!-- 日志格式 --> <PatternLayout pattern="%d{ISO8601} %t %-5p %c %x - %m%n"/> <!-- 滚动策略:文件达到20MB时分割 --> <Policies> <SizeBasedTriggeringPolicy size="20MB"/> </Policies> <!-- 保留最多5个备份文件 --> <DefaultRolloverStrategy max="5"/> </RollingFile>
步骤3.2 绑定专属Logger
在<Loggers>标签内添加:
<Logger name="com.yourcompany.itracplugins" level="warn" additivity="false"> <AppenderRef ref="ITRAC_PLUGINS"/> </Logger>
4. 修改插件代码中的日志获取逻辑
将原来的日志获取语句:
def log = Logger.getLogger("atlassian-jira.log")
替换为:
// 使用我们配置的Logger名字 def log = Logger.getLogger("com.yourcompany.itracplugins")
这样,当你调用log.warn(...)时,日志就会输出到itrac-plugins.log中,而不会再写入atlassian-jira.log。
5. 重启Jira使配置生效
修改Log4j配置文件后,必须重启Jira服务,新的日志配置才能生效。
关键说明
你之前直接用Logger.getLogger("itrac-plugins.log")无效的原因是:
- Log4j中
Logger.getLogger()的参数是日志分类名称(用于区分不同来源的日志),而不是文件名。 - 文件名是通过Appender配置指定的,需要将Logger与对应的Appender绑定,才能让该分类的日志输出到指定文件。
内容的提问来源于stack exchange,提问作者منى

