잊지 않겠습니다.

'XSLT'에 해당되는 글 1건

  1. 2009.01.09 XML과 LINQ를 이용한 Error Reporter

어제 책을 읽다가 기존에 사용하고 있던 일반적인 text 형태의 Error reporter를 조금 예쁘게 만들어보고 싶다는 생각이 들어서 급조한 소스. 

xslt에 대한 포멧을 아직은 정확히 알지를 못해서 좀더 공부를 해볼 필요가 있을것 같다.
무엇보다 모든 일에 대한 표준화를 제공해줄수 있다는 점에서 가장 큰 장점을 가지고 있는듯. 

Class Source
    using System.Net.Mail;
    using System.Xml;
    using System.Xml.Linq;
    using System.IO;
    using System.Xml.Xsl;

    public class ExceptionReporter
    {
        private readonly Exception reportedException;
        public ExceptionReporter(Exception ex)
        {
            reportedException = ex;
        }

        public string ConvertXml()
        {
            XDocument xDocument = new XDocument();
            XElement rootElement = new XElement("Exceptions");
            XElement element = new XElement("ExceptionInfo");
            
            rootElement.Add(element);
            element.Add(new XElement("ExceptionType", reportedException.GetType().ToString()));
            element.Add(new XElement("Message", reportedException.Message));
            element.Add(new XElement("Source", reportedException.Source));
            element.Add(new XElement("TargetSite", reportedException.TargetSite));
            element.Add(new XElement("StackTrace", reportedException.StackTrace));
            xDocument.Add(rootElement);
            
            string xsl = File.ReadAllText("ErrorReporter.xslt");
            XDocument transformedDoc = new XDocument();
            using(XmlWriter xmlWriter = transformedDoc.CreateWriter())
            {
                XslCompiledTransform transform = new XslCompiledTransform();
                transform.Load(XmlReader.Create(new StringReader(xsl)));
                transform.Transform(xDocument.CreateReader(), xmlWriter);
            }
            return transformedDoc.ToString();
        }

        public bool SendEmailToManager()
        {
            SmtpClient client = new SmtpClient("smtpAddress");
            MailMessage mailMessage = new MailMessage();
            mailMessage.Subject = "Subject";
            mailMessage.IsBodyHtml = true;
            mailMessage.Body = ConvertXml();
            mailMessage.From = new MailAddress("fromMailAddress");
            mailMessage.To.Add(new MailAddress("toMailAddress"));
            client.Send(mailMessage);

            return true;
        }
    }


XSLT File
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
  <xsl:output method='html'/>
  <xsl:template match='/'>
    <body>
      <xsl:apply-templates/>
    </body>    
  </xsl:template>

  <xsl:template match='ExceptionInfo'>
    <table width="100%" bgcolor="#d1d9e4" cellspacing="1" cellpadding="3">
      <tr>
        <td bgcolor="#666666" colspan="2">
          <font face="Arial" color="white">
            <b>Error Information</b>
          </font>
        </td>
      </tr>
      <tr bgcolor="#d0d0d0">
        <th>Parameter</th>
        <th>Data</th>
      </tr>
    <xsl:apply-templates />      
    </table>
  </xsl:template>
  <xsl:template match='ExceptionType'>
    <tr valign="top" bgcolor="white">
      <td>Exception Type</td>
      <td><xsl:apply-templates/></td>
    </tr>
  </xsl:template>  
  <xsl:template match='Message'>
    <tr valign="top" bgcolor="#f4f4f4">
      <td>Message</td>
      <td>
        <xsl:apply-templates/>
      </td>
    </tr>
  </xsl:template>
  <xsl:template match='Source'>
    <tr valign="top" bgcolor="white">
      <td>Source</td>
      <td><xsl:apply-templates/></td>
    </tr>
  </xsl:template>
  <xsl:template match="TargetSite">
    <tr valign="top" bgcolor="#f4f4f4">
      <td>TargetSite</td>
      <td><xsl:apply-templates/></td>
    </tr>    
  </xsl:template>
  <xsl:template match="StackTrace">
    <tr valign="top" bgcolor="white">
      <td>Stack Trace</td>
      <td><xsl:apply-imports/></td>
    </tr>
  </xsl:template>
</xsl:stylesheet>


사용 예제 : 
            try
            {
                File.ReadAllText("C:\\afwqerqwer.txt");
            }
            catch(Exception ex)
            {
                ExceptionReporter reporter = new ExceptionReporter(ex);
                reporter.SendEmailToManager();
                //Console.WriteLine(reporter.ConvertXml());
            }


결과:




Posted by Y2K
,