使用外部属性文件的logback无法正常工作

时间:2013-07-19 13:48:44

标签: email properties playframework logback smtpappender

我认为我遇到了一个playframework - logback特定的bug,也许不是,任何帮助都会很棒!

发生错误时,我需要一个电子邮件附加功能向我发送电子邮件 所以我创建了一个简单的,其中定义了所有属性:

<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
    <smtpHost>myhost</smtpHost>
    <smtpPort>25</smtpPort>
    <STARTTLS>true</STARTTLS>
    <username>username</username>
    <password>pass</password>
    <to>to</to>
    <from>from</from>
    <subject>Error: %logger{20} - %m</subject>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>%date %-5level %logger{35} - %message%n</pattern>
    </layout>
</appender>

这很好用。
然后我想重构所有的属性,因为很明显我不想将密码和类似的东西提交给源控件。
所以我用$ {propname}替换了所有属性,并在开头添加了

<property file="conf/mail.properties"/>

现在不再发送电子邮件了。
我调试并打印出属性,发现问题与引号有关 我的往返是电子邮件地址,当我把它们放在我的属性文件中时,我需要用引号括起来,否则我会收到这样的错误:

Caused by: com.typesafe.config.ConfigException$Parse: /myconfdir../mail.properties: 19: Reserved character '@' is not allowed outside quotes

此外,我的密码中有一个“+”符号,如果它在属性文件中没有引用,我会得到同样的错误。
使用这些引用值进行调试时,我看到引号包含在其中 因此,电子邮件正在尝试发送到“a@b.com”而不是a@b.com。 来自字段和密码相同 显然它不起作用。

知道如何防止这种情况吗?

1 个答案:

答案 0 :(得分:0)

我完成了同样的任务:

在logback.xml文件中,添加:

property resource="filename.properties"

<username>${username}</username>
<password>${password}</password>
<to>${email1}</to>
<from>${from}</from>