ChatGPT解决这个技术问题 Extra ChatGPT

XML schema or DTD for logback.xml?

I've seen several discussions on the net about how great it would be to have an XML schema or DTD for logback.xml file to have at least the very basic validation and auto-completion in IDEs like IDEA or Eclipse, but I never saw any solution.

Did you?

As far as validation and auto-complete, see answers below... but to get eclipse to stop warning me, I use a trusty old DTD of <!DOCTYPE configuration>. Can't stand warnings on my projects, OCD I guess.
@Lucas Not so OCD I'd say. Irrelevant warnings can shadow important warnings. Just happened to me.
I'm a bit compulsive like that, too, but adding this line as you suggest did nothing to remove the warning for me... any idea??
After adding the line, one has to trigger validation e.g. via context-menu 'Validate'.

T
Tuna

As of June 2011, the official documentation states

As shall become clear, the syntax of logback configuration files is extremely flexible. As such, it is not possible specify the allowed syntax with a DTD file or an XML Schema.

There was a brief thread on the topic, but didn't seem to go anywhere.


In the same way that English language is extremely flexible therefore it has no grammatical rules???? What a cop-out of an excuse!
A
Adrian Ber

Just to get rid of the annoying warning in Eclipse add <!DOCTYPE xml> after <?xml version="1.0" encoding="UTF-8"?>.

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

To get rid of the exclamation point icon after you fix it, you might need to trigger the validation again by right-clicking the file and choosing Validate.


As the comment by @lucas say, use <!DOCTYPE configuration>. It works for me Version: Oxygen.2 Release (4.7.2) Build id: 20171218-0600
To get rid of the exclamation point icon after you fix it, as @Manuel said, trigger the validation again by right-clicking the file and choosing "Validate".
@Noumenon I will add your comment to my answer. Thanks!
Does anyone know why this works? Just curious and not sure how to find the answer without reading a book or something similar.
It does not work in IntelliJ as of 2022.
S
Sergey

It is not supported officially according to the documentation, but there is an independent project to provide Schema for Logback

However, due to extreme flexibility of the Logback configuration, Schema cannot support all possible configuration options.


This solution works. Just put logback.xsd in the same directory as logback.xml and add it to your project manually. In IntelliJ, for example, you'd go to Settings > Languages & Frameworks > Schemas and DTDs and click the green "+" to add an external resource. Set "URI" to http://ch.qos.logback/xml/ns/logback and "Location" to the location of logback.xsd.
I just created an url shortener for this project's logback.xsd file, and it's working as expected. You can use xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback https://git.io/logback.xsd"
n
nkatsar

The independent project mentioned by Sergey covered most of my requirements.

However, some elements were missing, I added them on my own fork on on https://github.com/nkatsar/logback-XSD. Hope they will get merged in the main project.


It has now been merged. According to Github Network Graph, enricopulatzo’s schema seems to be the richest source.
R
Ricardo Padua Soares
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd">

from GitHub "An XML Schema Definition for logback" https://github.com/nkatsar/logback-XSD


Whilst this may theoretically answer the question, it would be preferable to include the essential parts of the answer here, and provide the link for reference.
How complete support is there in that repo?
For those coming years after like me, the previous xsd location is not valid anymore. You can refer to git.io/logback.xsd as mentioned in a previous response
The solution from this answer does NOT work anymore.
r
raisercostin

Thanks to https://github.com/enricopulatzo/logback-XSD

This will allow eclipse to autocomplete and validate if xml is not using plugins or other extensions mechanisms:

<?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
">

even using this, I still get validation errors on unrecognized XML elements... like <variable (under <configuration) <Name or <immediateFlush> under an <appender!
I doubt that a perfect xsd will exist since logback config supports plugins and each of them is free to have their own tags.
even when the plugins are the ones from Logback itself? or I speak about appenders, I don't know what plugins for Logback are about. but not having a "perfect xsd" defeats the original concept of XML, i.e. having a Markup Language, which by the way is eXtensible (e.g. through additional definitions/schemas - the Spring Framework handles this perfectly well when you configure it in XML).
While you are right on xml, it is known that it has practical limits. With infinite time and effort you can make xml schema work but in the real world is not the case. I cannot say more than the official documentation: "As will be demonstrated over and over, the syntax of logback configuration files is extremely flexible. As such, it is not possible to specify the allowed syntax with a DTD file or an XML schema." - logback.qos.ch/manual/configuration.html#syntax