【问题标题】:Why isn't this code writing log output on my Tridion Content Delivery server?为什么此代码不在我的 Tridion Content Delivery 服务器上写入日志输出?
【发布时间】:2012-12-31 18:22:58
【问题描述】:

我有一个用户控件呈现来自自定义(非 Tridion)数据库的内容。此自定义数据库的连接字符串不正确,因此当代码尝试连接时出现 SqlException。

我的代码目前是:

var logger = 
    Tridion.ContentDelivery.Web.Utilities
        .LoggerFactory.GetLogger(this.GetType().ToString());
try
{
    /* make a database connection - failing with SqlException */ 
}
catch (SqlException e)
{
    logger.Error("Could not connect to database: " + e.ToString());
}

我的 \bin\config\logback.xml 文件包含:

<property name="log.pattern" value="%date %-5level %logger{0} - %message%n"/>
<property name="log.history" value="7"/>
<property name="log.folder" value="c:/tridion/log"/>
<property name="log.level" value="DEBUG"/>
...
<appender name="rollingCoreLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${log.folder}/cd_core.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>${log.history}</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>${log.pattern}</pattern>
    </encoder>
    <prudent>true</prudent>
</appender>
...
<root level="warn">
    <appender-ref ref="rollingCoreLog"/>
</root>

C:\Tridion\log 中有一堆日志,但最近更改的一个是 20 分钟前修改的,并且不包含我的日志消息文本(我只是在记事本中搜索了“数据库”) .

为什么我的日志输出没有发送到日志中?

【问题讨论】:

  • 内容交付服务器完全正确。我已编辑问题以反映这一点。

标签: tridion tridion-2011 tridion-content-delivery


【解决方案1】:

你有两个选择:

  • 您将根日志记录定义为“DEBUG”,但这样做的缺点是允许从 Tridion 使用的所有第三方库进行大量日志记录。这是sn-p:&lt;root level="DEBUG"&gt; &lt;appender-ref ref="rollingCoreLog"/&gt; &lt;/root&gt;

  • 您定义了一个特殊的附加程序以包括 Tridion .NET 日志记录:&lt;logger name="Tridion.ContentDelivery" level="${log.level}"&gt;&lt;appender-ref ref="rollingCoreLog"/&gt;&lt;/logger&gt;

请注意,在第二种情况下,您需要将记录器绑定到 Tridion.ContentDelivery 下的命名空间。这是一个例子:

var 记录器 = Tridion.ContentDelivery.Web.Utilities.LoggerFactory.GetLogger("Tridion.ContentDelivery.MyNamespace.MyClass");

希望这会有所帮助。

P.S.:回答您的问题:因为您没有附加程序,并且根日志记录设置为 WARN。默认情况下,logback.xml 仅包含“com.tridion”的附加程序,但我猜this.getType().ToString() 的输出不是以该字符串开头的。

【讨论】:

  • 嗨@sea_gull:我的根级别当前是“警告”并且我的日志出现在“错误” - 根级别不应该覆盖该日志记录语句吗?我假设“警告”涵盖“警告”和“错误”,就像在 log4j 中一样。我正在尝试定义一个名为“A.B”的新记录器。假设我的类型是 A.B.C.D,我的 logger.Error() 语句应该包含在该记录器定义中,是吗?
  • 嗨@George:你是对的,日志记录应该在你的文件中。除非您有一些奇怪的定义会阻止您特定类的日志记录。最简单的方法确实是专门为您的班级创建一个记录器并从那里获取:
猜你喜欢
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多