public bool Check(IModel model, string logFile = null) { // set up error logger handler to get errors from parser appender = Logger.Setup(logFile); log = LogManager.GetLogger("Validator"); return(CheckInternal(model, new Dictionary <int, string>())); }
// https://stackoverflow.com/a/19538654/6345585 public static ErrorAppender Setup(string file = null) { Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); // clear in case this is not the first run hierarchy.ResetConfiguration(); PatternLayout patternLayout = new PatternLayout { // ConversionPattern = "%date [%thread] %-5level %logger - %message%newline" ConversionPattern = "%date %-5level - %message%newline" }; patternLayout.ActivateOptions(); if (file != null) { RollingFileAppender roller = new RollingFileAppender { AppendToFile = false, File = file, Layout = patternLayout, MaxSizeRollBackups = 5, MaximumFileSize = "1GB", RollingStyle = RollingFileAppender.RollingMode.Size, StaticLogFileName = true, Threshold = Level.Warn }; roller.ActivateOptions(); hierarchy.Root.AddAppender(roller); } var appender = new ErrorAppender(); appender.ActivateOptions(); hierarchy.Root.AddAppender(appender); // add console appender to see what is happenning var csl = new ColoredConsoleAppender { Layout = patternLayout, Name = "ConsoleAppender", Threshold = Level.Info }; csl.AddMapping(new ColoredConsoleAppender.LevelColors { Level = Level.Error, ForeColor = ColoredConsoleAppender.Colors.Red }); csl.AddMapping(new ColoredConsoleAppender.LevelColors { Level = Level.Warn, ForeColor = ColoredConsoleAppender.Colors.Yellow }); csl.ActivateOptions(); hierarchy.Root.AddAppender(csl); hierarchy.Root.Level = Level.Info; hierarchy.Configured = true; return(appender); }
public bool Check(string file) { // set up error logger handler to get errors from parser var logFile = file + ".log"; appender = Logger.Setup(logFile); log = LogManager.GetLogger("Validator"); var ext = Path.GetExtension(file).ToUpperInvariant().Trim('.'); var format = "UNKNOWN"; switch (ext) { case "IFC": format = "STEP21 (*.ifc)"; break; case "IFCXML": format = "XML (*.ifcXML)"; break; default: break; } log.Info($"Validating file: {file}"); log.Info($"File format: {format}"); try { // open as an in-memory model (all syntactic errors fill be picked up) using (var model = IfcStore.Open(file, null, -1)) { // header information log.Info($"Schema version: {string.Join(", ", model.Header.SchemaVersion)}"); log.Info($"Model View Definitions: {string.Join(", ", model.Header.FileDescription.Description)}"); // STEP21 syntactic errors will be reported in the log already if (appender.Errors.Any()) { // do not proceed because the data is incomplete return(false); } log.Info($"Number of entities: {model.Instances.Count}"); LogEntityHistogram(model); var idMap = new Dictionary <int, string>(); if (file.ToLower().EndsWith(".ifcxml")) { using (var stream = File.OpenRead(file)) { idMap = GetXmlEntityMap(stream, model); } } CheckInternal(model, idMap); } } // XML syntactic errors will be fired as an exception catch (XbimParserException pe) { log.Error($"Parser failure: {pe.Message}."); return(false); } catch (Exception ge) { log.Error($"General failure: {ge.Message}.", ge); return(false); } return(!Errors.Any()); }