private DatabaseParameterInfo GetParameter(string name, string layout) { var paramDB = new DatabaseParameterInfo { Name = name, Layout = layout }; return(paramDB); }
// TODO: it seems like it cant do console and file logging at the same time? public static void LogInit() { // TODO: move this config somewhere better and pass in the params if (ConfigurationManager.AppSettings["LogDatabase"].Equals("true", StringComparison.OrdinalIgnoreCase)) { DatabaseTarget target = new DatabaseTarget(); DatabaseParameterInfo param; target.ConnectionString = ConfigurationManager.ConnectionStrings["Log"].ConnectionString; target.CommandText = "insert into Log(timestamp,loglevel,logger,message) values(@time_stamp, @level, @logger, @message);"; param = new DatabaseParameterInfo(); param.Name = "@time_stamp"; param.Layout = "${date}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@level"; param.Layout = "${level}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@logger"; param.Layout = "${logger}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@message"; param.Layout = "${message}"; target.Parameters.Add(param); NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target); } if (ConfigurationManager.AppSettings["LogConsole"].Equals("true", StringComparison.OrdinalIgnoreCase)) { var console = new ColoredConsoleTarget(); console.Layout = "${logger} \t ${message}"; NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(console, LogLevel.Trace); } if (ConfigurationManager.AppSettings["LogFile"].Equals("true", StringComparison.OrdinalIgnoreCase)) { var file = new FileTarget(); file.FileName = "testlog.log"; file.Layout = "${logger} \t ${message}"; NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(file, LogLevel.Trace); } }
public void AddDatabaseTarget(string connectionString, string logLevel, string targetName) { LogLevel loggingLevel = LogLevel.Off; DatabaseTarget target = new DatabaseTarget(targetName); DatabaseParameterInfo param; target.DBProvider = "mssql"; target.ConnectionString = connectionString; target.CommandText = "insert into GwcLogs(LogDate,Level,Logger,Method,Message,Exception) values(@time_stamp, @level, @logger, @method,@message,@exception);"; param = new DatabaseParameterInfo(); param.Name = "@time_stamp"; param.Layout = "${date}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@level"; param.Layout = "${level}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@logger"; param.Layout = "${callsite:className=true:includeSourcePath=false:methodName=false}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@method"; param.Layout = "${callsite:className=false:includeSourcePath=false:methodName=true}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@message"; param.Layout = "${message}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@exception"; param.Layout = "${exception:format=Message,StackTrace,Data}"; target.Parameters.Add(param); ConfigureLogger(targetName, target, logLevel); }
static void nlog_to_db() { ensure_db_exists(); DatabaseTarget target = new DatabaseTarget(); DatabaseParameterInfo param; // just in case issues with db. LogManager.ThrowExceptions = true; // target.DBProvider = "System.Data.SQLite"; target.DBProvider = "System.Data.SQLite.SQLiteConnection, System.Data.SQLite"; //target.ConnectionString = "Data Source=${basedir}\\Log.db3;Version=3;"; target.ConnectionString = "Data Source=Log.db3;Version=3;"; target.CommandType = CommandType.Text; target.CommandText = "insert into Log(time_stamp,level,logger,message) values(@time_stamp, @level, @logger, @message);"; param = new DatabaseParameterInfo(); param.Name = "@time_stamp"; param.Layout = "${date}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@level"; param.Layout = "${level}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@logger"; param.Layout = "${logger}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@message"; param.Layout = "${message}"; target.Parameters.Add(param); NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Debug); }
static void Main(string[] args) { DatabaseTarget target = new DatabaseTarget(); DatabaseParameterInfo param; target.DBProvider = "mssql"; target.DBHost = "."; target.DBUserName = "******"; target.DBPassword = "******"; target.DBDatabase = "databasename"; target.CommandText = "insert into LogTable(time_stamp,level,logger,message) values(@time_stamp, @level, @logger, @message);"; param = new DatabaseParameterInfo(); param.Name = "@time_stamp"; param.Layout = "${date}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@level"; param.Layout = "${level}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@logger"; param.Layout = "${logger}"; target.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@message"; param.Layout = "${message}"; target.Parameters.Add(param); NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Debug); Logger logger = LogManager.GetLogger("Example"); logger.Debug("log message"); }
private void AddParameter(DatabaseTarget dbTarget, string parameterName, string layout) { var par = new DatabaseParameterInfo(parameterName, new NLog.Layouts.SimpleLayout(layout)); dbTarget.Parameters.Add(par); }
public static void ConfigureLogging(string connectionString) { LogManager.ThrowExceptions = true; // Step 1. Create configuration object var config = new LoggingConfiguration(); // Step 2. Create targets and add them to the configuration var databaseTarget = new DatabaseTarget { CommandType = CommandType.Text, ConnectionString = connectionString, DBProvider = "Mono.Data.Sqlite.SqliteConnection, Mono.Data.Sqlite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756", Name = "database", }; var messageParam = new DatabaseParameterInfo { Name = "@Message", Layout = "${message}" }; var callsiteParam = new DatabaseParameterInfo { Name = "@Callsite", Layout = "${callsite}" }; var levelParam = new DatabaseParameterInfo { Name = "@Level", Layout = "${level}" }; var dateParam = new DatabaseParameterInfo { Name = "@Date", Layout = "${date}" }; var loggerParam = new DatabaseParameterInfo { Name = "@Logger", Layout = "${logger}" }; var exceptionParam = new DatabaseParameterInfo { Name = "@Exception", Layout = "${exception:tostring}" }; databaseTarget.Parameters.Add(messageParam); databaseTarget.Parameters.Add(callsiteParam); databaseTarget.Parameters.Add(levelParam); databaseTarget.Parameters.Add(dateParam); databaseTarget.Parameters.Add(loggerParam); databaseTarget.Parameters.Add(exceptionParam); databaseTarget.CommandText = "INSERT INTO Logs (Date,Level,Logger, Message, Callsite, Exception) VALUES(@Date,@Level,@Logger, @Message, @Callsite, @Exception);"; config.AddTarget("database", databaseTarget); // Step 4. Define rules var rule1 = new LoggingRule("*", LogLevel.Debug, databaseTarget); config.LoggingRules.Add(rule1); var currentPath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath) ?? string.Empty, "logs/${shortdate}.log"); var fileTarget = new FileTarget { Name = "file", FileName = currentPath, Layout = "${date} ${logger} ${level}: ${message} ${exception:tostring}", CreateDirs = true }; config.AddTarget(fileTarget); var rule2 = new LoggingRule("*", LogLevel.Debug, fileTarget); config.LoggingRules.Add(rule2); // Step 5. Activate the configuration LogManager.Configuration = config; }
/// <summary> /// Sets the config. /// </summary> /// <param name="connectionstring">The connectionstring.</param> /// <param name="console">The console.</param> /// <param name="file">The file.</param> /// <param name="database">The database.</param> /// <returns></returns> public static LoggingConfiguration SetConfig(string connectionstring, bool?console = null, bool?file = null, bool?database = null) { // Step 1. Create configuration object var config = new LoggingConfiguration(); #region Console if (console.HasValue ? console.Value : true) { // Step 2. Create targets and add them to the configuration var consoleTarget = new TraceTarget(); config.AddTarget("console", consoleTarget); // Step 3. Set target properties consoleTarget.Layout = string.Format("${{date:format=HH\\:mm\\:ss.fff}} ${{level}} ${{event-context:item={0}}} ${{event-context:item={1}}} ${{message}} ${{event-context:item={2}}} ${{event-context:item={3}}} ${{event-context:item={4}}} ${{event-context:item={5}}} ${{event-context:item={6}}} ${{event-context:item={7}}} ${{event-context:item={8}}}", NLogExceptionType, NLogExceptionId, NLogApplication, NLogAppVersion, NLogVerb, NLogRequestUrl, NLogJSonSession, NLogJsonRequest, NLogCorrId); // Step 4. Define rules LogLevel level = LogLevel.Trace; var rule1 = new LoggingRule("*", level, consoleTarget); config.LoggingRules.Add(rule1); } #endregion #region File if (file.HasValue ? file.Value : !console.GetValueOrDefault()) { var fileTarget = new FileTarget(); var asyncwrapperFile = new NLog.Targets.Wrappers.AsyncTargetWrapper(fileTarget); // fileTarget.FileName = string.Format("${{basedir}}\\{{$event-context:item={0}}}\\${{shortdate}}_${{level}}.log", NLogApplication); fileTarget.FileName = string.Format("{0}/${{shortdate}}_${{level}}.log", "${basedir}/log"); fileTarget.Layout = string.Format("\n${{date:format=HH\\:mm\\:ss}} ${{level}} ${{event-context:item={0}}} ${{event-context:item={1}}} ${{event-context:item={2}}}\n${{message}}\n${{event-context:item={3}}} ${{event-context:item={4}}} ${{event-context:item={5}}} ${{event-context:item={6}}} ${{event-context:item={7}}} ${{event-context:item={8}}}", NLogExceptionType, NLogExceptionId, NLogApplication, NLogAppVersion, NLogVerb, NLogRequestUrl, NLogJsonRequest, NLogJSonSession, NLogCorrId); config.AddTarget("file", asyncwrapperFile); LogLevel level = LogLevel.Error; var rule2 = new LoggingRule("*", level, asyncwrapperFile); // filter na vstupne parametre rule2.Filters.Add(new ConditionBasedFilter { Condition = "equals('${logger}','StringMapTypeDeserializer')", Action = FilterResult.Ignore }); config.LoggingRules.Add(rule2); } #endregion #region Database if (database.HasValue ? database.Value : true) { var databaseTarget = new DatabaseTarget(); // NLog.Targets.Wrappers.AsyncTargetWrapper asyncwrapperDb = new NLog.Targets.Wrappers.AsyncTargetWrapper(databaseTarget); databaseTarget.ConnectionString = connectionstring; databaseTarget.CommandText = "set context_info 0x50006F00730074004400650070006C006F007900;INSERT INTO [reg].[D_Log]([Application],[Version],[machine],[Log_Level],[Logger],[Verb],[RequestUrl],[JsonSession],[JsonRequest],[Message],[LastSoapRequestMessage],[LastSoapResponseMessage],[ErrorType],[ErrorIdentifier],[CorrId]) VALUES (@Application,@Version,@machine,@Log_Level,@Logger,@Verb,@RequestUrl,@JsonSession,@JsonRequest,@Message,@LastSoapRequestMessage,@LastSoapResponseMessage,@ErrorType,@ErrorIdentifier,@CorrId)"; databaseTarget.KeepConnection = false; databaseTarget.Name = "DLog"; var param = new DatabaseParameterInfo(); param.Name = "@Application"; param.Layout = string.Format("${{event-context:item={0}}}", NLogApplication); databaseTarget.Parameters.Add(param); /*param = new DatabaseParameterInfo(); * param.Name = "@Time_Stamp"; * param.Layout = "${date}"; * databaseTarget.Parameters.Add(param); */ param = new DatabaseParameterInfo(); param.Name = "@Log_Level"; param.Layout = "${level}"; databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@Logger"; param.Layout = "${logger}"; databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@Verb"; param.Layout = string.Format("${{event-context:item={0}}}", NLogVerb); databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@RequestUrl"; param.Layout = string.Format("${{event-context:item={0}}}", NLogRequestUrl); databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@JsonSession"; param.Layout = string.Format("${{event-context:item={0}}}", NLogJSonSession); databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@JsonRequest"; param.Layout = string.Format("${{event-context:item={0}}}", NLogJsonRequest); databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@Version"; param.Layout = string.Format("${{event-context:item={0}}}", NLogAppVersion); databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@LastSoapRequestMessage"; param.Layout = string.Format("${{event-context:item={0}}}", NLogLastSoapRequestMessage); databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@LastSoapResponseMessage"; param.Layout = string.Format("${{event-context:item={0}}}", NLogLastSoapResponseMessage); databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@CorrId"; param.Layout = string.Format("${{event-context:item={0}}}", NLogCorrId); databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@machine"; param.Layout = "${machinename}"; databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@Message"; param.Layout = "${message}"; databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@ErrorType"; param.Layout = string.Format("${{event-context:item={0}}}", NLogExceptionType); databaseTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@ErrorIdentifier"; param.Layout = string.Format("${{event-context:item={0}}}", NLogExceptionId); databaseTarget.Parameters.Add(param); //config.AddTarget("database", asyncwrapperDb); config.AddTarget("database", databaseTarget); LogLevel level = LogLevel.Warn; var ruleDb = new LoggingRule("*", level, databaseTarget); // filter na vstupne parametre ruleDb.Filters.Add(new ConditionBasedFilter { Condition = "equals('${logger}','StringMapTypeDeserializer')", Action = FilterResult.Ignore }); // ruleDb.Filters.Add(new NLog.Filters.Filter()); //var ruleDb = new LoggingRule("*", LogLevel.Error, asyncwrapperDb); config.LoggingRules.Add(ruleDb); } #endregion #region GrayLog /* * var greyLogHost = WebConfigurationManager.AppSettings["GreyLogHost"]; * if (!string.IsNullOrEmpty(greyLogHost)) * { * var greyLogHostParsed = greyLogHost.Split(':'); * if (greyLogHostParsed.Length >= 3 && int.TryParse(greyLogHostParsed[2], out int remotePort)) * { * var assembly = System.Reflection.Assembly.Load("EasyGelf.NLog"); * ConfigurationItemFactory.Default.RegisterItemsFromAssembly(assembly); * * EasyGelf.NLog.GelfTargetBase gelfTarget = null; * var remoteAddress = greyLogHostParsed[0]; * var transportType = greyLogHostParsed[1]; * LogLevel level = (greyLogHostParsed.Length > 3 ? string.IsNullOrEmpty(greyLogHostParsed[3]) : true) ? LogLevel.Trace : LogLevel.FromString(greyLogHostParsed[3]); * * if (transportType == "tcp") * { * gelfTarget = new EasyGelf.NLog.GelfTcpTarget() * { * Facility = WebEasNLogLogger.Application, * RemoteAddress = remoteAddress, * RemotePort = remotePort * }; * } * * if (transportType == "udp") * { * gelfTarget = new EasyGelf.NLog.GelfUdpTarget() * { * Facility = WebEasNLogLogger.Application, * RemoteAddress = remoteAddress, * RemotePort = remotePort * }; * } * * if (gelfTarget != null) * { * config.AddTarget("gelfTarget", gelfTarget); * gelfTarget.Layout = string.Format("${{date:format=HH\\:MM\\:ss}} ${{level}} ${{event-context:item={0}}} ${{event-context:item={1}}} ${{message}} ${{event-context:item={2}}} ${{event-context:item={3}}} ${{event-context:item={4}}} ${{event-context:item={5}}} ${{event-context:item={6}}} ${{event-context:item={7}}} ${{event-context:item={8}}}", NLogExceptionType, NLogExceptionId, NLogApplication, NLogAppVersion, NLogVerb, NLogRequestUrl, NLogJSonSession, NLogJsonRequest, NLogCorrId); * //gelfTarget.Layout = "${message}"; * config.LoggingRules.Add(new LoggingRule("*", level, gelfTarget)); * } * } * } */ #endregion // Step 5. Activate the configuration LogManager.Configuration = config; LogManager.ThrowExceptions = true; LogManager.ReconfigExistingLoggers(); return(config); }
public static string Name(this DatabaseParameterInfo parameter) { return(ParamRegex.Match(parameter.Name).Groups["name"].Value); }
public static bool Nullable(this DatabaseParameterInfo parameter) { return(ParamRegex.Match(parameter.Name).Groups["null"].Success); }
public static string FullName(this DatabaseParameterInfo parameter) { return(string.Format("{0}{1}", parameter.Prefix(), parameter.Name())); }
public static void InitSamayLogger(string samayDB_ConnectionString) { //initialize the logger to log using NLog to SQLite Database try { InitConversions(); DatabaseParameterInfo param; dbTarget.KeepConnection = false; dbTarget.UseTransactions = false; dbTarget.DBProvider = "System.Data.SQLite.SQLiteConnection, System.Data.SQLite"; dbTarget.ConnectionString = samayDB_ConnectionString; dbTarget.CommandText = "INSERT into LOGS (TimeStamp, Level, Message, JobName, TaskName) values(@Timestamp, @Loglevel,@Message, @JobName, @TaskName)"; param = new DatabaseParameterInfo(); param.Name = "@Timestamp"; //param.Layout = "${longdate}"; // param.Layout = new NLog.LayoutRenderers.DateLayoutRenderer();// param.Layout = "${event-context:item=timestamp}"; dbTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@Loglevel"; param.Layout = "${level}"; dbTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@Message"; param.Layout = "${message}"; dbTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@JobName"; param.Layout = "${event-context:item=jobname}"; dbTarget.Parameters.Add(param); param = new DatabaseParameterInfo(); param.Name = "@TaskName"; param.Layout = "${event-context:item=taskname}"; dbTarget.Parameters.Add(param); #if DEBUG config.AddTarget("Console", consoleTarget); consoleTarget.Layout = "${date:format=HH\\:mm\\:ss} ${logger} ${message}"; #endif fileTarget.Layout = "${longdate} ${logger} ${message}"; fileTarget.FileName = @"c:\samay\logs\logfile.txt"; //fileTarget.ArchiveFileName = @"c:\samay\archives\log.{#}.txt"; //fileTarget.ArchiveEvery = FileArchivePeriod.Day; //fileTarget.ArchiveNumbering = ArchiveNumberingMode.Date; //fileTarget.MaxArchiveFiles = 7; //fileTarget.ConcurrentWrites = true; //fileTarget.KeepFileOpen = false; config.AddTarget("file", fileTarget); fileTarget.Layout = "${longdate} ${logger} ${message}"; fileTarget.FileName = "${basedir}/log.txt"; fileTarget.ArchiveFileName = "${basedir}/archives/log.{#}.txt"; fileTarget.ArchiveEvery = FileArchivePeriod.Day; fileTarget.ArchiveNumbering = ArchiveNumberingMode.Date; fileTarget.MaxArchiveFiles = 7; fileTarget.ConcurrentWrites = true; fileTarget.KeepFileOpen = false; config.AddTarget("file", fileTarget); config.AddTarget("dbTarget", dbTarget); config.AddTarget("file", fileTarget); config.AddTarget("dbTarget", dbTarget); } catch { } finally { LogManager.Configuration = config; } }
public static void ConfigureNLog() { // Step 1. Create configuration object var config = new LoggingConfiguration(); // Step 2. Create targets and add them to the configuration var dbTarget = new DatabaseTarget(); config.AddTarget("Database", dbTarget); dbTarget.ConnectionString = cs.GetDbConnStr(); dbTarget.CommandType = CommandType.StoredProcedure; dbTarget.CommandText = "[dbo].[uspNLogInsert]"; dbTarget.Name = "db"; var machineName = new DatabaseParameterInfo { Name = "@machineName", Layout = "${machinename}" }; var siteName = new DatabaseParameterInfo { Name = "@siteName", Layout = "${iis-site-name}" }; var logged = new DatabaseParameterInfo { Name = "@logged", Layout = "${date}" }; var level = new DatabaseParameterInfo { Name = "@level", Layout = "${level}" }; var userName = new DatabaseParameterInfo { Name = "@username", Layout = "${aspnet-user-identity}" }; var message = new DatabaseParameterInfo { Name = "@message", Layout = "${message}" }; var logger = new DatabaseParameterInfo { Name = "@logger", Layout = "${logger}" }; var properties = new DatabaseParameterInfo { Name = "@properties", Layout = "${all-event-properties:separator=|}" }; var serverName = new DatabaseParameterInfo { Name = "@serverName", Layout = "${aspnet-request:serverVariable=SERVER_NAME}" }; var port = new DatabaseParameterInfo { Name = "@port", Layout = "${aspnet-request:serverVariable=SERVER_PORT}" }; var url = new DatabaseParameterInfo { Name = "@url", Layout = "${aspnet-request:serverVariable=HTTP_URL}" }; var https = new DatabaseParameterInfo { Name = "@https", Layout = "${when:inner=1:when='${aspnet-request:serverVariable=HTTPS}' == 'on'}${when:inner=0:when='${aspnet-request:serverVariable=HTTPS}' != 'on'}" }; var serverAddress = new DatabaseParameterInfo { Name = "@serverAddress", Layout = "" }; var remoteAddress = new DatabaseParameterInfo { Name = "@remoteAddress", Layout = "${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" }; var callSite = new DatabaseParameterInfo { Name = "@callSite", Layout = "${callsite}" }; var exception = new DatabaseParameterInfo { Name = "@exception", Layout = "${exception:tostring}" }; dbTarget.Parameters.Add(machineName); dbTarget.Parameters.Add(siteName); dbTarget.Parameters.Add(logged); dbTarget.Parameters.Add(level); dbTarget.Parameters.Add(userName); dbTarget.Parameters.Add(message); dbTarget.Parameters.Add(logger); dbTarget.Parameters.Add(properties); dbTarget.Parameters.Add(serverName); dbTarget.Parameters.Add(port); dbTarget.Parameters.Add(url); dbTarget.Parameters.Add(https); dbTarget.Parameters.Add(serverAddress); dbTarget.Parameters.Add(remoteAddress); dbTarget.Parameters.Add(callSite); dbTarget.Parameters.Add(exception); // Step 4. Define rules var nLogRule = new LoggingRule("*", LogLevel.Debug, LogLevel.Fatal, dbTarget); config.LoggingRules.Add(nLogRule); // Step 5. Activate the configuration LogManager.Configuration = config; }
public static bool Nullable(this DatabaseParameterInfo parameter) => ParamRegex.Match(parameter.Name).Groups["Null"].Success;
public static string FullName(this DatabaseParameterInfo parameter) => $"{parameter.Prefix()}{parameter.Name()}";
public static string Name(this DatabaseParameterInfo parameter) => ParamRegex.Match(parameter.Name).Groups["Name"].Value;