ChatGPT解决这个技术问题 Extra ChatGPT

logback.xml 的 XML 模式或 DTD?

我已经在网上看到了一些关于如果有一个 XML 模式或 DTD for logback.xml 文件至少在 IDEA 或 Eclipse 等 IDE 中具有非常基本的验证和自动完成功能的讨论,但我从未见过任何解决方案。

你是否?

至于验证和自动完成,请参阅下面的答案......但是为了让 eclipse 停止警告我,我使用了一个可靠的旧 DTD <!DOCTYPE configuration>。不能忍受对我的项目的警告,我猜是强迫症。
@Lucas 我想说的不是强迫症。不相关的警告会影响重要的警告。刚刚发生在我身上。
我也有点像那样强迫症,但是按照你的建议添加这个 行并没有为我消除警告......任何想法?
添加 行后,必须触发验证,例如通过上下文菜单“验证”。

T
Tuna

截至 2011 年 6 月,official documentation

很明显,logback 配置文件的语法非常灵活。因此,不可能使用 DTD 文件或 XML Schema 指定允许的语法。

该主题有 a brief thread,但似乎无处可去。


同样,英语非常灵活,因此它没有语法规则????多么逃避的借口!
A
Adrian Ber

只是为了摆脱 Eclipse 中恼人的警告,在 <?xml version="1.0" encoding="UTF-8"?> 之后添加 <!DOCTYPE xml>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>

要在修复后去掉感叹号图标,您可能需要通过右键单击文件并选择 Validate 再次触发验证。


正如@lucas 的评论所说,使用<!DOCTYPE configuration>。它对我有用Version: Oxygen.2 Release (4.7.2) Build id: 20171218-0600
正如@Manuel所说,要在修复后摆脱感叹号图标,请通过右键单击文件并选择“验证”再次触发验证。
@Noumenon 我会将您的评论添加到我的答案中。谢谢!
有谁知道为什么会这样?只是好奇,不知道如何在不读一本书或类似的东西的情况下找到答案。
截至 2022 年,它在 IntelliJ 中不起作用。
S
Sergey

根据documentation官方不支持,但有独立项目提供Schema for Logback

但是,由于 Logback 配置的极大灵活性,Schema 无法支持所有可能的配置选项。


此解决方案有效。只需将 logback.xsd 放在与 logback.xml 相同的目录中,然后手动将其添加到您的项目中。例如,在 IntelliJ 中,您将转到 Settings > Languages & Frameworks > Schemas and DTDs 并单击绿色“+”以添加外部资源。将“URI”设置为 http://ch.qos.logback/xml/ns/logback,将“位置”设置为 logback.xsd 的位置。
我刚刚为这个项目的 logback.xsd 文件创建了一个 url 缩短器,它按预期工作。您可以使用 xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback https://git.io/logback.xsd"
n
nkatsar

Sergey 提到的 independent project 涵盖了我的大部分要求。

但是,缺少一些元素,我在 https://github.com/nkatsar/logback-XSD 上将它们添加到我自己的 fork 中。希望他们能合并到主项目中。


现在已经合并了。根据 Github Network Graphenricopulatzo 的架构似乎是最丰富的来源。
R
Ricardo Padua Soares
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd">

来自 GitHub“用于 logback 的 XML 架构定义”https://github.com/nkatsar/logback-XSD


虽然这在理论上可以回答问题,但it would be preferable在此处包含答案的基本部分,并提供链接以供参考。
该回购协议的支持程度如何?
对于像我这样的未来几年,以前的 xsd 位置不再有效。您可以参考之前回复中提到的 git.io/logback.xsd
此答案的解决方案不再起作用。
r
raisercostin

感谢https://github.com/enricopulatzo/logback-XSD

这将允许 Eclipse 自动完成并验证 xml 是否未使用插件或其他扩展机制:

<?xml version="1.0" encoding="UTF-8"?>
<configuration
    xmlns="http://ch.qos.logback/xml/ns/logback"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
http://ch.qos.logback/xml/ns/logback 
https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd
">

即使使用它,我仍然会在无法识别的 XML 元素上遇到验证错误...例如 <variable(在 <configuration 下)<Name<immediateFlush><appender 下!
我怀疑是否存在完美的 xsd,因为 logback 配置支持插件,并且每个插件都可以自由拥有自己的标签。
即使插件是来自 Logback 本身的插件?或者我说的是 appenders,我不知道 Logback 的插件是关于什么的。但是没有“完美的xsd”会破坏XML 的原始概念,即拥有一种标记语言,顺便说一句,它是可扩展的(例如,通过额外的定义/模式——当你在XML 中配置它时,Spring 框架可以很好地处理这个问题)。
虽然您在 xml 上是对的,但众所周知它有实际限制。通过无限的时间和精力,您可以使 xml 模式工作,但在现实世界中并非如此。我只能说官方文档:“正如将反复演示的那样,logback 配置文件的语法非常灵活。因此,不可能使用 DTD 文件或 XML 模式指定允许的语法。” - logback.qos.ch/manual/configuration.html#syntax